Condividi tramite


Configurare e risolvere i problemi relativi a un server collegato a un database Oracle in SQL Server

Questo articolo descrive come configurare un server collegato da un computer che esegue Microsoft SQL Server a un database Oracle e fornisce i passaggi di base per la risoluzione dei problemi per gli errori comuni che possono verificarsi durante la configurazione di un server collegato a un database Oracle.

Versione originale del prodotto: Microsoft SQL Server 2005 edizione Standard, Microsoft SQL Server 2005 Developer Edition, Microsoft SQL Server 2005 edizione Enterprise, Microsoft SQL Server 2005 Express Edition, Microsoft SQL Server 2005 Workgroup Edition
Numero KB originale: 280106

Riepilogo

Questo articolo descrive come configurare un server collegato da un computer che esegue Microsoft SQL Server a un database Oracle e illustra i passaggi di base per la risoluzione dei problemi per gli errori comuni che possono verificarsi durante la configurazione di un server collegato a Oracle. La maggior parte delle informazioni contenute in questo articolo è applicabile agli ambienti configurati per l'uso del provider Microsoft OLEDB per Oracle (MSDAORA). Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Usare invece il provider OLE DB di Oracle.

Per altre informazioni sulla configurazione di un server collegato tramite il provider OLEDB di Oracle, vedere Come iniziare a usare Oracle e i server collegati.

Importante

La versione corrente di Microsoft ODBC Driver for Oracle è conforme alla specifica ODBC 2.5, mentre il provider OLE DB per Oracle è un provider DI API Oracle 7 OCI nativo. Sia il driver che il provider usano il client SQL*Net (o il client Net8 per Oracle 8x) e la libreria OCI (Oracle Call Interface) e altri componenti client Oracle, per connettersi ai database Oracle e recuperare i dati. I componenti client Oracle sono importanti e devono essere configurati correttamente per connettersi correttamente ai database Oracle usando sia il driver che il provider.

Da Microsoft Data Access Components (MDAC) versione 2.5 e successive, sia Microsoft ODBC Driver che OLE DB Provider supportano SOLO Oracle 7 e Oracle 8i con le limitazioni seguenti:

  • I tipi di dati specifici di Oracle 8.x, ad esempio CLOB, BLOB, BFILE, NCHAR, NCLOB e NVARCHAR2, non sono supportati.

  • La funzionalità Unicode per i server Oracle 7.x e 8.x non è supportata.

  • Più istanze del client Oracle o più case Oracle non sono supportate perché si basano sulla prima occorrenza della home page Oracle nella variabile SYSTEM PATH.

  • La restituzione di più set di risultati da una stored procedure o da un'istruzione SQL batch non è supportata tramite ADO o OLEDB.

  • I outer join annidati non sono supportati.

  • La persistenza XML non è supportata.

  • La versione maggiore di 8i non è supportata usando questi driver.

Note

I prodotti di terze parti citati in questo articolo sono realizzati da società indipendenti da Microsoft. Microsoft non rilascia alcuna garanzia implicita o esplicita relativa alle prestazioni o all'affidabilità di tali prodotti.

Procedura per configurare un server collegato a Oracle

  1. È necessario installare il software client Oracle nel computer che esegue SQL Server in cui è configurato il server collegato.

  2. Installare il driver desiderato nel computer che esegue SQL Server. Microsoft supporta solo provider Microsoft OLE DB per Oracle e Microsoft ODBC Driver for Oracle. Se si usa un provider di terze parti o un driver di terze parti per connettersi a Oracle, è necessario contattare il rispettivo fornitore per eventuali problemi che potrebbero verificarsi utilizzando il provider o il driver.

  3. Se si usano provider Microsoft OLE DB per Oracle e Microsoft ODBC Driver for Oracle, tenere presente quanto segue:

    • Sia il provider OLE DB che il driver ODBC inclusi in Microsoft Data Access Components (MDAC) richiedono SQL*Net 2.3.x o versione successiva. È necessario installare il software client Oracle 7.3.x o una versione successiva nel computer client. Il computer client è il computer che esegue SQL Server.

    • Assicurarsi di avere installato MDAC 2.5 o una versione successiva nel computer che esegue SQL Server. Con MDAC 2.1 o con una versione precedente, non è possibile connettersi ai database che usano Oracle 8. x o versione successiva.

    • Per abilitare MDAC 2.5 o versioni successive, per usare il software client Oracle, è necessario modificare il Registro di sistema nel computer client che esegue SQL Server, come indicato nella tabella seguente.

      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. Riavviare il computer che esegue SQL Server dopo aver installato il software client Oracle.

  5. Nel computer che esegue SQL Server configurare un server collegato usando lo script seguente.

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

    Note

    Se si usa Microsoft ODBC Driver for Oracle, è possibile usare il @datasrc parametro per specificare un nome DSN. Per una connessione senza DSN, la stringa del provider viene fornita tramite il parametro @provstr . Con provider Microsoft OLE DB per Oracle, usare l'alias del server Oracle configurato nel file TNSNames.Ora per il parametro @datasrc. Per altre informazioni, vedere l'argomento "sp_addlinkedserver" nella documentazione online di SQL Server.

