Dela via


Konfigurera och felsöka en länkad server till en Oracle-databas i SQL Server

Den här artikeln beskriver hur du konfigurerar en länkad server från en dator som kör Microsoft SQL Server till en Oracle-databas och innehåller grundläggande felsökningssteg för vanliga fel som kan uppstå när du konfigurerar en länkad server till en Oracle-databas.

Ursprunglig produktversion: 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
Ursprungligt KB-nummer: 280106

Sammanfattning

Den här artikeln beskriver hur du konfigurerar en länkad server från en dator som kör Microsoft SQL Server till en Oracle-databas och innehåller grundläggande felsökningssteg för vanliga fel som kan uppstå när du konfigurerar en länkad server till Oracle. Merparten av informationen i den här artikeln gäller för miljöer som har konfigurerats för att använda Microsoft OLEDB-providern för Oracle (MSDAORA). Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen. Använd i stället Oracles OLE DB-provider.

Mer information om hur du konfigurerar en länkad server med Oracles OLEDB-provider finns i Så här kommer du igång med Oracle och länkade servrar.

Viktigt!

Den aktuella versionen av Microsoft ODBC-drivrutinen för Oracle uppfyller ODBC 2.5-specifikationen, medan OLE DB-providern för Oracle är en inbyggd Oracle 7 OCI API-provider. Både drivrutinen och providern använder SQL*Net-klienten (eller Net8-klienten för Oracle 8x) och OCI-biblioteket (Oracle Call Interface) och andra Oracle-klientkomponenter för att ansluta till Oracle-databaser och hämta data. Oracle-klientkomponenterna är viktiga och måste konfigureras korrekt för att kunna ansluta till Oracle-databaser med både drivrutinen och providern.

Från Microsoft Data Access Components (MDAC) version 2.5 och senare versioner stöder både Microsoft ODBC-drivrutinen och OLE DB-providern ENDAST Oracle 7 och Oracle 8i med följande begränsningar:

  • Oracle 8.x-specifika datatyper, till exempel CLOB, BLOB, BFILE, NCHAR, NCLOB och NVARCHAR2, stöds inte.

  • Unicode-funktionen mot Oracle 7.x- och 8.x-servrar stöds inte.

  • Flera Oracle-klientinstanser, eller flera Oracle-hem, stöds inte eftersom de förlitar sig på den första förekomsten av Oracle-hemmet i SYSTEM PATH-variabeln.

  • Det går inte att returnera flera resultatuppsättningar från en lagrad procedur eller batch-SQL-instruktion med hjälp av ADO eller OLEDB.

  • Kapslade yttre kopplingar stöds inte.

  • XML-beständighet stöds inte.

  • Version större än 8i stöds inte med dessa drivrutiner.

Anmärkning

De produkter från andra tillverkare som diskuteras i denna artikel tillverkas oberoende av Microsoft. Produkternas funktion eller tillförlitlighet kan därför inte garanteras.

Steg för att konfigurera en länkad server till Oracle

  1. Du måste installera Oracle-klientprogramvaran på den dator som kör SQL Server där den länkade servern har konfigurerats.

  2. Installera den drivrutin som du vill ha på datorn som kör SQL Server. Microsoft stöder endast Microsoft OLE DB-provider för Oracle och Microsoft ODBC-drivrutin för Oracle. Om du använder en tredjepartsleverantör eller en tredjepartsdrivrutin för att ansluta till Oracle måste du kontakta respektive leverantör för eventuella problem som kan uppstå med hjälp av leverantören eller drivrutinen.

  3. Om du använder Microsoft OLE DB-provider för Oracle och Microsoft ODBC Driver för Oracle bör du tänka på följande:

    • Både OLE DB-providern och ODBC-drivrutinen som ingår i Microsoft Data Access Components (MDAC) kräver SQL*Net 2.3.x eller en senare version. Du måste installera Oracle 7.3.x-klientprogramvaran eller en senare version på klientdatorn. Klientdatorn är den dator som kör SQL Server.

    • Kontrollera att du har MDAC 2.5 eller en senare version installerad på datorn som kör SQL Server. Med MDAC 2.1 eller med en tidigare version kan du inte ansluta till databaser som använder Oracle 8. x eller en senare version.

    • Om du vill aktivera MDAC 2.5 eller senare versioner för att fungera med Oracle-klientprogramvara måste registret ändras på den klientdator som kör SQL Server enligt följande tabell.

      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"
      
  4. Starta om datorn som kör SQL Server när du har installerat Oracle-klientprogramvaran.

  5. På datorn som kör SQL Server konfigurerar du en länkad server med hjälp av följande skript.

    -- 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
    

    Anmärkning

    Om du använder Microsoft ODBC-drivrutinen för Oracle kan du använda parametern @datasrc för att ange ett DSN-namn. För en DSN-mindre anslutning tillhandahålls providersträngen via parametern @provstr . Med Microsoft OLE DB-provider för Oracle använder du Oracle-serveraliaset som har konfigurerats i filen TNSNames.Ora för parametern @datasrc. Mer information finns i avsnittet "sp_addlinkedserver" i SQL Server Books Online.

