Problembehandlung bei Oracle-Verlegern

Gilt für:SQL Server

In diesem Thema wird eine Reihe von Problemen aufgeführt, die bei der Konfiguration und Verwendung von Oracle-Verlegern auftreten können.

Fehler bezüglich Oracle-Client- und Netzwerksoftware

Dem Konto, unter dem Microsoft SQL Server auf dem Distributor ausgeführt wird, muss Lese- und Ausführungsberechtigungen für das Verzeichnis (und alle Unterverzeichnisse) erteilt werden, in denen die Oracle-Clientnetzwerksoftware installiert ist. Wenn diese Berechtigungen nicht erteilt worden sind oder die Oracle-Clientkomponenten nicht ordnungsgemäß installiert sind, wird eine Fehlermeldung ähnlich der folgenden angezeigt:

"Fehler bei der Serververbindung mit [Microsoft OLE DB-Anbieter für Oracle]. Oracle Client- und Netzwerkverbindung konnten nicht gefunden werden. Diese Komponenten werden von der Oracle Corporation geliefert und mit der Clientsoftware von Oracle, Version 7.3.3 oder höher, installiert. Sie müssen diese Komponenten installieren, um den Provider verwenden zu können."

Wenn ein entsprechender Oracle-Client im Distributor installiert wurde, stellen Sie sicher, dass SQL Server beendet und nach Abschluss der Clientinstallation neu gestartet wurde. Dies ist erforderlich, damit SQL Server die Clientkomponenten erkennt.

Wenn die Berechtigungen tatsächlich erteilt und die Komponenten ordnungsgemäß installiert sind und der Fehler trotzdem weiterhin angezeigt wird, sollten Sie die Registrierungseinstellungen unter HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI überprüfen:

  • Für Oracle 10g gelten folgende Einstellungen:

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql10.dll

    • OracleXaLib = oraclient10.dll

  • Für Oracle 9i gelten folgende Einstellungen:

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql9.dll

    • OracleXaLib = oraclient9.dll

Verbindung zwischen SQL Server-Verteiler und Oracle-Datenbankinstanz nicht möglich

Wenn der SQL Server-Distributor keine Verbindung mit Oracle Publisher herstellen kann, stellen Sie folgendes sicher:

  • Auf dem Verteiler ist die notwendige Oracle-Software installiert.

  • Die Oracle-Datenbank ist online, und Sie können mit einem Tool wie SQL*Plus eine Verbindung mit der Datenbank herstellen.

  • Der Anmeldename, den die Replikation zur Herstellung einer Verbindung mit dem Oracle-Verleger verwendet, verfügt über ausreichende Berechtigungen. Weitere Informationen finden Sie unter Konfigurieren eines Oracle-Verlegers.

  • Die während der Konfiguration des Oracle-Verteilers definierten TNS-Namen sind in der Datei tnsnames.ora aufgeführt.

  • Das richtige Oracle Home-Verzeichnis und der entsprechende Pfad werden verwendet. Auch wenn nur eine Gruppe von Oracle-Binärdateien im SQL Server-Distributor installiert ist, stellen Sie sicher, dass die Umgebungsvariablen im Zusammenhang mit Oracle Home ordnungsgemäß festgelegt sind. Wenn Sie Umgebungsvariablenwerte ändern, müssen Sie SQL Server beenden und neu starten, damit die Änderung wirksam wird.

Weitere Informationen zum Konfigurieren und Testen der Konnektivität finden Sie unter "Installing and Configuring Oracle Client Networking Software on the SQL Server Distributor" in Configure an Oracle Publisher.

Oracle-Verleger ist mit anderem Verteiler verknüpft

Ein Oracle Publisher kann nur einem SQL Server-Distributor zugeordnet werden. Wenn der Oracle-Verleger bereits mit einem anderen Verteiler verknüpft ist, muss diese Zuordnung gelöscht werden, bevor ein anderer Verteiler verwendet werden kann. Wird die Zuordnung des Verteilers nicht gelöscht, wird eine der folgenden Fehlermeldungen angezeigt:

  • "Oracle Serverinstanz '<OraclePublisherName>' wurde zuvor für die Verwendung von '<SQLServerDistributorName>' als Distributor konfiguriert. Um mit der Verwendung von '<NewSQLServerDistributorName>' als Distributor zu beginnen, müssen Sie die aktuelle Replikationskonfiguration auf der Oracle-Serverinstanz entfernen, die alle Publikationen in dieser Serverinstanz löscht."

  • "Oracle Server '<OracleServerName>' ist bereits als Herausgeber '<OraclePublisherName>' für Den Distributor '<SQLServerDistributorName>' definiert.<DistributionDatabaseName>'. Legen Sie den Herausgeber ab, oder legen Sie das öffentliche Synonym "<SynonymName>" ab, um es neu zu erstellen."

