Rozwiązywanie problemów z Oracle Publisher

Dotyczy:SQL Server

Ten artykuł wymienia szereg problemów, które mogą pojawić się podczas konfiguracji i używania Oracle Publisher.

Zgłaszany jest błąd dotyczący klienta Oracle i oprogramowania sieciowego

Musisz przyznać konto, pod którym działa Microsoft SQL Server na Dystrybutorze, uprawnienia do odczytu i wykonywania dla katalogu oraz wszystkich podkatalogów, na których zainstalowane jest oprogramowanie sieciowe Oracle Client. Jeśli nie przyznajesz uprawnień lub komponenty klienta Oracle nie są poprawnie zainstalowane, otrzymasz następujący komunikat o błędzie:

Połączenie z serwerem nie powiodło się przy użyciu [Microsoft OLE DB Provider for Oracle]. Nie znaleziono składników klienta i sieci Oracle. Te składniki są dostarczane przez firmę Oracle Corporation i stanowią część instalacji oprogramowania klienckiego Oracle w wersji 7.3.3 lub nowszej. Dostawca nie może działać, dopóki te komponenty nie zostaną zainstalowane."

Jeśli zainstalujesz odpowiedniego klienta Oracle u Dystrybutora, upewnij się, że zatrzymasz i zrestartujesz SQL Server po zakończeniu instalacji klienta. Ten krok jest wymagany, aby SQL Server rozpoznał komponenty klienckie.

Jeśli przyznajesz uprawnienia i poprawnie zainstalujesz komponenty, ale błąd nadal występuje, sprawdź, czy ustawienia HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI rejestru są poprawne:

  • Dla Oracle 10g poprawne ustawienia to:

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql10.dll

    • OracleXaLib = oraclient10.dll

  • Dla Oracle 9i poprawne ustawienia to:

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql9.dll

    • OracleXaLib = oraclient9.dll

Dystrybutor SQL Server nie może połączyć się z instancją bazy danych Oracle

Jeśli dystrybutor SQL Server nie może połączyć się z Oracle Publisher, upewnij się, że:

  • Niezbędne oprogramowanie Oracle jest zainstalowane na Dystrybutorze.

  • Baza danych Oracle jest dostępna online i można się z nią połączyć za pomocą narzędzia takiego jak SQL*Plus.

  • Replikacja logowania, której używa się do połączenia z Oracle Publisher, ma wystarczające uprawnienia. Aby uzyskać więcej informacji, zobacz Konfigurowanie programu Oracle Publisher.

  • Plik tnsnames.ora zawiera nazwy TNS, które zdefiniowałeś podczas konfiguracji Oracle Publisher.

  • Używasz właściwego Oracle Home i tej ścieżki. Nawet jeśli masz zainstalowany tylko jeden zestaw plików binarnych Oracle na SQL Server Distributor, upewnij się, że zmienne środowiskowe związane z Oracle Home są poprawnie ustawione. Jeśli zmienisz wartości zmiennych środowiskowych, musisz zatrzymać i zrestartować SQL Server, aby zmiana zadziałała.

Więcej informacji na temat konfiguracji i testowania łączności można znaleźć w artykule "Installing and Configuring Oracle Client Networking Software on the SQL Server Distributor" w sekcji Configure an Oracle Publisher.

Oracle Publisher jest powiązany z innym dystrybutorem

Oracle Publisher może być powiązany tylko z jednym dystrybutorem SQL Server. Jeśli inny dystrybutor jest powiązany z Oracle Publisher, porzuć go przed użyciem innego dystrybutora. Jeśli najpierw nie usuniesz Dystrybutora, otrzymasz jeden z następujących komunikatów o błędzie:

  • "Instancja serwera Oracle '<OraclePublisherName>' została wcześniej skonfigurowana tak, aby używać '<SQLServerDistributorName>' jako swojego dystrybutora. Aby zacząć używać '<NewSQLServerDistributorName>' jako Dystrybutora, musisz usunąć aktualną konfigurację replikacji na instancji serwera Oracle, co usunie wszystkie publikacje na tej instancji serwera."

  • "Serwer Oracle '<OracleServerName>' jest już zdefiniowany jako wydawca '<OraclePublisherName>' na dystrybutorze '<SQLServerDistributorName>.< DistributionDatabaseName>'. Usuń wydawcę lub synonim publiczny '<SynonymName>', aby utworzyć ponownie.

