Jag kunde konfigurera en länkad server till en fjärrbaserad Oracle-databas, vilket slutade med en process i flera steg:
- Installera Oracle ODBC-drivrutiner på SQL Server.
- Skapa system-DSN till Oracle-databas på SQL Server.
- Skapa länkad server på SQL-servern med system-DSN.
Steg 1:Installera Oracle ODBC-drivrutiner på servern
a. Ladda ner de nödvändiga Oracle Instant Client-paketen:Basic, ODBC och SQL*Plus (valfritt)
b. Packa upp paketen till en lokal katalog på SQL-servern, vanligtvis C:\Oracle . Detta bör resultera i en [katalog] som C:\Oracle\instantclient_10_2 , vilket kommer att vara värdet på [katalog] som refereras till i resten av det här svaret.
c. Skapa en textfil med namnet tnsnames.ora inom direktklienten [katalog] som innehåller följande:
OracleTnsName =
(
DESCRIPTION=
(
ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521)
)
(
CONNECT_DATA = (SERVICE_NAME=acc)
)
)
Obs:Faktisk HOST , PORT och SERVICE_NAME kommer att variera beroende på Oracle-server som du upprättar en anslutning till. Denna information kan ofta hittas med hjälp av Oracles nätverksklientverktyg under lyssnare .
OracleTnsName kan vara vilket namn som helst som du vill tilldela Oracle-datakällan och kommer att användas när du ställer in systemets DSN. Du kan också använda syntaxen ovan för att definiera flera TNS-namn i samma tnsnames.ora-fil om så önskas.
d. Lägg till [katalogen] i systemet PATH miljövariabel.
e. Skapa en ny systemmiljövariabel med namnet TNS_Admin som har värdet [katalog]
f. Kör [katalog]\odbc_install.exe verktyg för att installera Oracle ODBC-drivrutiner.
g. Det rekommenderas att du startar om SQL-servern, men det kanske inte är nödvändigt. Du kanske också vill ge säkerhetsbehörigheter till den här katalogen för SQL-serverns och SQL-agentens användaridentiteter.
Steg 2:Skapa en system-DNS som använder Oracle ODBC-drivrutinen
a. Öppna ODBC Data Source Administrator verktyg. [ Administrativa verktyg --> Datakällor (ODBC) ]
b. Välj fliken System DSN och välj sedan knappen Lägg till.
c. I drivrutinslistan väljer du Oracle i instantclient {version} . (t.ex. 'Oracle i instantclient 10_2') och välj sedan knappen Slutför.
d. Ange följande:
Datakällans namn:{System DSN Name}Beskrivning:{lämna tomt/tomTNS-tjänstens namn:bör haOracleTnsNamedu definierade itnsnames.oralistan, välj den som värde.- Användar-ID :{Oracle användarnamn}
e. Välj knappen Testa anslutning. Du bör uppmanas att ange {Oracle-användarlösenordet}. Om allt går bra kommer testet att lyckas.
Steg 3:Skapa länkad server i SQL till Oracle-databasen
Öppna ett frågefönster i SQL-servern och kör följande:
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}'
Obs:{System DNS Name} måste matcha namnet på systemets DSN du skapade tidigare.
{Oracle User Password bör vara samma som du använde för att framgångsrikt testa ODBC-anslutningen. Se KB 280106 för information om felsökning av Oracle-länkade serverproblem.
Fråga den länkade Oracle-servern
Du kan använda OPENQUERY för att utföra genomkopplingsfrågor på den länkade Oracle-servern, men tänk på att för mycket stora postuppsättningar kan du få en ORA-01652 felmeddelande om du anger en ORDER BY klausul i pass-through-frågan. Flyttar ORDER BY klausulen från pass-through-frågan till den yttre select-satsen löste det här problemet för mig.