Jeg var i stand til at konfigurere en linket server til en ekstern Oracle-database, hvilket endte med at blive en proces i flere trin:
- Installer Oracle ODBC-drivere på SQL Server.
- Opret system-DSN til Oracle-database på SQL Server.
- Opret linket server på SQL-server ved hjælp af System DSN.
Trin 1:Installer Oracle ODBC-drivere på serveren
en. Download de nødvendige Oracle Instant Client-pakker:Basic, ODBC og SQL*Plus (valgfrit)
b. Udpak pakkerne til en lokal mappe på SQL-serveren, typisk C:\Oracle
. Dette skulle resultere i en [mappe] som C:\Oracle\instantclient_10_2
, som vil være værdien af [mappe], der henvises til i resten af dette svar.
c. Opret en tekstfil med navnet tnsnames.ora
i den øjeblikkelige klient [mappe], der indeholder følgende:
OracleTnsName =
(
DESCRIPTION=
(
ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521)
)
(
CONNECT_DATA = (SERVICE_NAME=acc)
)
)
Bemærk:Faktisk HOST
, PORT
og SERVICE_NAME
vil variere afhængigt af den Oracle-server, du opretter forbindelse til. Disse oplysninger kan ofte findes ved hjælp af Oracle-netværksklientværktøjerne under lyttere .
OracleTnsName
kan være et hvilket som helst navn, du ønsker at tildele Oracle-datakilden, og vil blive brugt ved opsætning af systemets DSN. Du kan også bruge syntaksen ovenfor til at definere flere TNS-navne i den samme tnsnames.ora-fil, hvis det ønskes.
d. Tilføj [mappen] til systemet PATH
miljøvariabel.
e. Opret en ny systemmiljøvariabel ved navn TNS_Admin
der har en værdi på [mappe]
f. Udfør [mappe]\odbc_install.exe
værktøj til at installere Oracle ODBC-driverne.
g. Det anbefales, at du genstarter SQL-serveren, men det er muligvis ikke nødvendigt. Det kan også være en god idé at give sikkerhedstilladelser til denne mappe for SQL-serveren og SQL-agentens brugeridentiteter.
Trin 2:Opret en system-DNS, der bruger Oracle ODBC-driveren
en. Åbn ODBC Data Source Administrator værktøj. [ Administrative værktøjer --> Datakilder (ODBC) ]
b. Vælg fanen System DSN, og vælg derefter knappen Tilføj.
c. Vælg Oracle i instantclient {version} på driverlisten . (f.eks. 'Oracle i instantclient 10_2'), og vælg derefter knappen Udfør.
d. Angiv følgende:
Datakildenavn
:{System DSN-navnBeskrivelse
:{lad tomt/tomTNS-tjenestenavn
:skal haveOracleTnsName
du definerede itnsnames.ora
fil på listen, vælg den som værdi.- Bruger-id :{Oracle-brugernavn
e. Vælg knappen Test forbindelse. Du skal blive bedt om at angive {Oracle-brugeradgangskoden}. Hvis alt går vel, vil testen lykkes.
Trin 3:Opret linket server i SQL til Oracle-databasen
Åbn et forespørgselsvindue i SQL-serveren, og udfør følgende:
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}'
Bemærk:{System DNS Name}
skal matche navnet på det system-DSN, du tidligere oprettede.
{Oracle User Password
skal være den samme, som du brugte til at teste ODBC-forbindelsen. Se KB 280106 for oplysninger om fejlfinding af Oracle-forbundne serverproblemer.
Forespørgsel på den Oracle-linkede server
Du kan bruge OPENQUERY til at udføre pass-through-forespørgsler på den Oracle-linkede server, men vær opmærksom på, at for meget store postsæt kan du modtage en ORA-01652
fejlmeddelelse, hvis du angiver en ORDER BY
klausul i pass-through-forespørgslen. Flytning af ORDER BY
klausul fra pass-through-forespørgslen til den ydre select-sætning løste dette problem for mig.