Messaggi di errore comuni e come risolverli

Importante

In questa sezione, metodo o attività viene illustrata la procedura per modificare il Registro di sistema. Se, tuttavia, si modifica il Registro di sistema in modo errato, possono verificarsi gravi problemi. Pertanto, assicurarsi di osservare attentamente la procedura seguente. Per una maggiore protezione, eseguire il backup del Registro di sistema prima di modificarlo. Successivamente, è possibile ripristinare il Registro di sistema se si verifica un problema. Per altre informazioni su come eseguire il backup e il ripristino del Registro di sistema, fare clic sul numero di articolo seguente per visualizzare l'articolo della Microsoft Knowledge Base: 322756 Come eseguire il backup e ripristinare il Registro di sistema in Windows

È possibile usare uno dei due metodi seguenti per recuperare informazioni estese su qualsiasi errore durante l'esecuzione di una query distribuita.

  • Metodo 1

    Connettersi a SQL Server usando SQL Server Management Studio ed eseguire il codice seguente per attivare il flag di traccia 7300.

    DBCC Traceon(7300)
    
  • Metodo 2

    Acquisire l'evento "OLEDB Errors" che si trova nella categoria di eventi "Errori e avvisi" in SQL Profiler. Il formato del messaggio di errore è il seguente:

    Interface::Method non è riuscito con codice esadecimale.

    È possibile cercare il codice di errore esadecimale nel file Oledberr.h incluso in MDAC Software Development Kit (SDK).

Di seguito è riportato un elenco di messaggi di errore comuni che possono verificarsi, insieme alle informazioni su come risolvere il messaggio di errore.

Note

