Een gekoppelde server instellen en problemen oplossen met een Oracle-database in SQL Server

In dit artikel wordt beschreven hoe u een gekoppelde server instelt vanaf een computer waarop Microsoft SQL Server wordt uitgevoerd op een Oracle-database en basisstappen voor probleemoplossing biedt voor veelvoorkomende fouten die u kunt ondervinden bij het instellen van een gekoppelde server naar een Oracle-database.

Oorspronkelijke productversie: 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
Oorspronkelijk KB-nummer: 280106

Samenvatting

In dit artikel wordt beschreven hoe u een gekoppelde server instelt vanaf een computer waarop Microsoft SQL Server wordt uitgevoerd naar een Oracle-database en basisstappen voor probleemoplossing biedt voor veelvoorkomende fouten die kunnen optreden wanneer u een gekoppelde server instelt op Oracle. De meeste informatie in dit artikel is van toepassing op omgevingen die zijn geconfigureerd voor het gebruik van Microsoft OLEDB Provider voor Oracle (MSDAORA). Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie. Gebruik in plaats daarvan de OLE DB-provider van Oracle.

Zie Hoe u aan de slag kunt met Oracle en gekoppelde servers voor meer informatie over het configureren van een gekoppelde server met behulp van de OLEDB-provider van Oracle.

Belangrijk

De huidige versie van het Microsoft ODBC-stuurprogramma voor Oracle voldoet aan de ODBC 2.5-specificatie, terwijl de OLE DB-provider voor Oracle een systeemeigen Oracle 7 OCI API-provider is. Zowel het stuurprogramma als de provider gebruiken de SQL*Net Client (of Net8-client voor Oracle 8x) en de OCI-bibliotheek (Oracle Call Interface) en andere Oracle-clientonderdelen om verbinding te maken met Oracle-databases en gegevens op te halen. De Oracle-clientonderdelen zijn belangrijk en moeten correct worden geconfigureerd om verbinding te maken met Oracle-databases met behulp van zowel het stuurprogramma als de provider.

Van Microsoft Data Access Components (MDAC) versie 2.5 en latere versies ondersteunen zowel het Microsoft ODBC-stuurprogramma als de OLE DB-provider ALLEEN Oracle 7 en Oracle 8i met de volgende beperkingen:

  • Oracle 8.x-specifieke gegevenstypen, zoals CLOB, BLOB, BFILE, NCHAR, NCLOB en NVARCHAR2, worden niet ondersteund.

  • De Unicode-functie voor Oracle 7.x- en 8.x-servers wordt niet ondersteund.

  • Meerdere Oracle-clientexemplaren, of meerdere Oracle-huizen, worden niet ondersteund omdat ze afhankelijk zijn van het eerste exemplaar van de Oracle-startpagina in de variabele SYSTEM PATH.

  • Het retourneren van meerdere resultatensets van een opgeslagen procedure of batch SQL-instructie wordt niet ondersteund met behulp van ADO of OLEDB.

  • Geneste outer joins worden niet ondersteund.

  • XML-persistentie wordt niet ondersteund.

  • Versie groter dan 8i wordt niet ondersteund met behulp van deze stuurprogramma's.

Opmerking

De producten van derden die in dit artikel worden besproken, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft verleent dan ook geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of de betrouwbaarheid van deze producten.