Wenn die Zuordnung eines Oracle-Verlegers gelöscht wird, werden die Replikationsobjekte in der Oracle-Datenbank automatisch bereinigt. In einigen Fällen ist jedoch auch eine manuelle Bereinigung der Oracle-Replikationsobjekte erforderlich. So bereinigen Sie die durch die Replikation erstellten Oracle-Replikationsobjekte manuell:

  1. Stellen Sie eine Verbindung mit dem Oracle-Verleger mit DBA-Berechtigungen her.

  2. Führen Sie den SQL-Befehl DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;aus.

  3. Führen Sie den SQL-Befehl DROP USER <replication_administrative_user_schema>``CASCADE;aus.

SQL Server-Fehler 21663 (Fehlen des Primärschlüssels) wurde ausgelöst

Artikel in Transaktionsveröffentlichungen müssen über einen gültigen Primärschlüssel verfügen. Fehlt dieser Primärschlüssel, finden Sie beim Versuch, den Artikel hinzuzufügen, die folgende Fehlermeldung:

"Es wurde kein gültiger Primärschlüssel für die Quelltabelle gefunden [<TableOwner>].[<TableName>]"

Informationen zu den Anforderungen für Primärschlüssel finden Sie im Abschnitt zu eindeutigen Indizes und Einschränkungen im Thema Design Considerations and Limitations for Oracle Publishers.

SQL Server-Fehler 21642 (Verbindungsserver bereits vorhanden) wurde ausgelöst

Wenn ein Oracle-Verleger zum ersten Mal konfiguriert wird, wird für die Verbindung zwischen dem Verleger und dem Verteiler ein Verbindungsservereintrag erstellt. Der Verbindungsserver hat denselben Namen wie der Oracle-TNS-Dienst. Wenn Sie versuchen, einen Verbindungsserver mit demselben Namen zu erstellen, wird die folgende Fehlermeldung angezeigt:

"Für heterogene Verleger ist ein Verbindungsserver erforderlich. Ein verknüpfter Server mit dem Namen "<LinkedServerName>" ist bereits vorhanden. Entfernen Sie den Verbindungsserver, oder wählen Sie einen anderen Verlegernamen aus."

Dieser Fehler kann auftreten, wenn Sie versuchen, den verknüpften Server direkt zu erstellen, oder wenn Sie die Beziehung zwischen Oracle Publisher und sql Server-Distributor zuvor gelöscht haben, und Sie versuchen jetzt, ihn neu zu konfigurieren. Wenn sie beim Versuch, publisher neu zu konfigurieren, diesen Fehler erhalten, legen Sie den verknüpften Server mit sp_dropserver (Transact-SQL) ab.

Wenn Sie eine Verbindung mit Oracle Publisher über eine verknüpfte Serververbindung herstellen müssen, erstellen Sie einen anderen TNS-Dienstnamen, und verwenden Sie diesen Namen beim Aufrufen von sp_addlinkedserver (Transact-SQL).> Informationen zum Erstellen von TNS-Dienstnamen finden Sie in der Oracle-Dokumentation.

SQL Server-Fehler 21617 wurde ausgelöst

Für das Veröffentlichen mit Oracle wird die Oracle-Anwendung SQL*PLUS verwendet, um das Paket mit Unterstützungscode für den Verleger in die Oracle-Datenbank herunterzuladen. Bevor Sie versuchen, Oracle Publisher zu konfigurieren, überprüft SQL Server, ob SQL*PLUS über den Systempfad des Distributors zugänglich ist. Wenn SQL*PLUS nicht geladen werden kann, wird die folgende Fehlermeldung angezeigt:

"SQL*PLUS konnte nicht ausgeführt werden. Stellen Sie sicher, dass die aktuelle Version des Oracle-Clientcodes auf dem Verteiler installiert ist."