Gdy upuścisz Oracle Publisher, obiekty replikacji w bazie Oracle są automatycznie czyszczone. Jednak w niektórych przypadkach trzeba ręcznie wyczyścić obiekty replikacji Oracle. Aby ręcznie oczyścić obiekty replikacji Oracle utworzone przez replikację:

  1. Połącz się z wydawcą Oracle z uprawnieniami DBA.

  2. Wykonaj polecenie SQL DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;.

  3. Wykonaj polecenie SQL DROP USER <replication_administrative_user_schema>``CASCADE;.

Zgłaszany jest błąd SQL Server 21663 dotyczący braku klucza podstawowego

Artykuły w publikacjach transakcyjnych muszą mieć ważny klucz pierwotny. Jeśli nie mają ważnego klucza głównego, otrzymujesz następujący komunikat o błędzie przy próbie dodania artykułu:

"Nie znaleziono prawidłowego klucza podstawowego dla tabeli źródłowej [<TableOwner>].[<TableName>]"

Informacje o wymaganiach dotyczących kluczy głównych można znaleźć w sekcji "Unikalne indeksy i ograniczenia" w artykule Design Considerations and Limitations for Oracle Publishers.

Pojawia się błąd SQL Server 21642 dotyczący duplikowanego logowania do serwera powiązanego

Gdy początkowo konfigurujesz Oracle Publisher, proces ten tworzy powiązany wpis serwera dla połączenia między Publisher a Dystrybutorem. Połączony serwer ma tę samą nazwę co nazwa usługi Oracle TNS. Jeśli spróbujesz utworzyć połączony serwer o tej samej nazwie, zobaczysz następujący komunikat o błędzie:

"Wydawcy heterogeniczni potrzebują połączonego serwera. Istnieje już powiązany serwer o nazwie '<LinkedServerName>'. Prosimy o usunięcie powiązanego serwera lub wybór nazwy innego wydawcy."

Ten błąd może wystąpić, jeśli spróbujesz utworzyć połączony serwer bezpośrednio lub jeśli wcześniej zerwiesz relację między Oracle Publisher a SQL Server Distributorem i teraz próbujesz go ponownie skonfigurować. Jeśli pojawi się ten błąd podczas próby rekonfiguracji Publisher, usuń powiązany serwer z sp_dropserver (Transact-SQL).

Jeśli musisz nawiązać połączenie z usługą Oracle Publisher za pośrednictwem połączenia serwera połączonego, utwórz inną nazwę usługi TNS, a następnie użyj tej nazwy podczas wywoływania sp_addlinkedserver (Transact-SQL). Aby uzyskać informacje o tworzeniu nazw usług TNS, zobacz dokumentację Oracle.

Pojawia się błąd SQL Server 21617

Oracle publishing wykorzystuje aplikację Oracle SQL*PLUS do pobrania pakietu kodu wsparcia Publisher do bazy Oracle. Przed próbą skonfigurowania Oracle Publisher, SQL Server weryfikuje, że SQL*PLUS jest dostępny przez ścieżkę systemową na Distributorze. Jeśli SQL*PLUS nie może zostać załadowany, wyświetlany jest następujący komunikat o błędzie:

"Nie mogę uruchomić SQL*PLUS. Upewnij się, że aktualna wersja kodu klienta Oracle jest zainstalowana u dystrybutora."