Stappen voor het instellen van een gekoppelde server naar Oracle

  1. U moet de Oracle-clientsoftware installeren op de computer waarop SQL Server wordt uitgevoerd waarop de gekoppelde server is ingesteld.

  2. Installeer het gewenste stuurprogramma op de computer waarop SQL Server wordt uitgevoerd. Microsoft ondersteunt alleen Microsoft OLE DB-provider voor Oracle en Microsoft ODBC-stuurprogramma voor Oracle. Als u een externe provider of een stuurprogramma van derden gebruikt om verbinding te maken met Oracle, moet u contact opnemen met de desbetreffende leverancier voor eventuele problemen die u kunt ondervinden met behulp van hun provider of stuurprogramma.

  3. Als u Microsoft OLE DB-provider voor Oracle en Microsoft ODBC-stuurprogramma voor Oracle gebruikt, kunt u het volgende overwegen:

    • Voor zowel de OLE DB-provider als het ODBC-stuurprogramma dat is opgenomen in Microsoft Data Access Components (MDAC) is SQL*Net 2.3.x of een latere versie vereist. U moet de Oracle 7.3.x-clientsoftware of een latere versie installeren op de clientcomputer. De clientcomputer is de computer waarop SQL Server wordt uitgevoerd.

    • Zorg ervoor dat MDAC 2.5 of een nieuwere versie is geïnstalleerd op de computer waarop SQL Server wordt uitgevoerd. Met MDAC 2.1 of met een eerdere versie kunt u geen verbinding maken met databases die Oracle 8 gebruiken. x of een latere versie.

    • Als u MDAC 2.5 of latere versies wilt inschakelen voor gebruik met Oracle-clientsoftware, moet het register worden gewijzigd op de clientcomputer waarop SQL Server wordt uitgevoerd, zoals aangegeven in de volgende tabel.

      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. Start de computer waarop SQL Server wordt uitgevoerd opnieuw op nadat u de Oracle-clientsoftware hebt geïnstalleerd.

  5. Stel op de computer waarop SQL Server wordt uitgevoerd een gekoppelde server in met behulp van het volgende script.

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

    Opmerking

    Als u Microsoft ODBC-stuurprogramma voor Oracle gebruikt, kunt u de @datasrc parameter gebruiken om een DSN-naam op te geven. Voor een DSN-less-verbinding wordt de providertekenreeks geleverd via de parameter @provstr . Gebruik met Microsoft OLE DB-provider voor Oracle de Oracle-serveralias die is geconfigureerd in het bestand TNSNames.Ora voor de parameter @datasrc. Zie het onderwerp 'sp_addlinkedserver' in SQL Server Books Online voor meer informatie.

Veelvoorkomende foutberichten en hoe u deze kunt oplossen

Belangrijk

Dit gedeelte, deze methode of taak bevat stappen die je vertellen hoe je het register kunt wijzigen. Er kunnen echter ernstige problemen optreden als u het register onjuist wijzigt. Zorg er daarom voor dat u deze stappen zorgvuldig volgt. Maak voor extra beveiliging een back-up van het register voordat u het wijzigt. Vervolgens kunt u het register herstellen als er een probleem optreedt. Klik op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven voor meer informatie over het maken van een back-up en het herstellen van het register: 322756 Een back-up maken en het register herstellen in Windows

U kunt een van de volgende twee methoden gebruiken om uitgebreide informatie op te halen over eventuele fouten die optreden bij het uitvoeren van een gedistribueerde query.

  • Methode 1

    Maak verbinding met SQL Server met behulp van SQL Server Management Studio en voer de volgende code uit om traceringsvlag 7300 in te schakelen.

    DBCC Traceon(7300)
    
  • Methode 2

    Leg de gebeurtenis OLEDB-fouten vast die zich in de gebeurteniscategorie Fouten en waarschuwingen in SQL Profiler bevindt. De indeling van het foutbericht is als volgt:

    Interface::Methode is mislukt met hex-foutcode.

    U kunt hex-foutcode opzoeken in het oledberr.h-bestand dat is opgenomen in de MDAC Software Development Kit (SDK).

Hier volgt een lijst met veelvoorkomende foutberichten die kunnen optreden, samen met informatie over het oplossen van het foutbericht.

Opmerking

