Oracle OLE DB 提供者

Oracle Provider for OLE DB (8.1.7.3.0) 允許針對 Oracle 資料庫中的資料進行分散式查詢。對於 Oracle Provider for OLE DB 的支援如下所示:

Oracle 32 位元

僅適用於跨處理序

Oracle 64 位元

若要建立連結伺服器來存取 Oracle 資料庫執行個體

  1. 請確認執行 Microsoft SQL Server 之伺服器上的 Oracle 用戶端軟體位於提供者所需的層級。Oracle Provider for OLE DB (8.1.7.3.0) 需要 Oracle Client 8.1.7.0。

  2. 在執行 SQL Server 的伺服器上建立伺服器的別名,以指到 Oracle 資料庫執行個體。如需詳細資訊,請參閱 Oracle 文件集。

  3. 執行 sp_addlinkedserver 來建立連結伺服器,指定 OraOLEDB.Oracle 作為 provider_name,並指定 Oracle 資料庫的別名作為 data_source。

    下列範例假設別名已定義為 DQORA8:

    exec sp_addlinkedserver @server='OrclDB', 
        @srvproduct='Oracle',
        @provider='OraOLEDB.Oracle', 
        @datasrc='DQORA8'
    
    安全性注意事項安全性注意事項

    這個範例不使用 Windows 驗證。密碼會以未經加密的方式傳輸。在儲存於磁碟的資料來源定義和指令碼中、備份中和記錄檔中,可能看得見密碼。請勿在這種連接中使用管理員密碼。如需您環境的特定安全性指引,請洽詢網路管理員。

  4. 使用 sp_addlinkedsrvlogin 來建立 SQL Server 登入到 Oracle 登入的登入對應。

    下列範例將使用 Oracle 登入與密碼 OrclUsr 與 OrclPwd 來將 SQL Server 登入 Joe 對應至步驟 3 所定義的連結伺服器:

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

在參考 Oracle 連結伺服器內的資料表時,請使用下列規則:

  • 若資料表與資料行名稱是在 Oracle 中所建立,且不包含引號識別碼,請使用全部大寫字的名稱。

  • 若資料表與資料行是在 Oracle 中所建立,且包含引號識別碼,請使用與當初在 Oracle 中建立時所使用的相同名稱 (包括字母大小寫)。

  • 即使資料表的某些資料行可以為 NULL 或有預設值,INSERT 陳述式應該提供值給資料表內的所有資料行。

  • 此提供者並不支援直接傳遞 datetime 常值作為下列格式的引數:

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

    例如,不支援下列 datetime 常值 '14-sep-94' 的使用:

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

    請改建立 datetime 變數,指派常值給它,並將該變數作為引數來呼叫 EXEC:

    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
    

限制

SQL Server 並不支援針對 Oracle 資料表使用 AVG 彙總函數,因為 Oracle 提供者會傳回 OLE DB 類型的 DBTYPE_VARNUMERIC。SQL Server 並不支援 DBTYPE_VARNUMERIC。例如,下列程式碼會傳回錯誤:

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

若要避免錯誤發生,請使用 OPENQUERY。例如:

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

登錄項目

若要讓 OLE DB Provider for Oracle 與 Oracle 用戶端軟體一起運作,您必須從指令行執行登錄檔以修改用戶端的登錄。用戶端軟體的多個執行個體不應該同時執行。這些檔案列在下表中,並位於包含 Microsoft Data Access Component (MDAC) 安裝的相同目錄結構內。這通常是位於 C:\Program Files\Common Files\System Files\OLE DB。

Oracle 用戶端

Windows NT 或 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