Spróbuj znaleźć SQLPLUS na Dystrybutorze. Dla instalacji klienta Oracle 10g nazwa tego pliku wykonywalnego to sqlplus.exe. Zazwyczaj instalowany jest w %ORACLE_HOME%/bin. Aby zweryfikować, że ścieżka SQLPLUS pojawia się w ścieżce systemowej, sprawdź wartość zmiennej systemowej Path:

  1. Kliknij prawym przyciskiem myszy pozycję Mój komputer, a następnie kliknij polecenie Właściwości.

  2. Kliknij zakładkę Zaawansowane , a następnie wybierz Zmienne środowiskowe.

  3. W oknie dialogowym Zmienne środowiskowe , na liście zmiennych systemowych , wybierz zmienną Ścieżka , a następnie kliknij Edytuj.

  4. W oknie dialogowym Edytuj zmienną systemową: jeśli ścieżka do folderu zawierającego plik sqlplus.exe nie jest obecna w polu tekstowym Wartość zmiennej, edytuj ciąg, aby ją uwzględnić.

  5. Kliknij OK przy każdym otwartym oknie dialogowym, aby wyjść i zapisać zmiany.

Jeśli nie możesz sqlplus.exe znaleźć na dystrybutorze, zainstaluj aktualną wersję oprogramowania klienta Oracle na dystrybutorze. Aby uzyskać więcej informacji, zobacz Konfigurowanie programu Oracle Publisher.

Zgłaszany jest błąd SQL Server 21620

Jeśli łączysz się z bazą danych Oracle wcześniejszą niż wersja 8.1, publikacja Oracle wymaga, aby oprogramowanie klienckie Oracle zainstalowane na Dystrybutorze pochodziło z wersji 9. Jeśli łączysz się z bazą danych Oracle w wersji 8.1 lub nowzej, użyj oprogramowania klienta Oracle w wersji 10 lub nowszej.

Przed próbą skonfigurowania Oracle Publisher, Oracle publishing weryfikuje, że wersja SQL*PLUS dostępna przez ścieżkę systemową na Distributorze to wersja 9 lub nowsza. Jeśli nie, wyświetlany jest następujący komunikat o błędzie:

"Wersja SQL*PLUS dostępna przez zmienną systemową Path nie jest wystarczająco aktualna, by wspierać publikacje Oracle. Upewnij się, że aktualna wersja kodu klienta Oracle jest zainstalowana u dystrybutora."

Jeśli masz zainstalowanych kilka wersji oprogramowania klienta Oracle na Dystrybutorze, upewnij się, że najnowsza wersja to co najmniej wersja 9 i że zmienna ścieżki systemowej odnosi się najpierw do tej wersji (mogą pojawić się odwołania do innych wersji, o ile najnowsza pojawi się jako pierwsza). Więcej informacji na temat edycji zmiennej ścieżki systemowej można znaleźć w sekcji "SQL Server is raised" wcześniej w tym artykule.

Zgłaszany jest błąd SQL Server 21624 lub błąd 21629

Dla dystrybutorów 64-bitowych Oracle publishing korzysta z Oracle OLEDB Provider for Oracle (OraOLEDB.Oracle). Upewnij się, że dostawca Oracle OLEDB jest zainstalowany i zarejestrowany u Dystrybutora. Jeśli dostawca nie jest zainstalowany i zarejestrowany, pojawia się jeden lub oba z następujących komunikatów o błędzie:

  • "Nie udało się zlokalizować zarejestrowanego dostawcy Oracle OLEDB, OraOLEDB.Oracle, u dystrybutora '%s'. Upewnij się, że aktualna wersja dostawcy Oracle OLEDB jest zainstalowana i zarejestrowana u dystrybutora."

  • "Klucz rejestracyjny CLSID wskazujący, że Oracle OLEDB Provider for Oracle, OraOLEDB.Oracle, został zarejestrowany, nie jest obecny u dystrybutora. Upewnij się, że dostawca Oracle OLEDB jest zainstalowany i zarejestrowany u dystrybutora."

Jeśli używasz oprogramowania klienta Oracle w wersji 10g, dostawca jest OraOLEDB10.dll; dla wersji 9i jest to OraOLEDB.dll. Dostawca jest zainstalowany w %ORACLE_HOME%\BIN (na przykład C:\oracle\product\10.1.0\Client_1\bin). Jeśli okaże się, że dostawca Oracle OLEDB nie jest zainstalowany na Dystrybutorze, zainstaluj go z płyty instalacyjnej Oracle dostarczanej przez Oracle. Aby uzyskać więcej informacji, zobacz Konfigurowanie programu Oracle Publisher.