Vanliga felmeddelanden och hur du felsöker dem

Viktigt!

Det här avsnittet, metoden eller uppgiften innehåller steg som beskriver hur du ändrar registret. Allvarliga problem kan dock uppstå om du ändrar registret felaktigt. Därför bör du se till att du följer dessa steg noggrant. Säkerhetskopiera registret innan du ändrar det för extra skydd. Sedan kan du återställa registret om ett problem uppstår. Om du vill ha mer information om hur du säkerhetskopierar och återställer registret klickar du på följande artikelnummer för att visa artikeln i Microsoft Knowledge Base: 322756 Säkerhetskopiera och återställa registret i Windows

Du kan använda någon av följande två metoder för att hämta utökad information om eventuella fel som uppstår när du kör en distribuerad fråga.

  • Metod 1

    Anslut till SQL Server med SQL Server Management Studio och kör följande kod för att aktivera spårningsflagga 7300.

    DBCC Traceon(7300)
    
  • Metod 2

    Samla in händelsen "OLEDB-fel" som finns i händelsekategorin "Fel och varningar" i SQL Profiler. Formatet för felmeddelandet är följande:

    Gränssnitt::Metoden misslyckades med hex-felkod.

    Du kan slå upp hex-felkod i Oledberr.h-filen som ingår i MDAC Software Development Kit (SDK).

Följande är en lista över vanliga felmeddelanden som kan uppstå, tillsammans med information om hur du felsöker felmeddelandet.

Anmärkning

