Ich war in der Lage, einen Verbindungsserver zu einer Remote-Oracle-Datenbank einzurichten, was letztendlich ein mehrstufiger Prozess war:
- Installieren Sie Oracle ODBC-Treiber auf SQL Server.
- System-DSN für Oracle-Datenbank auf SQL Server erstellen.
- Verknüpften Server auf SQL-Server mit System-DSN erstellen.
Schritt 1:Oracle ODBC-Treiber auf dem Server installieren
a. Laden Sie die erforderlichen Oracle Instant Client-Pakete herunter:Basic, ODBC und SQL*Plus (optional)
b. Entpacken Sie die Pakete in ein lokales Verzeichnis auf dem SQL-Server, normalerweise C:\Oracle
. Dies sollte zu einem [Verzeichnis] wie C:\Oracle\instantclient_10_2
führen , was der Wert von [Verzeichnis] ist, auf das im Rest dieser Antwort verwiesen wird.
c. Erstellen Sie eine Textdatei namens tnsnames.ora
innerhalb des Instant-Client-[Verzeichnisses], das Folgendes enthält:
OracleTnsName =
(
DESCRIPTION=
(
ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521)
)
(
CONNECT_DATA = (SERVICE_NAME=acc)
)
)
Hinweis:Tatsächlicher HOST
, PORT
und SERVICE_NAME
variiert je nach Oracle-Server, zu dem Sie eine Verbindung herstellen. Diese Informationen können häufig mithilfe der Oracle-Netzwerk-Client-Tools unter den Listenern gefunden werden .
Der OracleTnsName
kann ein beliebiger Name sein, den Sie der Oracle-Datenquelle zuweisen möchten, und wird beim Einrichten des System-DSN verwendet. Sie können bei Bedarf auch die obige Syntax verwenden, um mehrere TNS-Namen in derselben tnsnames.ora-Datei zu definieren.
d. Fügen Sie das [Verzeichnis] zum PATH
des Systems hinzu Umgebungsvariable.
e. Erstellen Sie eine neue Systemumgebungsvariable namens TNS_Admin
das einen Wert von [Verzeichnis]
f. Führen Sie [directory]\odbc_install.exe
aus Dienstprogramm zum Installieren der Oracle ODBC-Treiber.
g. Ein Neustart des SQL-Servers wird empfohlen, ist aber möglicherweise nicht erforderlich. Außerdem sollten Sie diesem Verzeichnis Sicherheitsberechtigungen für die Benutzeridentitäten des SQL-Servers und des SQL-Agenten erteilen.
Schritt 2:Erstellen Sie ein System-DNS, das den Oracle ODBC-Treiber verwendet
a. Öffnen Sie den ODBC-Datenquellen-Administrator Werkzeug. [Verwaltung --> Datenquellen (ODBC)]
b. Wählen Sie die Registerkarte System-DSN und dann die Schaltfläche Hinzufügen.
c. Wählen Sie in der Treiberliste Oracle in Instantclient {Version} aus . (z. B. 'Oracle in instantclient 10_2') und wählen Sie dann die Schaltfläche "Fertig stellen".
d. Geben Sie Folgendes an:
Data Source Name
:{System-DSN-Name}Description
:{leer lassen/leer}TNS Service Name
:sollte denOracleTnsName
haben Sie intnsnames.ora
definiert haben Datei aufgelistet, wählen Sie sie als Wert aus.- Benutzer-ID :{Oracle-Benutzername}
e. Wählen Sie die Schaltfläche Verbindung testen. Sie sollten aufgefordert werden, das {Oracle-Benutzerpasswort} anzugeben. Wenn alles gut geht, wird der Test erfolgreich sein.
Schritt 3:Verbindungsserver in SQL zur Oracle-Datenbank erstellen
Öffnen Sie ein Abfragefenster in SQL Server und führen Sie Folgendes aus:
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}'
Hinweis:Der {Linked Server Name}
kann alles sein, was Sie beim Verweisen auf den Oracle-Server verwenden möchten, außer {System DNS Name}
müssen mit dem Namen des System-DSN übereinstimmen, den Sie zuvor erstellt haben.
Der {Oracle User Name}
sollte mit der vom System-DSN verwendeten Benutzer-ID und dem {Oracle User Password}
identisch sein sollte derselbe sein, den Sie verwendet haben, um die ODBC-Verbindung erfolgreich zu testen. Siehe KB 280106 für Informationen zur Behebung von Problemen mit Oracle Linked Server.
Abfrage des Oracle-Linked-Servers
Sie können OPENQUERY verwenden, um Pass-Through-Abfragen auf dem Oracle-Linked-Server auszuführen, aber beachten Sie, dass Sie bei sehr großen Datensätzen möglicherweise einen ORA-01652
erhalten Fehlermeldung, wenn Sie einen ORDER BY
angeben -Klausel in der Pass-Through-Abfrage. Verschieben des ORDER BY
-Klausel von der Pass-Through-Abfrage zur äußeren Select-Anweisung hat dieses Problem für mich gelöst.