Jeśli dostawca Oracle OLEDB jest zainstalowany, upewnij się, że jest zarejestrowany. Aby zarejestrować DLL dostawcy, uruchom następujące polecenie z katalogu, w którym DLL jest zainstalowane, a następnie zatrzymaj i zrestartuj instancję SQL Server:

  1. regsvr32 OraOLEDB10.dll lub regsvr32 OraOLEDB.dll.

Pojawia się błąd SQL Server 21626 lub błąd 21627

Aby zweryfikować, czy środowisko publikujące Oracle jest poprawnie skonfigurowane, SQL Server próbuje połączyć się z Oracle Publisher, używając danych logowania podanych podczas konfiguracji. Jeśli SQL Server Distributor nie może połączyć się z Oracle Publisher, pojawia się następujący komunikat o błędzie:

  • "Nie można połączyć się z serwerem bazy danych Oracle '%s' za pomocą dostawcy Oracle OLEDB OraOLEDB.Oracle."

Jeśli zobaczysz ten komunikat o błędzie, sprawdź łączność z bazą danych Oracle, uruchamiając bezpośrednio SQL*PLUS, używając tego samego logowania i hasła, które ustaliłeś podczas konfiguracji Oracle Publisher. Aby uzyskać więcej informacji, zobacz sekcję „Program SQL Server Distributor nie może połączyć się z wystąpieniem bazy danych Oracle” we wcześniejszej części tego artykułu.

Pojawia się błąd SQL Server 21628

Dla dystrybutorów 64-bitowych Oracle publishing korzysta z Oracle OLEDB Provider for Oracle (OraOLEDB.Oracle). SQL Server tworzy wpis rejestru, aby umożliwić dostawcy Oracle działanie w tym samym procesie co SQL Server. Jeśli pojawi się problem z odczytem lub zapisaniem tego wpisu w rejestrze, pojawia się następujący komunikat o błędzie:

Nie można zaktualizować rejestru dystrybutora „%s”, aby umożliwić dostawcy Oracle OLEDB OraOLEDB.Oracle uruchamianie w procesie programu SQL Server. Upewnij się, że aktualne logowanie jest autoryzowane do modyfikacji kluczy rejestru należących do SQL Server."

Publikacja Oracle wymaga istnienia wpisu w rejestrze oraz ustawienia na 1 dla dystrybutorów 64-bitowych. Jeśli wpis nie istnieje, SQL Server próbuje go utworzyć. Jeśli wpis istnieje, ale jest ustawiony na 0, ustawienie nie ulega zmianie, a konfiguracja Oracle Publisher kończy się niepowodzeniem.

Aby zobaczyć i zmodyfikować ustawienia rejestru:

  1. Wybierz przycisk Start, a następnie wybierz pozycję Uruchom.

  2. W oknie dialogowym Uruchom wpisz regedit, a następnie wybierz OK.

  3. Przejdź do HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\Providers.

    W sekcji Dostawcy znajdź folder o nazwie OraOLEDB.Oracle. W tym folderze znajdź wartość DWORD o nazwie AllowInProcess o wartości 1.

  4. Jeśli zauważysz, że AllowInProcess jest ustawiony na 0, zaktualizuj wpis w rejestrze na 1:

    1. Kliknij prawym przyciskiem myszy na wpis, a następnie wybierz Zmodyfikuj.

    2. W oknie dialogowym Edytuj ciąg wpisz 1 w polu Dane wartości.

Pojawia się błąd SQL Server 21684

Jeśli konto użytkownika administracyjnego nie ma wystarczających uprawnień, pojawia się następujący komunikat o błędzie:

"Uprawnienia związane z logowaniem administratora do wydawcy Oracle '%s' nie są wystarczające."

Aby zweryfikować uprawnienia przyznane użytkownikowi, wykonaj następujące zapytanie: SELECT * from session_privs. Dane wyjściowe powinny być podobne do następujących:

