Einrichten und Problembehandlung eines verknüpften Servers mit einer Oracle-Datenbank in SQL Server
In diesem Artikel wird beschrieben, wie Sie einen verknüpften Server von einem Computer einrichten, auf dem Microsoft SQL Server ausgeführt wird, in einer Oracle-Datenbank und grundlegende Schritte zur Problembehandlung für häufige Fehler, die beim Einrichten eines verknüpften Servers mit einer Oracle-Datenbank auftreten können.
Originalproduktversion: Microsoft SQL Server 2005 Standard Edition, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 Enterprise Edition, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Workgroup Edition
Ursprüngliche KB-Nummer: 280106
Zusammenfassung
In diesem Artikel wird beschrieben, wie Sie einen verknüpften Server von einem Computer einrichten, auf dem Microsoft SQL Server ausgeführt wird, in einer Oracle-Datenbank ausführen, und bietet grundlegende Schritte zur Problembehandlung für häufige Fehler, die beim Einrichten eines verknüpften Servers mit Oracle auftreten können. Die meisten Informationen in diesem Artikel gelten für Umgebungen, die für die Verwendung des Microsoft OLEDB-Anbieters für Oracle (MSDAORA) konfiguriert sind. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Verwenden Sie stattdessen den OLE DB-Anbieter von Oracle.
Weitere Informationen zum Konfigurieren eines verknüpften Servers mithilfe des OLEDB-Anbieters von Oracle finden Sie unter "So wird's ausgeführt" mit Oracle und Linked Servers.
Wichtig
Die aktuelle Version des Microsoft ODBC-Treibers für Oracle entspricht der ODBC 2.5-Spezifikation, während der OLE DB-Anbieter für Oracle ein nativer Oracle 7 OCI-API-Anbieter ist. Sowohl der Treiber als auch der Anbieter verwenden den SQL*Net Client (oder Net8-Client für Oracle 8x) und die Oracle Call Interface (OCI)-Bibliothek und andere Oracle-Clientkomponenten, um eine Verbindung mit Oracle-Datenbanken herzustellen und Daten abzurufen. Die Oracle-Clientkomponenten sind wichtig und müssen ordnungsgemäß konfiguriert werden, um eine erfolgreiche Verbindung mit Oracle-Datenbanken mithilfe des Treibers und des Anbieters herzustellen.
Von Microsoft Data Access Components (MDAC) Version 2.5 und höher unterstützen sowohl der Microsoft ODBC-Treiber als auch der OLE DB-Anbieter NUR Oracle 7 und Oracle 8i mit den folgenden Einschränkungen:
Oracle 8.x-spezifische Datentypen wie CLOB, BLOB, BFILE, NCHAR, NCLOB und NVARCHAR2 werden nicht unterstützt.
Das Unicode-Feature für Oracle 7.x- und 8.x-Server wird nicht unterstützt.
Mehrere Oracle-Clientinstanzen oder mehrere Oracle-Häuser werden nicht unterstützt, da sie auf das erste Vorkommen des Oracle Home in der SYSTEM PATH-Variablen angewiesen sind.
Das Zurückgeben mehrerer Resultsets aus einer gespeicherten Prozedur oder Batch-SQL-Anweisung wird nicht mit ADO oder OLEDB unterstützt.
Geschachtelte äußere Verknüpfungen werden nicht unterstützt.
Die XML-Persistenz wird nicht unterstützt.
Die Version größer als 8i wird mit diesen Treibern nicht unterstützt.
Notiz
Die in diesem Artikel genannten Fremdanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.
Schritte zum Einrichten eines verknüpften Servers mit Oracle
Sie müssen die Oracle-Clientsoftware auf dem Computer installieren, auf dem SQL Server ausgeführt wird, auf dem der verknüpfte Server eingerichtet ist.
Installieren Sie den gewünschten Treiber auf dem Computer, auf dem SQL Server ausgeführt wird. Microsoft unterstützt nur Microsoft OLE DB-Anbieter für Oracle und Microsoft ODBC-Treiber für Oracle. Wenn Sie einen Drittanbieter oder einen Drittanbieter verwenden, um eine Verbindung mit Oracle herzustellen, müssen Sie sich an den jeweiligen Anbieter wenden, um Probleme zu erhalten, die bei der Verwendung seines Anbieters oder Treibers auftreten können.
Wenn Sie Microsoft OLE DB-Anbieter für Oracle und Microsoft ODBC-Treiber für Oracle verwenden, beachten Sie Folgendes:
Sowohl der OLE DB-Anbieter als auch der ODBC-Treiber, der in Microsoft Data Access Components (MDAC) enthalten ist, erfordern SQL*Net 2.3.x oder eine höhere Version. Sie müssen die Oracle 7.3.x-Clientsoftware oder eine höhere Version auf dem Clientcomputer installieren. Der Clientcomputer ist der Computer, auf dem SQL Server ausgeführt wird.
Stellen Sie sicher, dass MDAC 2.5 oder eine höhere Version auf dem Computer installiert ist, auf dem SQL Server ausgeführt wird. Mit MDAC 2.1 oder einer früheren Version können Sie keine Verbindung mit Datenbanken herstellen, die Oracle 8 verwenden. x oder eine höhere Version.
Damit MDAC 2.5 oder höhere Versionen mit Oracle-Clientsoftware arbeiten können, muss die Registrierung auf dem Clientcomputer geändert werden, auf dem SQL Server ausgeführt wird, wie in der folgenden Tabelle angegeben.
Oracle Client Microsoft Windows 2000 and later versions -------------------------------------------------------------------------- 7.x [HKEY_LOCAL_MACHINE\SOFTWARE Microsoft\MSDTC\MTxOCI] "OracleXaLib"="xa73.dll" "OracleSqlLib"="SQLLib18.dll" "OracleOciLib"="ociw32.dll" 8.0 [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI] "OracleXaLib"="xa80.dll" "OracleSqlLib"="sqllib80.dll" "OracleOciLib"="oci.dll" 8.1 [HKEY_LOCAL_MACHINE\SOFTWARE \Microsoft\MSDTC\MTxOCI] "OracleXaLib"="oraclient8.dll" "OracleSqlLib"="orasql8.dll" "OracleOciLib"="oci.dll"
Starten Sie den Computer neu, auf dem SQL Server ausgeführt wird, nachdem Sie die Oracle-Clientsoftware installiert haben.
Richten Sie auf dem Computer, auf dem SQL Server ausgeführt wird, einen verknüpften Server mithilfe des folgenden Skripts ein.
-- Adding linked server (from SQL Server Books Online): /* sp_addlinkedserver [@server =] 'server'[, [@srvproduct =] 'product_name'] [, [@provider =] 'provider_name'] [, [@datasrc =] 'data_source'] [, [@location =] 'location'] [, [@provstr =] 'provider_string'] [, [@catalog =] 'catalog'] */ EXEC sp_addlinkedserver 'Ora817Link', 'Oracle', 'MSDAORA', 'oracle817' -- Adding linked server login: /* sp_addlinkedsrvlogin [@rmtsrvname =] 'rmtsrvname'[,[@useself =] 'useself'] [,[@locallogin =] 'locallogin'] [,[@rmtuser =] 'rmtuser'] [,[@rmtpassword =] 'rmtpassword'] */ EXEC sp_addlinkedsrvlogin 'Ora817Link', 'FALSE',NULL, 'scott', 'tiger' -- Help on the linked server: EXEC sp_linkedservers EXEC sp_helpserver select * from sysservers
Notiz
Wenn Sie Microsoft ODBC-Treiber für Oracle verwenden, können Sie den
@datasrc
Parameter verwenden, um einen DSN-Namen anzugeben. Bei einer DSN-less-Verbindung wird die Anbieterzeichenfolge über den parameter @provstr bereitgestellt. Verwenden Sie bei Microsoft OLE DB-Anbieter für Oracle den Oracle-Serveralias, der in der Datei TNSNames.Ora für den parameter @datasrc konfiguriert ist. Weitere Informationen finden Sie im Thema "sp_addlinkedserver" in SQL Server Books Online.
Häufige Fehlermeldungen und Problembehandlungen
Wichtig
Dieser Abschnitt, diese Methode bzw. diese Aufgabe enthält eine Beschreibung der Schritte zum Bearbeiten der Registrierung. Durch die falsche Bearbeitung der Registrierung können schwerwiegende Probleme verursacht werden. Daher müssen Sie sicherstellen, dass Sie diese Schritte sorgfältig ausführen. Für weiteren Schutz sichern Sie die Registrierung, bevor Sie sie ändern. Anschließend können Sie die Registrierung wiederherstellen, wenn ein Problem auftritt. Weitere Informationen zum Sichern und Wiederherstellen der Registrierung finden Sie in der Microsoft Knowledge Base auf der folgenden Artikelnummer: 322756 Sichern und Wiederherstellen der Registrierung in Windows
Sie können eine der folgenden beiden Methoden verwenden, um erweiterte Informationen zu allen Fehlern abzurufen, die beim Ausführen einer verteilten Abfrage auftreten.
Methode 1
Stellen Sie eine Verbindung mit SQL Server mit SQL Server Management Studio her, und führen Sie den folgenden Code aus, um das Ablaufverfolgungskennzeichnung 7300 zu aktivieren.
DBCC Traceon(7300)
Methode 2
Erfassen Sie das Ereignis "OLEDB Errors", das sich in der Ereigniskategorie "Errors and Warnings" in SQL Profiler befindet. Das Fehlermeldungsformat lautet wie folgt:
Interface::Method failed with hex-error code.
Sie können den Hex-Fehlercode in der Datei Oledberr.h suchen, die im MDAC Software Development Kit (SDK) enthalten ist.
Nachfolgend finden Sie eine Liste allgemeiner Fehlermeldungen, die auftreten können, zusammen mit Informationen zur Problembehandlung der Fehlermeldung.
Notiz
Wenn Sie SQL Server 2005 oder höhere Versionen verwenden, unterscheiden sich diese Fehlermeldungen möglicherweise geringfügig. Die Fehler-IDs dieser Fehlermeldungen sind jedoch in älteren Versionen von SQL Server identisch. Daher können Sie sie anhand der Fehler-IDs identifizieren. Suchen Sie nach leistungsbezogenen Problemen in SQL Server-Onlinebüchern nach dem Thema "Optimierte verteilte Abfragen ".
Nachricht 1
Fehler 7399: Der OLE DB-Anbieter "%ls" für den verknüpften Server "%ls" hat einen Fehler gemeldet. %ls
Aktivieren Sie die Ablaufverfolgungskennzeichnung 7300, oder verwenden Sie SQL Profiler, um das OLEDB Errors-Ereignis zu erfassen, um erweiterte OLEDB-Fehlerinformationen abzurufen.
Nachricht 2a
"ORA-12154: TNS:could not resolve service name"
Nachricht 2b
"Die Oracle(tm)-Client- und Netzwerkkomponenten wurden nicht gefunden. Diese Komponenten werden von oracle Corporation bereitgestellt und sind Teil der Oracle Version 7.3.3 (oder höher) Clientsoftwareinstallation"
Diese Fehler treten auf, wenn ein Verbindungsproblem mit Oracle Server auftritt. Weitere Problembehandlung finden Sie im Abschnitt "Techniken zur Behandlung von Konnektivitätsproblemen mit Oracle Server " weiter unten.
Nachricht 3
Fehler 7302: Es kann keine Instanz des OLE DB-Anbieters 'MSDAORA' für den verknüpften Server "%ls" erstellt werden.
Stellen Sie sicher, dass die MSDAORA.dll-Datei ordnungsgemäß registriert ist. (Die datei MSDAORA.dll ist der Microsoft OLE DB-Anbieter für Oracle-Datei.) Verwenden Sie RegSvr32.exe, um Microsoft OLE DB-Anbieter für Oracle zu registrieren.
Notiz
Wenn Sie einen Oracle-Anbieter eines Drittanbieters verwenden und Ihr Oracle-Anbieter außerhalb eines SQL Server-Prozesses nicht ausgeführt werden kann, aktivieren Sie ihn, indem Sie die Anbieteroptionen ändern. Verwenden Sie eine der folgenden Methoden, um die Anbieteroptionen zu ändern:
Methode 1 Suchen Sie den folgenden Registrierungsschlüssel. Ändern Sie dann den Wert des AllowInProcess (DWORD)-Eintrags in 1. Dieser Registrierungsschlüssel befindet sich unter dem entsprechenden Anbieternamen:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName
.Methode 2 Führen Sie die folgenden Schritte aus, um die Option "Inprocess zulassen" für Anbieter mit SQL Server Management Studio (SSMS) festzulegen.
- Öffnen Sie SSMS, und stellen Sie eine Verbindung mit Ihrer SQL Server-Instanz her.
- Navigieren Sie in Objekt-Explorer zu Serverobjekten>verknüpfte Serveranbieter.>
- Klicken Sie mit der rechten Maustaste auf den Anbieter, den Sie konfigurieren möchten, und wählen Sie "Eigenschaften" aus.
- Aktivieren Sie im Fenster "Anbieteroptionen " das Kontrollkästchen "Aktivieren " für die Option "Inprocess zulassen".
Nachricht 4
Fehler 7303: Das Datenquellenobjekt des OLE DB-Anbieters 'MSDAORA' für den verknüpften Server "%ls" kann nicht initialisiert werden. [OLE/DB-Anbieter hat eine Nachricht zurückgegeben: ORA-01017: Ungültiger Benutzername/Kennwort; Anmeldung verweigert] OLE DB-Fehlerablaufverfolgung [OLE/DB-Anbieter 'MSDAORA' IDBInitialize::Initialize zurückgegeben 0x80040e4d].
Diese Fehlermeldung gibt an, dass der verknüpfte Server keine korrekte Anmeldezuordnung aufweist. Sie können die
sp_helplinkedsrvlogin
gespeicherte Prozedur ausführen, um die Anmeldeinformationen richtig festzulegen. Stellen Sie außerdem sicher, dass Sie die richtigen Parameter für die Konfiguration des verknüpften Servers angegeben haben.Nachricht 5
Fehler 7306: Die Tabelle '%ls' vom OLE DB-Anbieter 'MSDAORA' für den verknüpften Server "%ls" kann nicht geöffnet werden. Die angegebene Tabelle ist nicht vorhanden. [Zurückgegebene Nachricht des OLE/DB-Anbieters: Tabelle ist nicht vorhanden.][OLE/DB-Anbieter hat eine Nachricht zurückgegeben: ORA-00942: Tabelle oder Ansicht ist nicht vorhanden] OLE DB-Fehlerablaufverfolgung [OLE/DB-Anbieter 'MSDAORA' IOpenRowset::OpenRowset hat 0x80040e37 zurückgegeben: Die angegebene Tabelle ist nicht vorhanden.]
Fehler 7312: Ungültige Verwendung von Schema und/oder Katalog für OLE DB-Anbieter '%ls' für den verknüpften Server "%ls". Es wurde ein vierteiliger Name angegeben, der Anbieter macht jedoch nicht die erforderlichen Schnittstellen verfügbar, um einen Katalog und/oder ein Schema zu verwenden.
Fehler 7313: Für den Anbieter "%ls" für den verknüpften Server "%ls" wurde ein ungültiges Schema oder Katalog angegeben.
Fehler 7314: Der OLE DB-Anbieter "%ls" für den verknüpften Server "%ls" enthält nicht die Tabelle "%ls". Die Tabelle ist nicht vorhanden, oder der aktuelle Benutzer besitzt keine Berechtigungen für diese Tabelle.
Wenn Sie diese Fehlermeldungen erhalten, fehlt möglicherweise eine Tabelle im Oracle-Schema, oder Sie verfügen nicht über Berechtigungen für diese Tabelle. Stellen Sie sicher, dass der Schemaname mit Großbuchstaben eingegeben wurde. Die alphabetische Groß-/Kleinschreibung der Tabelle und der Spalten sollte in den Oracle-Systemtabellen angegeben sein.
Auf der Oracle-Seite wird eine Tabelle oder eine Spalte, die ohne doppelte Anführungszeichen erstellt wird, in Großbuchstaben gespeichert. Wenn die Tabelle oder Spalte in doppelte Anführungszeichen eingeschlossen ist, wird die Tabelle oder Spalte wie folgt gespeichert.
Der folgende Aufruf zeigt, ob die Tabelle im Oracle-Schema vorhanden ist. Dieser Aufruf zeigt auch den genauen Tabellennamen an.
sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'
Nachricht 6
Fehler 7413: Verbindung mit dem verknüpften Server '%ls' (OLE DB-Anbieter '%ls') konnte nicht hergestellt werden. Aktivieren Sie die Delegierung, oder verwenden Sie einen SQL Server-Remoteanmeldenamen für den aktuellen Benutzer. Msg 18456, Ebene 14, Status 1, Zeile 1 Anmeldung für Benutzer '' fehlgeschlagen.
Diese Fehlermeldung gibt an, dass eine verteilte Abfrage ohne explizite Anmeldezuordnung für eine authentifizierte Microsoft Windows-Anmeldung versucht wird. In einer Betriebssystemumgebung, in der die Sicherheitsdelegierung nicht unterstützt wird, benötigen authentifizierte Windows NT-Anmeldungen eine explizite Zuordnung zu einer Remoteanmeldung und einem Kennwort, die mit
sp_addlinkedsrvlogin
dieser Anwendung erstellt wurde.Nachricht 7
Fehler 7391: Der Vorgang konnte nicht ausgeführt werden, da der OLE DB-Anbieter 'MSDAORA' für den verknüpften Server "%ls" keine verteilte Transaktion starten konnte. OLE DB-Fehlerablaufverfolgung [OLE/DB-Anbieter 'MSDAORA' ITransactionJoin::JoinTransaction, zurückgegeben 0x8004d01b]
Vergewissern Sie sich, dass die OCI-Versionen ordnungsgemäß registriert sind, wie weiter oben in diesem Artikel beschrieben.
Notiz
Wenn die Registrierungseinträge alle korrekt sind, wird die MtxOCI.dll Datei geladen. Wenn die datei MtxOCI.dll nicht geladen wird, können Sie keine verteilten Transaktionen mit Oracle mithilfe von Microsoft OLE DB-Anbieter für Oracle oder mit Microsoft ODBC-Treiber für Oracle durchführen. Wenn Sie einen Drittanbieter verwenden und Fehler 7391 erhalten, überprüfen Sie, ob der OLE DB-Anbieter, den Sie verwenden, verteilte Transaktionen unterstützt. Wenn der OLE DB-Anbieter verteilte Transaktionen unterstützt, überprüfen Sie, ob der Microsoft Distributed Transaction Coordinator (MSDTC) ausgeführt wird und netzwerkzugriff aktiviert ist.
Nachricht 8
Fehler 7392: Eine Transaktion für OLE DB-Anbieter 'MSDAORA' für den verknüpften Server "%ls" kann nicht gestartet werden. OLE DB-Fehlerablaufverfolgung [OLE/DB-Anbieter 'MSDAORA' ITransactionLocal::StartTransaction zurückgegeben 0x8004d013: ISOLEVEL=4096].
Der OLE DB-Anbieter hat fehler 7392 zurückgegeben, da nur eine Transaktion für diese Sitzung aktiv sein kann. Dieser Fehler gibt an, dass eine Datenänderungsanweisung für einen OLE DB-Anbieter versucht wird, wenn sich die Verbindung in einer expliziten oder impliziten Transaktion befindet und der OLE DB-Anbieter keine geschachtelten Transaktionen unterstützt. SQL Server erfordert diese Unterstützung, sodass sie unter bestimmten Fehlerbedingungen die Auswirkungen der Datenänderungsanweisung beenden kann, während sie mit der Transaktion fortsetzt.
Wenn
SET XACT_ABORT
dies aktiviert ist, erfordert SQL Server keine unterstützung für geschachtelte Transaktionen vom OLE DB-Anbieter.SET XACT_ABORT ON
Führen Sie daher vor dem Ausführen von Datenänderungsanweisungen für Remotetabellen in einer impliziten oder expliziten Transaktion aus. Führen Sie dies für den Fall aus, dass der verwendete OLE DB-Anbieter geschachtelte Transaktionen nicht unterstützt.
Techniken zur Behandlung von Konnektivitätsproblemen mit Oracle-Server
Führen Sie die folgenden Schritte aus, um die Oracle-Konnektivitätsprobleme mit dem Microsoft ODBC-Treiber für Oracle oder dem Microsoft OLE DB-Anbieter für Oracle zu debuggen:
Verwenden Sie das Oracle SQL Plus-Hilfsprogramm (ein Befehlszeilenabfrageprogramm), um zu überprüfen, ob Sie eine Verbindung mit Oracle herstellen und Daten abrufen können.
Notiz
Wenn Sie keine Verbindung mit Oracle herstellen und Daten abrufen können, verfügen Sie entweder über eine schlechte Installation oder Konfiguration der Oracle Client-Komponenten, oder Sie haben keinen Transparent Network Substrate (TNS)-Dienstalias für den Oracle-Server erstellt, wenn Sie das SQL*Net Easy Configuration- oder Oracle Net8 Easy Configuration-Hilfsprogramm verwendet haben. Wenden Sie sich an Ihren Oracle-Datenbankadministrator (DBA), um zu überprüfen, ob die Oracle-Komponenten ordnungsgemäß installiert und konfiguriert sind.
Überprüfen Sie die Version des Oracle-Clients (SQL*Net-Version), die auf dem Computer installiert ist. Sowohl der Microsoft ODBC-Treiber für Oracle als auch die Microsoft OLE DB-Anbieter für Oracle erfordern die Installation von SQL*Net Version 2.3 oder höher auf dem Clientcomputer.
Die Konnektivität von SQL Plus (das Oracle-Clientabfragetool) funktioniert möglicherweise, aber Sie müssen den Computer neu starten, damit die ODBC/OLE DB-Konnektivität ordnungsgemäß funktioniert.
Notiz
Wenn Sie Oracle 8i verwenden, ist die rgs-Datei leer.
Wenn der Oracle-Client installiert ist und Sie eine Fehlermeldung erhalten, die angibt, dass Oracle Client Components 7.3 oder höher auf dem Computer installiert werden muss, überprüfen Sie, ob die Umgebungsvariable PATH auf dem Clientcomputer den Ordner enthält, in dem der Oracle-Client installiert wurde, z. B. Oracle_Root\Bin. Wenn Sie diesen Ordner nicht finden können, fügen Sie den Ordner zur PATH-Variablen hinzu, um den Fehler zu beheben.
Vergewissern Sie sich, dass sich die datei Ociw32.dll im Ordner Oracle_Root\bin befindet. Diese .dll Datei kann an keinem anderen Speicherort auf dem Clientcomputer vorhanden sein. Stellen Sie sicher, dass die Oracle Client Component DLLs (z. B. die datei Core40.dll und die Datei Ora*.dll) nicht außerhalb des Oracle_Root Ordners oder Unterordners vorhanden sind.
Stellen Sie sicher, dass eine einzelne Oracle-Clientversion auf dem Computer installiert ist. Mehrere Versionen von SQL*Net können nicht auf demselben Clientcomputer vorhanden sein, die kritische Vorgänge beeinträchtigen und mit kritischen Vorgängen (z. B. TNS- und Alias-Nachschlagevorgänge).
Microsoft empfiehlt, dass Sie über eine lokale Installation des Oracle-Clients verfügen und dies nicht tun, indem Sie einen Oracle-Remoteclient auf Ihrem Computer zuordnen und dann in den Pfad des Systems einschließen, um eine Verbindung mit Oracle über ODBC/OLE DB herzustellen. Der Anbieter und Treiber werden jedoch mit einem lokal installierten Oracle-Client und nicht auf einer Netzwerkfreigabe getestet.