Ik kon een gekoppelde server opzetten naar een externe Oracle-database, wat uiteindelijk een proces met meerdere stappen was:
- Installeer Oracle ODBC-stuurprogramma's op SQL Server.
- Maak systeem-DSN naar Oracle-database op SQL Server.
- Maak een gekoppelde server op een SQL-server met behulp van System DSN.
Stap 1:Installeer Oracle ODBC-stuurprogramma's op de server
a. Download de benodigde Oracle Instant Client-pakketten:Basic, ODBC en SQL*Plus (optioneel)
b. Pak de pakketten uit naar een lokale map op de SQL-server, meestal C:\Oracle
. Dit zou moeten resulteren in een [map] zoals C:\Oracle\instantclient_10_2
, wat de waarde is van [directory] waarnaar in de rest van dit antwoord wordt verwezen.
c. Maak een tekstbestand met de naam tnsnames.ora
binnen de instant client [directory] die het volgende bevat:
OracleTnsName =
(
DESCRIPTION=
(
ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521)
)
(
CONNECT_DATA = (SERVICE_NAME=acc)
)
)
Opmerking:werkelijke HOST
, PORT
, en SERVICE_NAME
zal variëren op basis van de Oracle-server waarmee u een verbinding tot stand brengt. Deze informatie is vaak te vinden met behulp van de Oracle-netwerkclienttools onder de luisteraars .
De OracleTnsName
kan elke naam zijn die u aan de Oracle-gegevensbron wilt toewijzen, en zal worden gebruikt bij het instellen van de systeem-DSN. Je kunt desgewenst ook de bovenstaande syntaxis gebruiken om meerdere TNS-namen in hetzelfde tnsnames.ora-bestand te definiëren.
d. Voeg de [directory] toe aan het systeem PATH
omgevingsvariabele.
e. Maak een nieuwe systeemomgevingsvariabele met de naam TNS_Admin
die een waarde heeft van [directory]
f. Voer de [directory]\odbc_install.exe
. uit hulpprogramma om de Oracle ODBC-stuurprogramma's te installeren.
g. Het wordt aanbevolen om de SQL-server opnieuw op te starten, maar dit is mogelijk niet nodig. U kunt ook beveiligingsmachtigingen aan deze map verlenen voor de gebruikersidentiteiten van de SQL-server en de SQL-agent.
Stap 2:maak een systeem-DNS die de Oracle ODBC-driver gebruikt
a. Open de ODBC-gegevensbronbeheerder hulpmiddel. [ Systeembeheer --> Gegevensbronnen (ODBC) ]
b. Selecteer het tabblad Systeem-DSN en selecteer vervolgens de knop Toevoegen.
c. Selecteer in de lijst met stuurprogramma's Oracle in instantclient {versie} . (bijv. 'Oracle in instantclient 10_2') en selecteer vervolgens de knop Voltooien.
d. Specificeer het volgende:
Data Source Name
:{Systeem DSN-naam}Description
:{leeg/leeg laten}TNS Service Name
:moet deOracleTnsName
. hebben u hebt gedefinieerd in detnsnames.ora
bestand, selecteert u het als de waarde.- Gebruikers-ID :{Oracle gebruikersnaam}
e. Selecteer de knop Verbinding testen. U moet worden gevraagd om het {Oracle-gebruikerswachtwoord} op te geven. Als alles goed gaat, zal de test slagen.
Stap 3:Maak een gekoppelde server in SQL aan de Oracle-database
Open een queryvenster in de SQL-server en voer het volgende uit:
EXEC sp_addlinkedserver
@server = '{Linked Server Name}'
,@srvproduct = '{System DSN Name}'
,@provider = 'MSDASQL'
,@datasrc = '{System DSN Name}'
EXEC sp_addlinkedsrvlogin
@rmtsrvname = '{Linked Server Name}'
,@useself = 'False'
,@locallogin = NULL
,@rmtuser = '{Oracle User Name}'
,@rmtpassword = '{Oracle User Password}'
Opmerking:de {Linked Server Name}
kan alles zijn wat u wilt gebruiken bij het verwijzen naar de Oracle-server, maar de {System DNS Name}
moeten overeenkomen met de naam van de systeem-DSN die u eerder hebt gemaakt.
De {Oracle User Name}
moet hetzelfde zijn als de gebruikers-ID die wordt gebruikt door de systeem-DSN en het {Oracle User Password}
moet hetzelfde zijn als waarmee u de ODBC-verbinding hebt getest. Zie KB 280106 voor informatie over het oplossen van problemen met gekoppelde Oracle-servers.
De Oracle-gekoppelde server opvragen
U kunt OPENQUERY gebruiken om pass-through-query's uit te voeren op de Oracle-gekoppelde server, maar houd er rekening mee dat u voor zeer grote recordsets een ORA-01652
kunt ontvangen foutmelding als u een ORDER BY
. opgeeft clausule in de pass-through-query. De ORDER BY
. verplaatsen clausule van de pass-through-query naar de buitenste select-instructie loste dit probleem voor mij op.