Versuchen Sie, SQL*PLUS im Distributor zu finden. Bei einer Oracle 10g-Clientinstallation lautet der Name dieser ausführbaren Datei sqlplus.exe. Sie ist normalerweise in %ORACLE_HOME%/bin installiert. Um zu überprüfen, ob der Pfad von SQL*PLUS im Systempfad angezeigt wird, überprüfen Sie den Wert der Systemvariablen Path:

  1. Klicken Sie mit der rechten Maustaste auf Arbeitsplatz, und klicken Sie dann auf Eigenschaften.

  2. Klicken Sie auf die Registerkarte Erweitert , und klicken Sie dann auf Umgebungsvariablen.

  3. Wählen Sie im Dialogfeld Umgebungsvariablen in der Liste Systemvariablen die Variable Path aus, und klicken Sie dann auf Bearbeiten.

  4. Wenn im Dialogfeld Systemvariable bearbeiten der Pfad des Ordners, in dem sqlplus.exe enthalten ist, nicht im Textfeld Wert der Variablen vorhanden ist, bearbeiten Sie die Zeichenfolge entsprechend.

  5. Klicken Sie in jedem geöffneten Dialogfeld auf OK , um den Vorgang zu beenden und die Änderungen zu speichern.

Wenn Sie sqlplus.exe auf dem Verteiler nicht finden können, installieren Sie die aktuelle Version der Oracle-Clientsoftware auf dem Verteiler. Weitere Informationen finden Sie unter Konfigurieren eines Oracle-Verlegers.

SQL Server-Fehler 21620 wurde ausgelöst

Wenn Sie eine Verbindung mit einer Oracle-Datenbank vor Version 8.1 herstellen, muss für die Oracle-Veröffentlichung mindestens die Version 9 der Oracle-Clientsoftware auf dem Verteiler installiert sein. Wenn Sie eine Verbindung mit einer Oracle-Datenbank der Version 8.1 oder höher herstellen, wird empfohlen, mindestens die Version 10 der Oracle-Clientsoftware zu verwenden.

Bevor der Oracle-Verleger konfiguriert wird, wird beim Veröffentlichen mit Oracle überprüft, ob es sich bei der Version von SQL*PLUS, auf die über den Systempfad auf dem Verteiler zugegriffen werden kann, um Version 9 oder höher handelt. Ist dies nicht der Fall, wird die folgende Meldung angezeigt:

"Die Version von SQL*PLUS, auf die über die Systemvariable 'Path' zugegriffen wird, ist nicht aktuell genug, um die Veröffentlichung mit Oracle zu unterstützen. Stellen Sie sicher, dass die aktuelle Version des Oracle-Clientcodes auf dem Verteiler installiert ist."

Wenn Sie mehrere Versionen der Oracle-Clientsoftware auf dem Verteiler installiert haben, müssen Sie sicherstellen, dass es sich bei der aktuellsten Version mindestens um Version 9 handelt und dass die Systemvariable Path zuerst auf diese Version verweist (sofern die neueste Version zuerst angezeigt wird, können auch Verweise auf andere Versionen angezeigt werden). Weitere Informationen zum Bearbeiten der Systemvariable Path finden Sie im Abschnitt "SQL Server-Fehler 21617 wurde ausgelöst" weiter oben in diesem Thema.

SQL Server-Fehler 21624 oder 21629 wurde ausgelöst

Bei 64-Bit-Verteilern wird für das Veröffentlichen mit Oracle der OLE DB-Anbieter von Oracle (OraOLEDB.Oracle) verwendet. Stellen Sie sicher, dass der OLE DB-Anbieter von Oracle auf dem Verteiler installiert und registriert ist. Wenn der Anbieter nicht installiert und registriert ist, werden eine oder beide der folgenden Fehlermeldungen angezeigt:

  • "Der registrierte OLE DB-Anbieter von Oracle, OraOLEDB.Oracle, wurde auf dem Verteiler '%s' nicht gefunden. Stellen Sie sicher, dass die aktuelle Version des OLE DB-Anbieters von Oracle auf dem Verteiler installiert und registriert ist."

  • "Der CLSID-Registrierungsschlüssel, der anzeigt, dass der OLE DB-Anbieter von Oracle, OraOLEDB.Oracle, registriert wurde, ist auf dem Verteiler nicht vorhanden. Stellen Sie sicher, dass der OLE DB-Anbieter von Oracle auf dem Verteiler installiert und registriert ist."

Wenn Sie die Version 10g der Oracle-Clientsoftware verwenden, lautet der Dateiname des Anbieters OraOLEDB10.dll. Für Version 9i lautet er OraOLEDB.dll. Der Anbieter wird in %ORACLE_HOME%\BIN installiert (beispielsweise C:\oracle\product\10.1.0\Client_1\bin). Wenn Sie feststellen, dass der OLE DB-Anbieter von Oracle nicht auf dem Verteiler installiert ist, installieren Sie ihn über die von Oracle bereitgestellte Installations-CD mit der Oracle-Clientsoftware. Weitere Informationen finden Sie unter Konfigurieren eines Oracle-Verlegers.

