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 haOracleTnsName
du definierade itnsnames.ora
listan, 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.