Se si usa SQL Server 2005 o versioni successive, questi messaggi di errore potrebbero essere leggermente diversi. Tuttavia, gli ID errore di questi messaggi di errore sono uguali a quelli delle versioni precedenti di SQL Server. Pertanto, è possibile identificarli in base agli ID errore. Per i problemi relativi alle prestazioni, cercare la documentazione online di SQL Server per l'argomento Ottimizzazione delle query distribuite.

  • Message 1

    Errore 7399: il provider OLE DB "%ls" per il server collegato "%ls" ha segnalato un errore. %ls

    Attivare il flag di traccia 7300 o usare SQL Profiler per acquisire l'evento OLEDB Errors per recuperare informazioni estese sull'errore OLEDB.

  • Messaggio 2a

    "ORA-12154: TNS:could not resolve service name"

  • Messaggio 2b

    "I componenti client e di rete Oracle(tm) non sono stati trovati. Questi componenti sono forniti da Oracle Corporation e fanno parte dell'installazione del software client Oracle versione 7.3.3 (o successiva) "

    Questi errori si verificano quando si verifica un problema di connettività al server Oracle. Per altre informazioni sulla risoluzione dei problemi, vedere La sezione Tecniche per risolvere i problemi di connettività al server Oracle di seguito.

  • Message 3

    Errore 7302: Impossibile creare un'istanza del provider OLE DB 'MSDAORA' per il server collegato "%ls".

    Assicurarsi che il file di MSDAORA.dll sia registrato correttamente. Il file MSDAORA.dll è il provider Microsoft OLE DB per il file Oracle. Usare RegSvr32.exe per registrare provider Microsoft OLE DB per Oracle.

    Note

    Se si usa un provider Oracle di terze parti e il provider Oracle non può essere eseguito all'esterno di un processo di SQL Server, abilitarlo per l'esecuzione in-process modificando le opzioni del provider. Per modificare le opzioni del provider, utilizzare uno dei metodi seguenti:

    • Metodo 1 Individuare la chiave del Registro di sistema seguente. Modificare quindi il valore della voce AllowInProcess (DWORD) su 1. Questa chiave del Registro di sistema si trova sotto il nome del provider corrispondente: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName.

    • Metodo 2 Seguire questa procedura per impostare l'opzione Consenti inprocess per i provider che usano SQL Server Management Studio (SSMS).

    1. Aprire SSMS e connettersi all'istanza di SQL Server.
    2. In Esplora oggetti passare a Server Objects>Linked Servers Providers (Provider di server>collegati).
    3. Fare clic con il pulsante destro del mouse sul provider che si vuole configurare e selezionare Proprietà.
    4. Nella finestra Opzioni provider selezionare la casella Abilita per l'opzione Consenti inprocess.
  • Messaggio 4

    Errore 7303: Impossibile inizializzare l'oggetto origine dati del provider OLE DB 'MSDAORA' per il server collegato "%ls". [Messaggio restituito dal provider OLE/DB: ORA-01017: nome utente/password non valido; accesso negato] Traccia degli errori OLE DB [provider OLE/DB 'MSDAORA' IDBInitialize::Initialize restituito 0x80040e4d].

    Questo messaggio di errore indica che il server collegato non dispone del mapping di accesso corretto. È possibile eseguire la sp_helplinkedsrvlogin stored procedure per impostare correttamente le informazioni di accesso. Verificare inoltre di aver specificato i parametri corretti per la configurazione del server collegato.

  • Messaggio 5

    Errore 7306: Impossibile aprire la tabella ' %ls' dal provider OLE DB 'MSDAORA' per il server collegato "%ls". La tabella specificata non esiste. [Messaggio restituito dal provider OLE/DB: Tabella non esistente.][Messaggio restituito dal provider OLE/DB: ORA-00942: tabella o vista non esistente] Traccia degli errori OLE DB [Provider OLE/DB 'MSDAORA' IOpenRowset::OpenRowset restituito 0x80040e37: la tabella specificata non esiste.].

    Errore 7312: utilizzo non valido dello schema e/o del catalogo per il provider OLE DB '%ls' per il server collegato "%ls". È stato fornito un nome in quattro parti, ma il provider non espone le interfacce necessarie per usare un catalogo e/o uno schema.

    Errore 7313: è stato specificato uno schema o un catalogo non valido per il provider "%ls" per il server collegato "%ls".

    Errore 7314: il provider OLE DB "%ls" per il server collegato "%ls" non contiene la tabella "%ls". La tabella non esiste o l'utente corrente non dispone delle autorizzazioni necessarie.

    Se si ricevono questi messaggi di errore, una tabella potrebbe non essere presente nello schema Oracle o non si dispone delle autorizzazioni per tale tabella. Verificare che il nome dello schema sia stato digitato usando lettere maiuscole. Il caso alfabetico della tabella e delle colonne deve essere specificato nelle tabelle di sistema Oracle.

    Sul lato Oracle, una tabella o una colonna creata senza virgolette doppie viene archiviata in lettere maiuscole. Se la tabella o la colonna è racchiusa tra virgolette doppie, la tabella o la colonna viene archiviata così come è.

    La chiamata seguente mostra se la tabella esiste nello schema Oracle. Questa chiamata mostra anche il nome esatto della tabella.

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

    Errore 7413: Impossibile connettersi al server collegato '%ls' (provider OLE DB '%ls'). Abilitare la delega o utilizzare un accesso SQL Server remoto per l'utente corrente. Messaggio 18456, livello 14, stato 1, accesso riga 1 non riuscito per l'utente ''.

    Questo messaggio di errore indica che viene tentata una query distribuita per un account di accesso autenticato di Microsoft Windows senza un mapping di accesso esplicito. In un ambiente del sistema operativo in cui la delega di sicurezza non è supportata, gli account di accesso autenticati di Windows NT richiedono un mapping esplicito a un account di accesso remoto e una password creati con sp_addlinkedsrvlogin.

  • Messaggio 7

    Errore 7391: Impossibile eseguire l'operazione perché il provider OLE DB 'MSDAORA' per il server collegato "%ls" non è riuscito ad avviare una transazione distribuita. Traccia degli errori OLE DB [provider OLE/DB 'MSDAORA' ITransactionJoin::JoinTransaction restituito 0x8004d01b]

    Verificare che le versioni OCI siano registrate correttamente come descritto in precedenza in questo articolo.

    Note

    Se le voci del Registro di sistema sono tutte corrette, viene caricato il file MtxOCI.dll. Se il file MtxOCI.dll non viene caricato, non è possibile eseguire transazioni distribuite su Oracle usando provider Microsoft OLE DB per Oracle o microsoft ODBC Driver for Oracle. Se si usa un provider di terze parti e viene visualizzato l'errore 7391, verificare che il provider OLE DB in uso supporti le transazioni distribuite. Se il provider OLE DB supporta le transazioni distribuite, verificare che Microsoft Distributed Transaction Coordinator (MSDTC) sia in esecuzione e abbia l'accesso alla rete abilitato.

  • Messaggio 8

    Errore 7392: Impossibile avviare una transazione per il provider OLE DB 'MSDAORA'per il server collegato "%ls". Traccia degli errori OLE DB [PROVIDER OLE/DB 'MSDAORA' ITransactionLocal::StartTransaction restituito 0x8004d013: ISOLEVEL=4096].

    Il provider OLE DB ha restituito l'errore 7392 perché per questa sessione può essere attiva una sola transazione. Questo errore indica che viene tentata un'istruzione di modifica dei dati su un provider OLE DB quando la connessione si trova in una transazione esplicita o implicita e il provider OLE DB non supporta le transazioni nidificate. SQL Server richiede questo supporto in modo che, in determinate condizioni di errore, possa terminare gli effetti dell'istruzione di modifica dei dati continuando con la transazione.

    Se SET XACT_ABORT è ATTIVATO, SQL Server non richiede il supporto delle transazioni annidate dal provider OLE DB. Pertanto, eseguire SET XACT_ABORT ON prima di eseguire istruzioni di modifica dei dati su tabelle remote in una transazione implicita o esplicita. Eseguire questa operazione nel caso in cui il provider OLE DB in uso non supporti le transazioni annidate.

