Felsökning av Oracle Publisher

Gäller för:SQL Server

Den här artikeln listar ett antal problem som kan uppstå när du konfigurerar och använder en Oracle Publisher.

Ett fel har uppstått gällande Oracle-klient och nätverksprogramvara

Du måste ge det konto under vilket Microsoft SQL Server körs på Distributor läs- och exekveringsbehörigheter för katalogen och alla underkataloger där Oracle-klientens nätverksprogramvara är installerad. Om du inte ger behörigheterna eller om Oracle-klientkomponenterna inte installeras korrekt, får du följande felmeddelande:

Det gick inte att ansluta till servern med [Microsoft OLE DB Provider för Oracle]. Oracle-klient- och nätverkskomponenter hittades inte. Dessa komponenter levereras av Oracle Corporation och är en del av Oracle version 7.3.3 eller senare installation av klientprogramvara. Leverantören kan inte fungera förrän dessa komponenter är installerade."

Om du installerar en lämplig Oracle-klient hos distributören, se till att du stoppar och sedan startar om SQL Server efter att klientinstallationen är klar. Detta steg krävs för att SQL Server ska känna igen klientkomponenterna.

Om du ger behörigheterna och installerar komponenterna korrekt men felet kvarstår, kontrollera att registerinställningarna på HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI är korrekta:

  • För Oracle 10g är de korrekta inställningarna:

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql10.dll

    • OracleXaLib = oraclient10.dll

  • För Oracle 9i är de korrekta inställningarna:

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql9.dll

    • OracleXaLib = oraclient9.dll

SQL Server Distributor kan inte ansluta till Oracle-databasinstansen

Om SQL Server Distributor inte kan ansluta till Oracle Publisher, se till att:

  • Den nödvändiga Oracle-mjukvaran installeras på distributören.

  • Oracle-databasen är online och du kan ansluta till den med ett verktyg som SQL*Plus.

  • Inloggningsreplikationen som används för att ansluta till Oracle Publisher har tillräckliga behörigheter. Mer information finns i Konfigurera en Oracle Publisher.

  • Filen tnsnames.ora listar de TNS-namn du definierade under konfigurationen av Oracle Publisher.

  • Du använder rätt Oracle Home och sökväg. Även om du bara har en uppsättning Oracle-binärfiler installerade i SQL Server Distributor, se till att miljövariablerna relaterade till Oracle Home är korrekt inställda. Om du ändrar miljövariablens värden måste du stoppa och starta om SQL Server för att ändringen ska träda i kraft.

För mer information om att konfigurera och testa anslutning, se "Installing and Configure Oracle Client Networking Software on the SQL Server Distributor" i Configure an Oracle Publisher.

Oracle Publisher är kopplad till en annan distributör

En Oracle Publisher kan endast vara kopplad till en SQL Server-distributör. Om en annan distributör är kopplad till Oracle Publisher, släpp den innan du använder en annan distributör. Om du inte tar bort Distributören först visas ett av följande felmeddelanden:

  • Oracle-serverinstansen '<OraclePublisherName>' har tidigare konfigurerats för att använda '<SQLServerDistributorName>' som Distributor. För att börja använda '<NewSQLServerDistributorName>' som dess distributör måste du ta bort den aktuella replikeringskonfigurationen på Oracle-serverinstansen, vilket kommer att radera alla publikationer på den serverinstansen."

  • "OracleServer-servern '<OracleServerName>' är redan definierad som utgivaren '<OraclePublisherName'> på distributören '<SQLServerDistributorName>.< DistributionDatabaseName>'. Ta bort förlaget eller ta bort den offentliga synonymen '<SynonymNamn'> för att återskapa."

När du släpper en Oracle Publisher rensas replikeringsobjekten i Oracle-databasen automatiskt. Men du måste manuellt rensa upp Oracle-replikeringsobjekten i vissa fall. För att manuellt rensa Oracle-replikationsobjekt skapade av replikering:

  1. Koppla till Oracle-publicisten med DBA-behörigheter.

  2. Utfärda SQL-kommandot DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;.

  3. Utfärda SQL-kommandot DROP USER <replication_administrative_user_schema>``CASCADE;.