PRIVILEGE

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

CREATE SESSION

CREATE TABLE

CREATE PUBLIC SYNONYM

DROP PUBLIC SYNONYM

CREATE VIEW

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

Napotykasz problemy z uprawnieniami do schematu użytkownika replikującego

Schemat użytkownika replikacji musi mieć uprawnienia opisane w "Tworzenie schematu użytkownika ręcznie" w sekcji Configure an Oracle Publisher.

Błąd Oracle ORA-01000

Replikacja wykorzystuje kursory na Oracle Publisher podczas dodawania artykułów do publikacji. Podczas tego procesu można przekroczyć maksymalną liczbę kursorów dostępnych na Publisher. Jeśli tak się stanie, pojawia się następujący błąd:

"ORA-01000: maksymalna liczba otwartych kursorów przekroczona"

Aby uniknąć tego problemu, upewnij się, że ustawienie max_open_cursors w bazach Oracle jest ustawione na wystarczająco wysoką wartość (co najmniej 1000). Więcej informacji o tym settingu można znaleźć w dokumentacji Oracle.

Błąd Oracle ORA-01555

Poniższy błąd bazy danych Oracle nie jest związany z replikacją migawki; jest związany ze sposobem, w jaki Oracle tworzy spójne widoki danych:

"ORA-01555: Migawka za stara"

Wykorzystując obiekty zwane segmentami rollback, Oracle tworzy spójne odczyty danych w momencie wydania polecenia SQL. Może wystąpić błąd „zbyt stara migawka”, gdy informacje wycofania zostaną nadpisane przez inne współbieżne sesje. Przed Oracle 9i zalecaną metodą zmniejszania częstotliwości tego błędu było zwiększenie rozmiaru i/lub liczby segmentów rollbacku oraz przypisanie dużych transakcji konkretnemu segmentowi rollback.

W Oracle 9i Oracle wprowadziło koncepcję przestrzeni tabelowej UNDO, która zastępuje segment rollback. Aby zapobiec błędowi "snapshot too old" w Oracle 9i, zaleca się, żebyś:

  • Stwórz przestrzeń stołową UNDO z odpowiednią ilością wolnej przestrzeni.

  • Ustaw gwarancję retencji dla przestrzeni tabel (Oracle 10G lub nowszy).

  • Konfiguruj parametry inicjalizacji Oracle UNDO_MANAGEMENT i UNDO_RETENTION.

Aby uzyskać więcej informacji na temat unikania błędu "snapshot too old", zapoznaj się z dokumentacją Oracle.

Błąd Oracle ORA-22285

Jeśli tabela zawiera kolumnę BFILE, dane dla tej kolumny są przechowywane w systemie plików. Musisz przyznać administracyjnemu kontu użytkownika replikacji dostęp do katalogu, w którym przechowywane są dane, używając następującej składni:

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

Jeśli nie przyznajesz dostępu, Agent Log Reader wyświetla następujący błąd:

"ORA-22285: nieistniejący katalog lub plik do operacji FILEOPEN"

Zmiany wymagające rekonfiguracji Publisher

Jeśli wprowadzasz zmiany w tabelach lub procedurach metadanych replikacji, musisz usunąć i przekonfigurować Publisher. Aby przekonfigurować Publisher, musisz porzucić Publisher i skonfigurować go ponownie, używając SQL Server Management Studio, Transact-SQL lub RMO. Aby uzyskać więcej informacji o konfiguracji Publisher, zobacz Konfiguruj Oracle Publisher.

Aby zrezygnować z Oracle Publisher (SQL Server Management Studio)

  1. Połącz się z dystrybutorem Oracle Publisher w SQL Server Management Studio i rozwiń węzeł serwera.

  2. Kliknij prawym przyciskiem Replikacja, a następnie kliknij Właściwości dystrybutora.

  3. Na stronie Wydawcy w oknie dialogowym Właściwości Dystrybutora wyczyść pole wyboru Oracle Publisher.

  4. Kliknij przycisk OK.

Usuwanie publikatora Oracle (Transact-SQL)