Om du använder SQL Server 2005 eller senare versioner kan dessa felmeddelanden vara något annorlunda. Fel-ID:t för dessa felmeddelanden är dock desamma som i äldre versioner av SQL Server. Därför kan du identifiera dem med hjälp av fel-ID:na. För prestandarelaterade problem söker du i SQL Server Books Online efter avsnittet Optimera distribuerade frågor .

  • Meddelande 1

    Fel 7399: OLE DB-providern %ls för den länkade servern %ls rapporterade ett fel. %ls

    Aktivera spårningsflagga 7300 eller använd SQL Profiler för att avbilda OLEDB-felhändelsen för att hämta utökad OLEDB-felinformation.

  • Meddelande 2a

    "ORA-12154: TNS:kunde inte matcha tjänstnamnet"

  • Meddelande 2b

    "Oracle-klienten (tm) och nätverkskomponenterna hittades inte. Dessa komponenter tillhandahålls av Oracle Corporation och ingår i oracle version 7.3.3 (eller senare) klientprograminstallation"

    Dessa fel uppstår när det finns ett anslutningsproblem med Oracle-servern. Mer felsökning finns i Tekniker för att felsöka anslutningsproblem till Oracle Server nedan.

  • Meddelande 3

    Fel 7302: Det går inte att skapa en instans av OLE DB-providern MSDAORA för den länkade servern %ls.

    Kontrollera att MSDAORA.dll filen är korrekt registrerad. (Filen MSDAORA.dll är Microsoft OLE DB-providern för Oracle-filen.) Använd RegSvr32.exe för att registrera Microsoft OLE DB-provider för Oracle.

    Anmärkning

    Om du använder en Oracle-provider från tredje part och Oracle-providern inte kan köras utanför en SQL Server-process kan du aktivera den för att köras i processen genom att ändra provideralternativen. Om du vill ändra provideralternativen använder du någon av följande metoder:

    • Metod 1 Leta upp följande registernyckel. Ändra sedan värdet för posten AllowInProcess (DWORD) till 1. Den här registernyckeln finns under motsvarande providernamn: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName.

    • Metod 2 Följ dessa steg för att ange alternativet Tillåt inprocess för leverantörer som använder SQL Server Management Studio (SSMS).

    1. Öppna SSMS och anslut till din SQL Server-instans.
    2. I Objektutforskaren navigerar du till Leverantörer av länkade serverobjekt> för serverobjekt.>
    3. Högerklicka på den provider som du vill konfigurera och välj Egenskaper.
    4. I fönstret Provideralternativ markerar du kryssrutan Aktivera för alternativet Tillåt inprocess .
  • Meddelande 4

    Fel 7303: Det går inte att initiera datakällobjektet för OLE DB-providern MSDAORA för den länkade servern %ls. [OLE/DB-providern returnerade meddelandet: ORA-01017: ogiltigt användarnamn/lösenord; inloggning nekad] OLE DB-felspårning [OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80040e4d].

    Det här felmeddelandet anger att den länkade servern inte har rätt inloggningsmappning. Du kan köra den sp_helplinkedsrvlogin lagrade proceduren för att ange inloggningsinformationen korrekt. Kontrollera också att du har angett rätt parametrar för den länkade serverkonfigurationen.

  • Meddelande 5

    Fel 7306: Det går inte att öppna tabellen %ls från OLE DB-providern MSDAORA för den länkade servern %ls. Den angivna tabellen finns inte. [OLE/DB-providern returnerade meddelandet: Tabellen finns inte.][OLE/DB-providern returnerade meddelandet: ORA-00942: tabellen eller vyn finns inte] OLE DB-felspårning [OLE/DB Provider 'MSDAORA' IOpenRowset::OpenRowset returnerade 0x80040e37: Den angivna tabellen finns inte.].

    Fel 7312: Ogiltig användning av schema och/eller katalog för OLE DB-providern %ls för den länkade servern %ls. Ett namn i fyra delar angavs, men providern exponerar inte de gränssnitt som krävs för att använda en katalog och/eller ett schema.

    Fel 7313: Ett ogiltigt schema eller en katalog angavs för providern %ls för den länkade servern %ls.

    Fel 7314: OLE DB-providern %ls för den länkade servern %ls innehåller inte tabellen %ls. Tabellen finns antingen inte eller så har den aktuella användaren inte behörighet för den tabellen.

    Om du får dessa felmeddelanden kanske en tabell saknas i Oracle-schemat eller så kanske du inte har behörighet för den tabellen. Kontrollera att schemanamnet har skrivits med versaler. Tabellens och kolumnernas alfabetiska skiftläge ska anges i Oracle-systemtabellerna.

    På Oracle-sidan lagras en tabell eller en kolumn som skapas utan dubbla citattecken i versaler. Om tabellen eller kolumnen omges av dubbla citattecken lagras tabellen eller kolumnen som den är.

    Följande anrop visar om tabellen finns i Oracle-schemat. Det här anropet visar också det exakta tabellnamnet.

    sp_tables_ex @table_server=Ora817Link, @table_schema='your_schema_name'
    
  • Meddelande 6

    Fel 7413: Det gick inte att ansluta till den länkade servern %ls (OLE DB-providern %ls). Aktivera delegering eller använd en SQL Server-fjärrinloggning för den aktuella användaren. Msg 18456, Level 14, State 1, Line 1 Inloggning misslyckades för användare ''.

    Det här felmeddelandet anger att en distribuerad fråga försöker utföra en autentiserad Inloggning i Microsoft Windows utan explicit inloggningsmappning. I en operativsystemmiljö där säkerhetsdelegering inte stöds behöver Windows NT-autentiserade inloggningar en explicit mappning till en fjärrinloggning och ett lösenord som skapats med .sp_addlinkedsrvlogin

  • Meddelande 7

    Fel 7391: Det gick inte att utföra åtgärden eftersom OLE DB-providern MSDAORA för den länkade servern %ls inte kunde påbörja en distribuerad transaktion. OLE DB-felspårning [OLE/DB-providern "MSDAORA" ITransactionJoin::JoinTransaction returnerade 0x8004d01b]

    Kontrollera att OCI-versionerna är korrekt registrerade enligt beskrivningen tidigare i den här artikeln.

    Anmärkning

    Om registerposterna är korrekta läses MtxOCI.dll filen in. Om MtxOCI.dll filen inte läses in kan du inte utföra distribuerade transaktioner mot Oracle med hjälp av Microsoft OLE DB-provider för Oracle eller med hjälp av Microsoft ODBC-drivrutinen för Oracle. Om du använder en tredjepartsleverantör och får fel 7391 kontrollerar du att OLE DB-providern som du använder stöder distribuerade transaktioner. Om OLE DB-providern stöder distribuerade transaktioner kontrollerar du att Microsoft Distributed Transaction Coordinator (MSDTC) körs och har nätverksåtkomst aktiverat.

  • Meddelande 8

    Fel 7392: Det går inte att starta en transaktion för OLE DB-providern MSDAORA för den länkade servern %ls. OLE DB-felspårning [OLE/DB Provider 'MSDAORA' ITransactionLocal::StartTransaction returnerade 0x8004d013: ISOLEVEL=4096].

    OLE DB-providern returnerade fel 7392 eftersom endast en transaktion kan vara aktiv för den här sessionen. Det här felet anger att en instruktion för dataändring görs mot en OLE DB-provider när anslutningen sker i en explicit eller implicit transaktion, och OLE DB-providern stöder inte kapslade transaktioner. SQL Server kräver det här stödet så att det vid vissa felvillkor kan avsluta effekterna av datamodifieringssatsen medan du fortsätter med transaktionen.

    Om SET XACT_ABORT är kräver INTE SQL Server stöd för kapslade transaktioner från OLE DB-providern. SET XACT_ABORT ON Kör därför innan du kör instruktioner för dataändring mot fjärrtabeller i en implicit eller explicit transaktion. Gör detta om OLE DB-providern som du använder inte stöder kapslade transaktioner.