Tecniche per risolvere i problemi di connettività al server Oracle

Per eseguire il debug dei problemi di connettività Oracle con il driver ODBC Microsoft per Oracle o il provider Microsoft OLE DB per Oracle, seguire questa procedura:

  1. Usare l'utilità Oracle SQL Plus (un'utilità query basata su riga di comando) per verificare che sia possibile connettersi a Oracle e recuperare i dati.

    Note

    Se non è possibile connettersi a Oracle e recuperare i dati, si dispone di un'installazione non valida o di una configurazione non valida dei componenti client Oracle oppure non è stato creato correttamente un alias del servizio Transparent Network Substrate (TNS) per il server Oracle quando è stata usata l'utilità SQL*Net Easy Configuration o Oracle Net8 Easy Configuration. Contattare l'amministratore del database Oracle per verificare che i componenti Oracle siano installati e configurati correttamente.

  2. Verificare la versione del client Oracle (VERSIONE SQL*Net) installata nel computer. Sia il driver ODBC Microsoft per Oracle che il provider Microsoft OLE DB per Oracle richiedono l'installazione di SQL*Net versione 2.3 o successiva nel computer client.

    La connettività da SQL Plus (strumento di query client Oracle) può sembrare funzionare, ma è necessario riavviare il computer affinché la connettività ODBC/OLE DB funzioni correttamente.

    Note

    Quando si usa Oracle 8i, il file con estensione rgs è vuoto.

  3. Se il client Oracle è installato e viene visualizzato un errore che indica che i componenti client Oracle 7.3 o versioni successive devono essere installati nel computer, verificare che la variabile di ambiente PATH nel computer client contenga la cartella in cui è stato installato il client Oracle, ad esempio, Oracle_Root\Bin. Se non è possibile trovare questa cartella, aggiungere la cartella alla variabile PATH per risolvere l'errore.

  4. Verificare che il file Ociw32.dll si trova nella cartella Oracle_Root\bin . Questo file .dll non può esistere in un altro percorso nel computer client. Assicurarsi che le DLL del componente client Oracle (ad esempio, il file Core40.dll e il file Ora*.dll) non esistano all'esterno della cartella o delle sottocartelle Oracle_Root .

  5. Verificare che nel computer sia installata una singola versione client Oracle. Più versioni di SQL*Net non possono esistere nello stesso computer client con interferisce e con operazioni critiche ( ad esempio, TNS e ricerche alias).

  6. Microsoft consiglia di disporre di un'installazione locale del client Oracle e di non eseguire questa operazione eseguendo il mapping di un client Oracle remoto nel computer e quindi includerlo nel percorso del sistema per connettersi a Oracle tramite ODBC/OLE DB. Ma il provider e il driver vengono testati con un client Oracle installato in locale e non in una condivisione di rete.

Vedi anche