SQL Server-fel 21663 tas upp angående avsaknaden av en primärnyckel

Artiklar i transaktionspublikationer måste ha en giltig primärnyckel. Om de inte har en giltig primärnyckel får du följande felmeddelande när du försöker lägga till en artikel:

"Ingen giltig primärnyckel hittades för källtabellen [<TableOwner>].[<TableName>]"

För information om krav för primärnycklar, se avsnittet "Unika index och begränsningar" i artikeln Designöverväganden och begränsningar för Oracle-utgivare.

SQL Server-fel 21642 uppstår angående en duplicerad länkad serverinloggning

När du initialt konfigurerar en Oracle Publisher skapar processen en länkad serverpost för anslutningen mellan Publisher och distributören. Den länkade servern har samma namn som Oracle TNS-tjänstens namn. Om du försöker skapa en länkad server med samma namn ser du följande felmeddelande:

"Heterogena utgivare kräver en länkad server. En länkad server som heter '<LinkedServerName>' finns redan. Vänligen ta bort länkad server eller välj ett annat utgivarenamn."

Detta fel kan uppstå om du försöker skapa den länkade servern direkt eller om du tidigare har tappat relationen mellan Oracle Publisher och SQL Server Distributor, och nu försöker omkonfigurera den. Om du får detta felmeddelande när du försöker omkonfigurera Publisher, ta bort den länkade servern med sp_dropserver (Transact-SQL).

Om du behöver ansluta till Oracle-Publisher via en länkad serveranslutning skapar du ett annat TNS-tjänstnamn och använder sedan det här namnet när du anropar sp_addlinkedserver (Transact-SQL). För information om hur man skapar TNS-tjänstenamn, se Oracle-dokumentationen.

SQL Server-fel 21617 genereras

Oracle-publicering använder Oracle-applikationen SQL*PLUS för att ladda ner paketet med Publisher-stödkod till Oracle-databasen. Innan man försöker konfigurera Oracle Publisher verifierar SQL Server att SQL*PLUS är tillgängligt via systembanan på Distributor. Om SQL*PLUS inte kan laddas visas följande felmeddelande:

"Kan inte köra SQL*PLUS. Se till att en aktuell version av Oracle-klientkoden är installerad hos distributören."

Försök hitta SQLPLUS på Distributor. För en installation av Oracle 10g-klienten heter denna exekverbara fil sqlplus.exe. Den installeras vanligtvis i %ORACLE_HOME%/bin. För att verifiera att sökvägen för SQLPLUS finns i systemvägen, undersök värdet på systemvariabeln Path:

  1. Högerklicka på Den här datorn och klicka sedan på Egenskaper.

  2. Klicka på fliken Avancerat , och klicka sedan på Miljövariabler.

  3. I dialogrutan Miljövariabler , i Systemvariabler-listan , välj Vägvariabeln och klicka sedan på Redigera.

  4. I dialogrutan Redigera systemvariabel : om sökvägen till mappen som innehåller sqlplus.exe inte finns i textrutan för variabelvärdet , redigera strängen för att inkludera den.

  5. Klicka på OK i varje öppen dialogruta för att avsluta och spara ändringar.

Om du inte kan hitta sqlplus.exe på distributören, installera en aktuell version av Oracle-klientprogramvaran hos distributören. Mer information finns i Konfigurera en Oracle Publisher.

SQL Server-fel 21620 aktiveras

Om du ansluter till en Oracle-databas tidigare än version 8.1 kräver Oracle-publicering att Oracle-klientprogramvaran som installeras på Distributor är från version 9. Om du ansluter till en Oracle-databas som är version 8.1 eller senare, använd Oracle-klientprogramvaran version 10 eller senare.

Innan man försöker konfigurera Oracle Publisher, verifierar Oracle Publishing att versionen av SQL*PLUS som är tillgänglig via systemvägen på Distributor är version 9 eller senare. Om det inte är fallet visas följande felmeddelande:

"Den version av SQL*PLUS som är tillgänglig via systemvariabeln Path är inte tillräckligt aktuell för att stödja Oracle-publicering. Se till att en aktuell version av Oracle-klientkoden är installerad hos distributören."