Wenn der OLE DB-Anbieter von Oracle installiert ist, stellen Sie sicher, dass er registriert ist. Führen Sie zum Registrieren der Anbieter-DLL den folgenden Befehl aus dem Verzeichnis aus, in dem die DLL installiert ist, und beenden und starten Sie dann die SQL Server-Instanz neu:

  1. regsvr32 OraOLEDB10.dll oder regsvr32 OraOLEDB.dll

SQL Server-Fehler 21626 oder 21627 wurde ausgelöst

Um zu überprüfen, ob die Oracle-Veröffentlichungsumgebung ordnungsgemäß konfiguriert ist, versucht SQL Server, eine Verbindung mit Oracle Publisher mit den Anmeldeinformationen herzustellen, die Sie während der Konfiguration angegeben haben. Wenn der SQL Server-Distributor keine Verbindung mit Oracle Publisher herstellen kann, wird die folgende Fehlermeldung angezeigt:

  • "Die Verbindung mit dem Oracle-Datenbankserver '%s' kann mithilfe des OLE DB-Anbieters von Oracle, OraOLEDB.Oracle, nicht hergestellt werden."

Wenn diese Fehlermeldung angezeigt wird, überprüfen Sie die Verbindung mit der Oracle-Datenbank, indem Sie SQL*PLUS direkt mit der gleichen Anmeldung und dem gleichen Kennwort ausführen, wie während der Konfiguration des Oracle-Verlegers angegeben. Weitere Informationen finden Sie im Abschnitt "Verbindung zwischen SQL Server-Verteiler und Oracle-Datenbankinstanz nicht möglich" weiter oben in diesem Thema.

SQL Server-Fehler 21628 wurde ausgelöst

Bei 64-Bit-Verteilern wird für das Veröffentlichen mit Oracle der OLE DB-Anbieter von Oracle (OraOLEDB.Oracle) verwendet. SQL Server erstellt einen Registrierungseintrag, damit der Oracle-Anbieter mit SQL Server ausgeführt werden kann. Wenn beim Lesen oder Schreiben dieses Registrierungseintrags ein Problem auftritt, wird die folgende Fehlermeldung angezeigt:

"Die Registrierung des Verteilers '%s' kann nicht aktualisiert werden, damit Oracle OLEDB-Anbieter OraOLEDB.Oracle im Prozess mit SQL Server ausgeführt werden kann. Vergewissern Sie sich, dass die aktuelle Anmeldung berechtigt ist, die im Besitz von SQL Server befindlichen Registrierungsschlüssel zu ändern."

Für das Veröffentlichen mit Oracle muss der Registrierungseintrag für 64-Bit-Verteiler vorhanden und auf 1 festgelegt sein. Wenn der Eintrag nicht vorhanden ist, versucht SQL Server, ihn zu erstellen. Wenn der Eintrag vorhanden ist, aber auf 0festgelegt wurde, wird die Einstellung nicht geändert. Die Konfiguration des Oracle-Verlegers erzeugt dann einen Fehler.

So zeigen Sie die Registrierungseinstellung an und ändern sie

  1. Klicken Sie im Startmenüauf Ausführen.

  2. Geben Sie regedit im Dialogfeld Ausführenein, und klicken Sie dann auf OK.

  3. Navigieren Sie zu HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\Providers.

    Unter Providers sollte sich ein Ordner mit dem Namen OraOLEDB.Oracle befinden. In diesem Ordner sollte sich der DWORD-Wert mit dem Namen AllowInProcessund dem Wert 1befinden.

  4. Wenn Sie feststellen, dass für AllowInProcess der Wert 0festgelegt ist, ändern Sie den Registrierungseintrag auf 1:

    1. Klicken Sie mit der rechten Maustaste auf den Eintrag, und klicken Sie dann auf Ändern.

    2. Geben Sie im Dialogfeld Zeichenfolge bearbeiten in das Feld Wert den Wert 1 ein.

SQL Server-Fehler 21684 wurde ausgelöst

Wenn das administrative Benutzerkonto nicht über ausreichende Berechtigungen verfügt, wird die folgende Fehlermeldung angezeigt:

"Der Administratoranmeldung für den '%s'-Oracle-Verleger sind unzureichende Berechtigungen zugeordnet."

Führen Sie zum Überprüfen der dem Benutzer erteilten Berechtigungen die folgende Abfrage aus: SELECT * from session_privs. Die Ausgabe sollte ähnlich der Folgenden aussehen:

PRIVILEGE

------------------

CREATE SESSION

CREATE TABLE

CREATE PUBLIC SYNONYM

DROP PUBLIC SYNONYM