Tekniker för att felsöka anslutningsproblem till Oracle-servern

Följ dessa steg för att felsöka Oracle-anslutningsproblem med Microsoft ODBC-drivrutinen för Oracle eller Microsoft OLE DB-provider för Oracle:

  1. Använd Oracle SQL Plus-verktyget (ett kommandoradsbaserat frågeverktyg) för att kontrollera att du kan ansluta till Oracle och hämta data.

    Anmärkning

    Om du inte kan ansluta till Oracle och hämta data har du antingen en felaktig installation eller konfiguration av Oracle-klientkomponenterna eller så har du inte skapat ett TNS-tjänstalias (Transparent Network Substrate) för Oracle-servern när du använde verktyget SQL*Net Easy Configuration eller Oracle Net8 Easy Configuration. Kontakta Oracle-databasadministratören (DBA) för att kontrollera att Oracle-komponenterna som du måste ha är korrekt installerade och konfigurerade.

  2. Kontrollera vilken version av Oracle-klienten (SQL*Net-versionen) som är installerad på datorn. Både Microsoft ODBC-drivrutinen för Oracle och Microsoft OLE DB-provider för Oracle kräver installation av SQL*Net version 2.3 eller senare på klientdatorn.

    Anslutningen från SQL Plus (Oracle-klientfrågeverktyget) kan verka fungera, men du måste starta om datorn för att ODBC/OLE DB-anslutningen ska fungera korrekt.

    Anmärkning

    När du använder Oracle 8i är .rgs-filen tom.

  3. Om Oracle-klienten är installerad och du får ett fel som anger att Oracle Client Components 7.3 eller senare måste installeras på datorn kontrollerar du att miljövariabeln PATH på klientdatorn innehåller mappen där Oracle-klienten installerades, till exempel Oracle_Root\Bin. Om du inte hittar den här mappen lägger du till mappen i PATH-variabeln för att lösa felet.

  4. Kontrollera att filen Ociw32.dll finns i mappen Oracle_Root\bin . Den här .dll filen kan inte finnas på någon annan plats på klientdatorn. Kontrollera att oracle-klientkomponentens DLL:er (till exempel filen Core40.dll och Ora*.dll) inte finns utanför Oracle_Root-mappen eller undermapparna.

  5. Kontrollera att en enskild Oracle-klientversion är installerad på datorn. Flera versioner av SQL*Net kan inte finnas på samma klientdator med interferens och kritiska åtgärder (till exempel TNS och aliassökningar).

  6. Microsoft rekommenderar att du har en lokal installation av Oracle-klienten och inte gör det genom att mappa en fjärransluten Oracle-klient på datorn och sedan inkludera den i systemets sökväg för att ansluta till Oracle via ODBC/OLE DB. Men providern och drivrutinen testas med en lokalt installerad Oracle-klient och inte på en nätverksresurs.

Se även