Om du har flera versioner av Oracle-klientprogramvaran installerade på Distributor, se till att den senaste versionen är minst version 9 och att systemvägsvariabeln först hänvisar till denna version (referenser till andra versioner kan visas så länge den senaste visas först). För mer information om redigering av systemvägsvariabeln, se avsnittet "SQL Server is Raised" tidigare i denna artikel.

SQL Server-fel 21624 eller 21629 uppstår

För 64-bitars distributörer använder Oracle-publicering OLE DB-providern från Oracle för Oracle (OraOLEDB.Oracle). Se till att Oracle OLEDB-leverantören är installerad och registrerad hos distributören. Om leverantören inte är installerad och registrerad ser du ett eller båda av följande felmeddelanden:

  • "Kan inte hitta den registrerade Oracle OLEDB-leverantören, OraOLEDB.Oracle, hos distributören '%s'. Se till att en aktuell version av Oracle OLEDB-leverantören är installerad och registrerad hos distributören."

  • "CLSID-registreringsnyckeln som indikerar att Oracle OLEDB-leverantören för Oracle, OraOLEDB.Oracle, har registrerats finns inte hos distributören. Se till att Oracle OLEDB-leverantören är installerad och registrerad hos distributören."

Om du använder Oracle-klientprogramvaran version 10g är leverantören OraOLEDB10.dll; för version 9i är det OraOLEDB.dll. Leverantören installeras i %ORACLE_HOME%\BIN (till exempel C:\oracle\product\10.1.0\Client_1\bin). Om du upptäcker att Oracle OLEDB-leverantören inte är installerad på distributören, installera den från Oracles klientprogramvaruinstallationsskiva som Oracle tillhandahåller. Mer information finns i Konfigurera en Oracle Publisher.

Om Oracle OLEDB-leverantören är installerad, se till att den är registrerad. För att registrera leverantörs-DLL, kör följande kommando från katalogen där DLL:n är installerad, och stoppa och starta om SQL Server-instansen:

  1. regsvr32 OraOLEDB10.dll eller regsvr32 OraOLEDB.dll.

SQL Server-fel 21626 eller fel 21627 genereras

För att verifiera att Oracle-publiceringsmiljön är korrekt konfigurerad försöker SQL Server ansluta till Oracle Publisher genom att använda de inloggningsuppgifter du angav under konfigurationen. Om SQL Server Distributor inte kan ansluta till Oracle Publisher ser du följande felmeddelande:

  • "Kan inte ansluta till Oracle-databasservern '%s' med Oracle OLEDB-leverantören OraOLEDB.Oracle."

Om du ser detta felmeddelande, verifiera anslutningen till Oracle-databasen genom att köra SQL*PLUS direkt med samma inloggning och lösenord som du angav under konfigurationen av Oracle Publisher. Mer information finns i avsnittet "SQL Server-distributören kan inte ansluta till Oracle-databasinstansen" tidigare i den här artikeln.

SQL Server-felet 21628 utlöses

För 64-bitars distributörer använder Oracle-publicering OLE DB-providern från Oracle för Oracle (OraOLEDB.Oracle). SQL Server skapar en registerpost för att låta Oracle-leverantören köra SQL Server under processen. Om det uppstår problem med att läsa eller skriva denna registerpost visas följande felmeddelande:

Det går inte att uppdatera registret för distributören '%s' för att tillåta att Oracle OLEDB-leverantören OraOLEDB.Oracle körs i processen med SQL Server. Se till att aktuell inloggning är auktoriserad för att ändra SQL Server-ägda registernycklar."

Oracle-publicering kräver att registerposten existerar och sätts till 1 för 64-bitars distributörer. Om posten inte finns försöker SQL Server skapa den. Om posten finns men är satt till 0 ändras inte inställningen och konfigurationen av Oracle Publisher misslyckas.

För att se och ändra registerinställningen:

  1. Välj Start och sedan Kör.

  2. I dialogrutan Kör, skriv regedit och välj sedan OK.

  3. Gå till HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\Providers.

    Under Providers hittar du en mapp som heter OraOLEDB.Oracle. I denna mapp, hitta DWORD-värdenamnet AllowInProcess med värdet 1.

  4. Om du märker att AllowInProcess är satt till 0, uppdatera registerposten till 1:

    1. Högerklicka på posten och välj sedan Modifiera.

    2. I dialogrutan Redigera sträng, skriv 1 i fältet Värdedata.