CREATE VIEW

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

Berechtigungsprobleme beim Benutzerschema für die Replikation

Das Benutzerschema für die Replikation muss über die im Abschnitt zum manuellen Erstellen des Benutzerschemas in Konfigurieren eines Oracle-Verlegers beschriebenen Berechtigungen verfügen.

Oracle-Fehler ORA-01000

Die Replikation verwendet für das Hinzufügen von Artikeln zu einer Veröffentlichung Cursor auf dem Oracle-Verleger. Während dieses Vorgangs kann es passieren, dass die Höchstzahl der auf dem Verleger verfügbaren Cursor überstiegen wird. In diesem Fall wird der folgende Fehler ausgelöst:

"ORA-01000: maximum open cursors exceeded"

Um dieses Problem zu vermeiden, sollten Sie für die Einstellung max_open_cursors in den Oracle-Datenbanken einen ausreichend großen Wert (mindestens 1000) sicherstellen. Weitere Informationen zu dieser Einstellung finden Sie in der Oracle-Dokumentation.

Oracle-Fehler ORA-01555

Die folgende Oracle-Datenbankfehlermeldung bezieht sich nicht auf die Snapshotreplikation, sondern darauf, wie Oracle lesekonsistente Datensichten konstruiert:

"ORA-01555: Snapshot too old"

Oracle verwendet so genannte Rollbacksegmente, um lesekonsistente Datensichten zu erstellen, die den Stand zum Zeitpunkt der Ausführung einer SQL-Anweisung wiedergeben. Die Fehlermeldung "snapshot too old" (Snapshot zu alt) kann angezeigt werden, wenn die Rollbackinformationen von anderen gleichzeitigen Sitzungen überschrieben werden. Vor Oracle 9i wurde empfohlen, die Häufigkeit dieser Fehlermeldung durch Erhöhen der Größe und/oder Anzahl der Rollbacksegmente und Zuweisen großer Transaktionen zu einem bestimmten Rollbacksegment zu reduzieren.

Seit Oracle 9i gibt es das UNDO-Tabellenbereichskonzept, das an die Stelle der Rollbacksegmente getreten ist. Zur Vermeidung der Fehlermeldung "snapshot too old" in Oracle 9i sollten Sie wie folgt vorgehen:

  • Erstellen Sie einen UNDO-Tabellenbereich mit ausreichend freiem Speicherplatz.

  • Legen Sie für den Tabellenbereich die den Wert für Retention Guarantee fest (ab Oracle 10G).

  • Konfigurieren Sie die Oracle-Initialisierungsparameter UNDO_MANAGEMENT und UNDO_RETENTION.

Weitere Informationen zur Fehlermeldung "snapshot too old" finden Sie in der Oracle-Dokumentation.

Oracle-Fehler ORA-22285

Wenn eine Tabelle eine BFILE-Spalte enthält, werden die Daten für die Spalte im Dateisystem gespeichert. Dem Administratorkonto für die Replikation muss Zugriff auf das Verzeichnis gewährt werden, in dem die Daten gespeichert sind. Dabei ist die folgende Syntax zu verwenden:

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

Wenn kein Zugriff gewährt wird, gibt der Protokolllese-Agent die folgende Fehlermeldung aus:

"ORA-22285: non-existent directory or file for FILEOPEN operation"

Verleger muss aufgrund von Änderungen neu konfiguriert werden

Aufgrund von Änderungen der Metadatentabellen oder der Prozeduren für die Replikation muss die Zuordnung des Verlegers gelöscht oder neu konfiguriert werden. Um den Publisher neu zu konfigurieren, müssen Sie den Publisher ablegen und erneut mithilfe von SQL Server Management Studio, Transact-SQL oder RMO konfigurieren. Informationen zum Konfigurieren des Verlegers finden Sie unter Konfigurieren eines Oracle-Verlegers.

So löschen Sie einen Oracle-Verleger (SQL Server Management Studio)

  1. Verbinden an den Distributor für oracle Publisher in SQL Server Management Studio und erweitern Sie den Serverknoten.

  2. Klicken Sie mit der rechten Maustaste auf Replikation, und klicken Sie dann auf Verteilereigenschaften.

  3. Deaktivieren Sie auf der Seite Verleger des Dialogfelds Verteilereigenschaften das Kontrollkästchen für den Oracle-Verleger.

  4. Klicken Sie auf OK.

So löschen Sie die Zuordnung eines Oracle-Verlegers (Transact-SQL)

Weitere Informationen

Konfigurieren eines Oracle-Verlegers
Veröffentlichungen mit Oracle (Übersicht)