Provider Oracle per OLE DB

Il provider Oracle per OLE DB (8.1.7.3.0) consente di eseguire query distribuite sui dati nei database Oracle. Il tipo di supporto disponibile per tale provider è il seguente:

Oracle a 32 bit

Solo out-of-process

Oracle a 64 bit

Nessuno

Per creare un server collegato per l'accesso a un'istanza del database Oracle

  1. Verificare che il software client Oracle nel server che esegue Microsoft SQL Server corrisponda al livello richiesto dal provider. Il provider Oracle per OLE DB (8.1.7.3.0) richiede Oracle Client 8.1.7.0.

  2. Nel server che esegue SQL Server creare un nome alias che punta a un'istanza del database Oracle. Per ulteriori informazioni, vedere la documentazione Oracle.

  3. Eseguire sp_addlinkedserver per creare il server collegato, specificando OraOLEDB.Oracle come provider_name e l'alias per il database Oracle come data_source.

    Nell'esempio seguente si presuppone che l'alias sia stato definito come DQORA8:

    exec sp_addlinkedserver @server='OrclDB', 
        @srvproduct='Oracle',
        @provider='OraOLEDB.Oracle', 
        @datasrc='DQORA8'
    
    Nota sulla sicurezzaNota sulla sicurezza

    In questo esempio non viene utilizzata l'autenticazione di Windows. Le password vengono trasmesse senza essere crittografate ed è possibile che siano visibili nelle definizioni delle origini dei dati e negli script salvati su disco, nei backup e nei file di log. Non utilizzare mai una password di amministratore per questo tipo di connessione. Per ulteriori informazioni sulla protezione specifiche per l'ambiente utilizzato, consultare l'amministratore di rete.

  4. Utilizzare sp_addlinkedsrvlogin per creare mapping tra gli account di accesso di SQL Server e gli account di accesso Oracle.

    Nell'esempio seguente viene eseguito il mapping tra l'account di accesso Joe di SQL Server e il server collegato definito nel passaggio 3 utilizzando l'account di accesso e la password Oracle, ovvero OrclUsr e OrclPwd:

    sp_addlinkedsrvlogin @rmtsrvname = 'OrclDB', 
       @useself = 'false', 
       @locallogin = 'Joe', 
       @rmtuser = 'OrclUsr', 
       @rmtpassword = 'OrclPwd'
    

Per fare riferimento alle tabelle di un server collegato Oracle, è necessario rispettare le regole seguenti:

  • Se i nomi della tabella e delle colonne sono stati creati in Oracle senza identificatori tra virgolette, specificare tutti i nomi in lettere maiuscole.

  • Se i nomi della tabella e delle colonne sono stati creati in Oracle con identificatori tra virgolette, specificare i nomi con la stessa combinazione di maiuscole e minuscole con cui sono stati definiti in Oracle.

  • Nelle istruzioni INSERT è necessario specificare valori per tutte le colonne di una tabella, anche per colonne NULL o con valori predefiniti.

  • Questo provider non supporta il passaggio diretto di valori letterali datetime come argomenti nel formato seguente:

    EXEC 'string' '<datetime-literal>' AT <oraclelinkedserver>
    

    Ad esempio, l'utilizzo seguente del valore letterale datetime'14-sep-94' non è supportato:

    EXEC('INSERT INTO DYNORCL.SALES(ID, ORD_NO, ORD_DATE, QTY) 
       VALUES (?, ?, ?, ?)', '6380', '6871', '14-sep-94', 5) AT OrclDB
    

    In alternativa, è possibile creare una variabile datetime, assegnarle il valore letterale e chiamare la funzione EXEC con la variabile come argomento:

    DECLARE @v1 datetime
    SET @v1 = CONVERT(datetime,'14-sep-94')
    EXEC('INSERT INTO DYNORCL.SALES(ID, ORD_NO, ORD_DATE, QTY) 
       VALUES (?, ?, ?, ?)', '6380', '6871', @v1, 5) AT OrclDB
    

Restrizioni

SQL Server non supporta l'utilizzo della funzione di aggregazione AVG sulle tabelle Oracle, in quanto il provider Oracle restituisce il tipo OLE DB DBTYPE_VARNUMERIC che non è supportato da SQL Server. Il codice seguente, ad esempio, restituisce un errore:

SELECT AVG(QTY)
FROM ORA..RPUBS.SALES

Per evitare l'errore, utilizzare OPENQUERY Ad esempio:

SELECT *
FROM OPENQUERY(ORA,
   'SELECT CAST (AVG(QTY) AS numeric)
   FROM ORA..RPUBS.SALES')

Voci del Registro di sistema

Per consentire l'utilizzo del provider OLE DB per Oracle con il software client Oracle, è necessario modificare il Registro di sistema del client eseguendo un file del Registro di sistema dalla riga di comando. Non è possibile eseguire contemporaneamente più istanze del software client. Questi file sono elencati nella tabella seguente e si trovano nella stessa struttura di directory che contiene l'installazione di Microsoft Data Access Components (MDAC), in genere C:\Program Files\Common Files\System Files\OLE DB.

Client Oracle

Windows NT o 9x

Windows 2000

7.x

mtxoci7x_winnt.reg

mtxoci7x_win2k.reg

8.0

mtxoci80_winnt.reg

mtxoci80_win2k.reg

8.1

mtxoci81_winnt.reg

mtxoci81_win2k.reg