SQL Server-fel 21684 genereras

Om det administrativa användarkontot inte har tillräckliga rättigheter ser du följande felmeddelande:

"Behörigheterna kopplade till administratörens inloggning för Oracle-utgivaren '%s' är inte tillräckliga."

För att verifiera de behörigheter som beviljats användaren, kör följande fråga: SELECT * from session_privs. Resultatet bör likna följande:

PRIVILEGE

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

CREATE SESSION

CREATE TABLE

CREATE PUBLIC SYNONYM

DROP PUBLIC SYNONYM

CREATE VIEW

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

Du stöter på behörighetsproblem för replikationsanvändarschemat

Replikeringsanvändarschemat måste ha de behörigheter som beskrivs i "Skapa användarschemat manuellt" i Configure an Oracle Publisher.

Oracle-fel ORA-01000

Replikering använder markörer på Oracle Publisher under processen att lägga till artiklar i en publikation. Det är möjligt att överskrida det maximala antalet markörer som finns tillgängliga på Publisher under denna process. Om detta inträffar uppstår följande fel:

ORA-01000: maximalt antal öppna markörer har överskridits

För att undvika detta problem, se till att max_open_cursors-inställningen i Oracle-databaserna är inställd på ett tillräckligt högt antal (minst 1000). För mer information om denna inställning, se Oracle-dokumentationen.

Oracle-fel ORA-01555

Följande Oracle-databasfel är inte relaterat till snapshot-replikering; det är relaterat till hur Oracle konstruerar läskonsistente vyer av data:

ORA-01555: Snapshot är för gammal

Med hjälp av objekt som kallas rollback-segment konstruerar Oracle läskonsistenta vyer av data vid den tidpunkt då en SQL-sats utfärdas. Ett "snapshot too old"-fel kan uppstå när rollback-information skrivs över av andra samtidiga sessioner. Före Oracle 9i var den rekommenderade metoden för att minska frekvensen av detta fel att öka storleken och/eller antalet rollback-segment samt att tilldela stora transaktioner till ett specifikt rollback-segment.

I Oracle 9i introducerade Oracle UNDO-tabellrymdskonceptet, som ersätter rollback-segmentet. För att förhindra felet "snapshot too old" i Oracle 9i rekommenderar vi att du:

  • Skapa ett UNDO-tabellutrymme med en lämplig mängd ledigt utrymme.

  • Ställ in garanti för kvarhållning för tabellområdet (Oracle 10G eller senare).

  • Konfigurera Oracle-initialiseringsparametrarna UNDO_MANAGEMENT och UNDO_RETENTION.

För ytterligare detaljer om hur du undviker felet "snapshot för gammal", se Oracle-dokumentationen.

Oracle-fel ORA-22285

Om en tabell innehåller en BFILE-kolumn lagras data för kolumnen i filsystemet. Du måste ge replikationsadministratörskontot tillgång till katalogen där datan lagras genom att använda följande syntax:

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

Om du inte ger åtkomst ger loggläsaragenten följande fel:

"ORA-22285: icke-existerande katalog eller fil för FILEOPEN-operation"

Ändringar som kräver omkonfiguration av Publisher

Om du gör ändringar i replikationsmetadatatabeller eller procedurer måste du ta bort och konfigurera om Publisher. För att omkonfigurera Publisher måste du ta bort Publisher och konfigurera den igen genom att använda SQL Server Management Studio, Transact-SQL eller RMO. För mer information om att konfigurera Publisher, se Configure an Oracle Publisher.

Ta bort en Oracle-utgivare (SQL Server Management Studio)

  1. Anslut dig till distributören för Oracle Publisher i SQL Server Management Studio och expandera servernoden.

  2. Högerklicka på Replikering och sedan på Distributörsegenskaper.

  3. På sidan Publishers i dialogrutan Distributor Properties, rensa kryssrutan för Oracle Publisher.

  4. Klicka på OK.

Ta bort en Oracle-utgivare (Transact-SQL)