Als u SQL Server 2005 of nieuwere versies gebruikt, kunnen deze foutberichten enigszins afwijken. De fout-id's van deze foutberichten zijn echter hetzelfde als in oudere versies van SQL Server. Daarom kunt u deze identificeren door de fout-id's. Zoek in SQL Server Books Online naar het onderwerp Gedistribueerde query's optimaliseren voor prestatieproblemen.

  • Bericht 1

    Fout 7399: De OLE DB-provider %ls voor gekoppelde server %ls heeft een fout gerapporteerd. %ls

    Schakel traceringsvlag 7300 in of gebruik SQL Profiler om de gebeurtenis OLEDB-fouten vast te leggen om uitgebreide OLEDB-foutinformatie op te halen.

  • Bericht 2a

    "ORA-12154: TNS:kan servicenaam niet oplossen"

  • Bericht 2b

    "De Oracle(tm) client- en netwerkonderdelen zijn niet gevonden. Deze onderdelen worden geleverd door Oracle Corporation en maken deel uit van de installatie van Oracle-versie 7.3.3 (of hoger) van clientsoftware"

    Deze fouten treden op wanneer er een verbindingsprobleem is met de Oracle-server. Bekijk de technieken voor het oplossen van connectiviteitsproblemen met de sectie Oracle-server hieronder voor aanvullende probleemoplossing.

  • Bericht 3

    Fout 7302: Kan geen exemplaar van OLE DB-provider MSDAORA maken voor gekoppelde server %ls.

    Zorg ervoor dat het MSDAORA.dll-bestand juist is geregistreerd. (Het bestand MSDAORA.dll is de Microsoft OLE DB-provider voor Oracle-bestand.) Gebruik RegSvr32.exe om Microsoft OLE DB-provider voor Oracle te registreren.

    Opmerking

    Als u een externe Oracle-provider gebruikt en uw Oracle-provider niet kan worden uitgevoerd buiten een SQL Server-proces, schakelt u het in-proces in door de provideropties te wijzigen. Als u de provideropties wilt wijzigen, gebruikt u een van de volgende methoden:

    • Methode 1 Zoek de volgende registersleutel. Wijzig vervolgens de waarde van de vermelding AllowInProcess (DWORD) in 1. Deze registersleutel bevindt zich onder de bijbehorende providernaam: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName.

    • Methode 2 Volg deze stappen om de optie Inprocess toestaan in te stellen voor providers die SQL Server Management Studio (SSMS) gebruiken.

    1. Open SSMS en maak verbinding met uw SQL Server-exemplaar.
    2. Navigeer in Objectverkenner naar providers van gekoppelde serverobjecten
    3. Klik met de rechtermuisknop op de provider die u wilt configureren en selecteer Eigenschappen.
    4. Schakel in het venster Provideropties het selectievakje Inschakelen in voor de optie Inprocess toestaan.
  • Bericht 4

    Fout 7303: Kan het gegevensbronobject van DE OLE DB-provider MSDAORA voor gekoppelde server %ls niet initialiseren. [OLE/DB-provider heeft bericht geretourneerd: ORA-01017: ongeldige gebruikersnaam/wachtwoord; aanmelding geweigerd] OLE DB-fouttracering [OLE/DB-provider MSDAORA" IDBInitialize::Initialize geretourneerd 0x80040e4d].

    Dit foutbericht geeft aan dat de gekoppelde server geen juiste aanmeldingstoewijzing heeft. U kunt de sp_helplinkedsrvlogin opgeslagen procedure uitvoeren om de aanmeldingsgegevens correct in te stellen. Controleer ook of u de juiste parameters voor de configuratie van de gekoppelde server hebt opgegeven.

  • Bericht 5

    Fout 7306: Kan de tabel %ls niet openen van OLE DB-provider MSDAORA voor gekoppelde server %ls. De opgegeven tabel bestaat niet. [OLE/DB-provider geretourneerd bericht: Tabel bestaat niet.][OLE/DB-provider geretourneerd bericht: ORA-00942: tabel of weergave bestaat niet] OLE DB-fouttracering [OLE/DB-provider 'MSDAORA' IOpenRowset::OpenRowset geretourneerd 0x80040e37: De opgegeven tabel bestaat niet.].

    Fout 7312: Ongeldig gebruik van schema en/of catalogus voor OLE DB-provider %ls voor gekoppelde server %ls. Er is een vierdelige naam opgegeven, maar de provider maakt de benodigde interfaces niet beschikbaar voor het gebruik van een catalogus en/of schema.

    Fout 7313: Er is een ongeldig schema of een ongeldige catalogus opgegeven voor de provider %ls voor gekoppelde server %ls.

    Fout 7314: De OLE DB-provider %ls voor gekoppelde server %ls bevat niet de tabel %ls. De tabel bestaat niet of de huidige gebruiker heeft geen machtigingen voor die tabel.

    Als u deze foutberichten ontvangt, ontbreekt er mogelijk een tabel in het Oracle-schema of hebt u mogelijk geen machtigingen voor die tabel. Controleer of de schemanaam is getypt met hoofdletters. Het alfabetische hoofdlettergebruik van de tabel en de kolommen moet worden opgegeven in de Oracle-systeemtabellen.

    Aan de zijde van Oracle wordt een tabel of kolom die zonder dubbele aanhalingstekens wordt gemaakt, opgeslagen in hoofdletters. Als de tabel of de kolom tussen dubbele aanhalingstekens staat, wordt de tabel of de kolom opgeslagen zoals is.

    In de volgende aanroep ziet u of de tabel in het Oracle-schema bestaat. In deze aanroep wordt ook de exacte tabelnaam weergegeven.

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

    Fout 7413: kan geen verbinding maken met gekoppelde server %ls (OLE DB-provider %ls). Schakel delegatie in of gebruik een externe SQL Server-aanmelding voor de huidige gebruiker. Msg 18456, Niveau 14, Status 1, Regel 1 Aanmelding is mislukt voor gebruiker ''.

    Dit foutbericht geeft aan dat een gedistribueerde query wordt uitgevoerd voor een geverifieerde Microsoft Windows-aanmelding zonder expliciete aanmeldingstoewijzing. In een besturingssysteemomgeving waarin beveiligingsdelegering niet wordt ondersteund, hebben geverifieerde Windows NT-aanmeldingen een expliciete toewijzing nodig aan een externe aanmelding en wachtwoord die zijn gemaakt met behulp van sp_addlinkedsrvlogin.

  • Bericht 7

    Fout 7391: De bewerking kan niet worden uitgevoerd omdat DE OLE DB-provider MSDAORA voor de gekoppelde server %ls geen gedistribueerde transactie kan starten. OLE DB-fouttracering [OLE/DB-provider MSDAORA ITransactionJoin::JoinTransaction geretourneerd 0x8004d01b]

    Controleer of de OCI-versies correct zijn geregistreerd zoals eerder in dit artikel is beschreven.

    Opmerking

    Als de registervermeldingen juist zijn, wordt het MtxOCI.dll bestand geladen. Als het MtxOCI.dll bestand niet is geladen, kunt u geen gedistribueerde transacties uitvoeren op Oracle met behulp van Microsoft OLE DB-provider voor Oracle of met het Microsoft ODBC-stuurprogramma voor Oracle. Als u een externe provider gebruikt en u fout 7391 ontvangt, controleert u of de OLE DB-provider die u gebruikt, gedistribueerde transacties ondersteunt. Als de OLE DB-provider gedistribueerde transacties ondersteunt, controleert u of de Microsoft Distributed Transaction Coordinator (MSDTC) wordt uitgevoerd en of netwerktoegang is ingeschakeld.

  • Bericht 8

    Fout 7392: Kan een transactie voor OLE DB-provider MSDAORA voor gekoppelde server %ls niet starten. OLE DB-fouttracering [OLE/DB-provider 'MSDAORA' ITransactionLocal::StartTransaction geretourneerd 0x8004d013: ISOLEVEL=4096].

    De OLE DB-provider heeft fout 7392 geretourneerd omdat slechts één transactie actief kan zijn voor deze sessie. Deze fout geeft aan dat een instructie voor het wijzigen van gegevens wordt geprobeerd voor een OLE DB-provider wanneer de verbinding zich in een expliciete of impliciete transactie bevindt, en de OLE DB-provider geen ondersteuning biedt voor geneste transacties. SQL Server vereist deze ondersteuning, zodat bij bepaalde foutvoorwaarden de gevolgen van de wijzigingsinstructie van gegevens kunnen worden beëindigd terwijl de transactie wordt voortgezet.

    Als SET XACT_ABORT is INGESCHAKELD, vereist SQL Server geen geneste transactieondersteuning van de OLE DB-provider. Voer daarom uit SET XACT_ABORT ON voordat u instructies voor het wijzigen van gegevens uitvoert voor externe tabellen in een impliciete of expliciete transactie. Doe dit als de OLE DB-provider die u gebruikt, geen ondersteuning biedt voor geneste transacties.

Technieken voor het oplossen van verbindingsproblemen met Oracle-server

Als u fouten wilt opsporen in de Oracle-connectiviteitsproblemen met het Microsoft ODBC-stuurprogramma voor Oracle of de Microsoft OLE DB-provider voor Oracle, voert u de volgende stappen uit:

  1. Gebruik het oracle SQL Plus-hulpprogramma (een opdrachtregelprogramma voor query's) om te controleren of u verbinding kunt maken met Oracle en gegevens kunt ophalen.

    Opmerking

    Als u geen verbinding kunt maken met Oracle en gegevens kunt ophalen, hebt u een slechte installatie of configuratie van de Oracle-clientonderdelen of hebt u geen TNS-servicealias (Transparent Network Substrate) gemaakt voor de Oracle-server wanneer u het hulpprogramma SQL*Net Easy Configuration of Oracle Net8 Easy Configuration hebt gebruikt. Neem contact op met de Oracle-databasebeheerder (DBA) om te controleren of de Oracle-onderdelen die u nodig hebt, correct zijn geïnstalleerd en geconfigureerd.

  2. Controleer de versie van de Oracle-client (SQL*Net-versie) die op de computer is geïnstalleerd. Zowel het Microsoft ODBC-stuurprogramma voor Oracle als de Microsoft OLE DB-provider voor Oracle vereisen de installatie van SQL*Net versie 2.3 of hoger op de clientcomputer.

    De connectiviteit van SQL Plus (het hulpprogramma voor oracle-clientquery's) lijkt te werken, maar u moet de computer opnieuw opstarten om de ODBC/OLE DB-connectiviteit correct te laten functioneren.

    Opmerking

    Wanneer u Oracle 8i gebruikt, is het .rgs-bestand leeg.

  3. Als de Oracle-client is geïnstalleerd en u een foutmelding krijgt die aangeeft dat Oracle Client Components 7.3 of hoger moet worden geïnstalleerd op de computer, controleert u of het omgevingsvariabele PATH op de clientcomputer de map bevat waarin de Oracle-client is geïnstalleerd, zoals Oracle_Root\Bin. Als u deze map niet kunt vinden, voegt u de map toe aan de variabele PATH om de fout op te lossen.

  4. Controleer of het bestand Ociw32.dll zich in de map Oracle_Root\bin bevindt. Dit .dll bestand kan niet bestaan op een andere locatie op de clientcomputer. Zorg ervoor dat de ORACLE Client Component-DLL's (bijvoorbeeld het Core40.dll-bestand en het Ora*.dll-bestand) niet bestaan buiten de map of submappen van de Oracle_Root .

  5. Controleer of er één Oracle-clientversie is geïnstalleerd op de computer. Meerdere versies van SQL*Net kunnen niet op dezelfde clientcomputer voorkomen en kritieke bewerkingen veroorzaken (bijvoorbeeld TNS- en aliaszoekacties).

  6. Microsoft raadt u aan een lokale installatie van de Oracle-client te hebben en dit niet te doen door een externe Oracle-client toe te voegen aan uw computer en deze vervolgens op te nemen in het pad van het systeem om verbinding te maken met Oracle via ODBC/OLE DB. Maar de provider en het stuurprogramma worden getest met een lokaal geïnstalleerde Oracle-client en niet op een netwerkshare.

Zie ook