如何在 SQL Server 中設定並疑難排解 Oracle 資料庫的連結伺服器

文章翻譯 文章翻譯
文章編號: 280106 - 檢視此文章適用的產品。
重要 本文包含有關修改登錄的相關資訊。修改登錄之前,請務必將它備份起來,並瞭解如何在發生問題時還原登錄。如需有關如何備份、還原和修改登錄的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
256986 Microsoft Windows 登錄說明
全部展開 | 全部摺疊

在此頁中

結論

本文將逐步告訴您,如何在執行 Microsoft SQL Server 的電腦上,建立連結到 Oracle 資料庫的伺服器,並對您設定連結伺服器的步驟時可能遇到的常見錯誤,提供基本的疑難排解步驟。

設定 Oracle 連結伺服器的步驟

  1. 您必須在執行 SQL Server 且已設定連結伺服器的電腦上安裝 Oracle 用戶端軟體。
  2. 在執行 SQL Server 的電腦上安裝您想要的驅動程式。Microsoft 僅支援 Microsoft OLE DB Provider for Oracle 與 Microsoft ODBC Driver for Oracle。如果您使用協力廠商提供者或協力廠商的驅動程式連接到 Oracle,當使用其提供者或驅動程式遇到可能的問題時,必須聯絡個別的廠商。
  3. 如果您使用 Microsoft OLE DB Provider for Oracle 與 Microsoft ODBC Driver for Oracle,請考慮下列事項:
    • 包含在 Microsoft Data Access Components (MDAC) 中的 OLE DB 提供者與 ODBC 驅動程式,需要 SQL*Net 2.3.x 或較新的版本。您必須在用戶端電腦上安裝 Oracle 7.3.x 用戶端軟體或較新的版本。用戶端電腦為執行 SQL Server 的電腦。
    • 確定您已在執行 SQL Server 的電腦上安裝 MDAC 2.5 或較新的版本。若使用 MDAC 2.1 或較舊的版本,則無法連接到使用 Oracle 8.x 或較新版本的資料庫。
    • 如果要啟用 MDAC 2.5 或更新版本,以便和 Oracle 用戶端軟體搭配使用,則必須在執行 SQL Server 的用戶端電腦上修改登錄,如下表所示。
      摺疊此表格展開此表格
      Oracle
      Client
      Microsoft Windows NT,
      Microsoft Windows 95,
      Windows 98, and Windows 98 SE
      Microsoft Windows 2000
      7.x[HKEY_LOCAL_MACHINE\SOFTWARE
      \Microsoft\TransactionServer
      \Local Computer\My Computer]
      "OracleXaLib"="xa73.dll"
      "OracleSqlLib"="SQLLib18.dll"
      "OracleOciLib"="ociw32.dll"
      [HKEY_LOCAL_MACHINE\SOFTWARE
      \Microsoft\MSDTC\MTxOCI]
      "OracleXaLib"="xa73.dll"
      "OracleSqlLib"="SQLLib18.dll"
      "OracleOciLib"="ociw32.dll"
      8.0[HKEY_LOCAL_MACHINE\SOFTWARE
      \Microsoft\Transaction Server
      \Local Computer\My Computer]
      "OracleXaLib"="xa80.dll"
      "OracleSqlLib"="sqllib80.dll"
      "OracleOciLib"="oci.dll"
      [HKEY_LOCAL_MACHINE\SOFTWARE
      Microsoft\MSDTC\MTxOCI]
      racleXaLib"="xa80.dll"
      "OracleSqlLib"="sqllib80.dll"
      "OracleOciLib"="oci.dll"
      8.1[HKEY_LOCAL_MACHINE\SOFTWARE
      \Microsoft\Transaction Server
      \Local Computer\My Computer]
      "OracleXaLib"="oraclient8.dll"
      "OracleSqlLib"="orasql8.dll"
      "OracleOciLib"="oci.dll"
      [HKEY_LOCAL_MACHINE\SOFTWARE
      \Microsoft\MSDTC\MTxOCI]
      "OracleXaLib"="oraclient8.dll"
      "OracleSqlLib"="orasql8.dll"
      "OracleOciLib"="oci.dll"
  4. 安裝 Oracle 用戶端軟體後,請重新啟動執行 SQL Server 的電腦。
  5. 在執行 SQL Server 的電腦上,使用下列指令碼來設定連結伺服器。
    -- 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
注意 如果您使用 Microsoft ODBC Driver for Oracle,則可使用 @datasrc 參數來指定 DSN 名稱。如果無 DSN 連線,則提供者字串可透過 @provstr 參數提供。有 Microsoft OLE DB Provider for Oracle 時,使用在 TNSNames.Ora 檔案中設定的 Oracle 伺服器別名來當作 @datasrc 參數。如需詳細資訊,請參閱《SQL Server 線上叢書》中的<sp_addlinkedserver>主題。

常見錯誤訊息與疑難排解方法

警告 如果您使用「登錄編輯程式」或其他方法不當地修改登錄,可能會發生嚴重問題。這些問題可能會需要您重新安裝作業系統才能解決。Microsoft 不保證可以解決這些問題。請自行承擔修改登錄的一切風險。

當您執行分散式查詢遇到任何錯誤時,可以使用下列任一方法來擷取相關資訊。
  • 方法 1
    在 Query Analyzer 中,執行下列程式碼以開啟追蹤旗標 7300。
    DBCC Traceon(7300)
  • 方法 2
    擷取位於 SQL Profiler 中「錯誤與警告」事件類別內的「OLEDB 錯誤」事件。錯誤訊息格式如下:
    Interface::Method failed with hex-error code.
    您可以在 MDAC Software Development Kit (SDK) 中的 Oledberr.h 檔案查看 hex-error 代碼。
下列為十個可能發生的常見錯誤訊息清單,以及如何對錯誤訊息進行疑難排解的詳細資訊。

注意 如果您是使用 SQL Server 2005,則這些錯誤訊息可能會有些許不同。然而,這些錯誤訊息的錯誤識別碼與 SQL Server 2000 中的一樣。因此,您可以透過錯誤識別碼來識別它們。

注意 有關效能相關問題,請搜尋《SQL Server 線上叢書》中的<分散式查詢最佳化>主題。
  • 訊息 1
    錯誤 7399:OLE DB provider '%ls' reported an error.%ls (OLE DB 提供者 '%ls' 報告了錯誤。%ls)
    開啟追蹤旗標 7300 或使用 SQL Profiler 來擷取「OLEDB 錯誤」事件以取得相關的 OLEDB 錯誤資訊。
  • 訊息 2a
    "ORA-12154:TNS:could not resolve service name" (ORA-12154: TNS:無法解決服務名稱)
    訊息 2b
    "The Oracle(tm) client and networking components were not found.These components are supplied by Oracle Corporation and are part of the Oracle Version 7.3.3 (or greater) client software installation" (找不到 Oracle(tm) 用戶與網路元件。這些元件由 Oracle Corporation 提供,且為 Oracle 版本 7.3.3 (或更高) 用戶端軟體安裝的部分)
    如需有關如何解決 Oracle 連線問題的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
    259959 INFO: Techniques to Debug Connectivity Issues to an Oracle Server Using the ODBC Driver and OLE DB Provider
  • 訊息 3
    錯誤 7302:Could not create an instance of OLE DB provider 'MSDAORA' (無法建立 OLE DB Provider 'MSDAORA' 的執行個體)
    確定 MSDAORA.dll 檔已正確登錄(MSDAORA.dll 檔為 Microsoft OLE DB provider for Oracle 檔案)使用 RegSvr32.exe 來登錄 Microsoft OLE DB Provider for Oracle。如果登錄失敗,請重新安裝 Microsoft Data Access Components (MDAC)。如需有關 MDAC 的詳細資訊,請造訪下列 Microsoft Developer Network (MSDN) 網站:
    http://msdn.microsoft.com/data/Default.aspx
    注意 如果您使用協力廠商的 Oracle 提供者,且 Oracle 提供者無法在 SQL Server 處理程序外執行,請變更提供者選項,以執行同處理序。如果要變更提供者選項,請使用下列其中一種方法。
    • 方法 1
      找出下列登錄機碼。然後,將 AllowInProcess (DWORD) 項目的值更改為 1。可在對應的提供者名稱底下找到此登錄機碼:
      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Providers\ProviderName
    • 方法 2
      當您新增新的連結伺服器時,透過 SQL Server Enterprise Manager 直接設定 [允許 InProcess] 選項。按一下 [提供者選項],再按一下以選取 [允許 InProcess] 核取方塊。
  • 訊息 4
    錯誤 7303:Could not initialize data source object of OLE DB provider 'MSDAORA'.[OLE/DB provider returned message:ORA-01017:invalid username/password; logon denied] OLE DB error trace [OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize returned 0x80040e4d]. (無法初始化 OLE DB Provider 'MSDAORA' 的資料來源物件。[OLE/DB Provider 傳回訊息:ORA-01017:無效的使用者名稱/密碼;拒絕登入] OLE DB 錯誤追蹤 [OLE/DB Provider 'MSDAORA' IDBInitialize::Initialize 傳回 0x80040e4d])
    此錯誤訊息表示連結伺服器沒有正確的登入對應。您可以執行 sp_helplinkedsrvlogin 預存程序來正確地設定登入資訊。此外,確認您已為連結伺服器的設定指定正確的參數。
  • 訊息 5
    錯誤 7306:Could not open table ' %ls' from OLE DB provider 'MSDAORA'.The specified table does not exist.[OLE/DB provider returned message:Table does not exist.][OLE/DB provider returned message:ORA-00942:table or view does not exist] OLE DB error trace [OLE/DB Provider 'MSDAORA' IOpenRowset::OpenRowset returned 0x80040e37:The specified table does not exist.]. (無法從 OLE DB Provider 'MSDAORA' 來開啟資料表 '%ls'。指定的資料表不存在。 [OLE/DB Provider 傳回訊息:資料表不存在。][OLE/DB Provider 傳回訊息:ORA-00942:資料表或檢視表不存在] OLE DB 錯誤追蹤 [OLE/DB Provider 'MSDAORA' IOpenRowset::OpenRowset returned 0x80040e37:指定的資料表不存在。])
    錯誤 7312:Invalid use of schema and/or catalog for OLE DB provider '%ls'.A four-part name was supplied, but the provider does not expose the necessary interfaces to use a catalog and/or schema. (對 OLE DB Provider ''%ls'' 的結構描述和 (或) 資料庫目錄的使用無效。已經提供了包含四個部分的名稱,但是提供者並未公開必要的介面來使用資料庫目錄和 (或) 結構描述。)
    錯誤 7313:Invalid schema or catalog specified for provider '%ls'. (指定給提供者 '%ls' 的結構描述 (Schema) 或資料庫目錄 (Catalog) 無效。)
    錯誤 7314:OLE DB provider '%ls' does not contain table '%ls' (OLE DB Provider '%ls' 並未包含資料表 '%ls')
    如果您接收到這些錯誤訊息,則 Oracle 架構描述中的資料表可能遺失或您可能沒有該資料表的權限。確認架構描述名稱已使用大寫輸入。資料表與資料行的字母大小寫應依照 Oracle 系統表格指定。

    在 Oracle 中,所建立的資料表或資料行如無雙引號,會以大寫儲存。如果資料表或資料行以雙引號括住,則會以原來的形式儲存。

    如果資料表存在於 Oracle 架構描述中,會顯示下列呼叫。此呼叫也會顯示完整的資料表名稱。
    sp_tables_ex  @table_server=Ora817Link, @table_schema='your_schema_name'
    如需有關錯誤訊息 7306 的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
    240340 PRB: SQL Distributed Query with Oracle Causes "Could not open table" Error
  • 訊息 6
    錯誤 7413:Could not perform a Windows NT authenticated login because delegation is not available. (無法進行 Windows NT 驗證登入,因為授權無法使用。)
    Msg 18456, Level 14, State 1, Line 1 Login failed for user '\'. (訊息 18456,層次 14,狀態 1,第 1 行使用者 '\' 登入失敗。)
    下列資訊是出自《SQL Server 線上叢書》:
    此錯誤訊息是表示,正在嘗試為缺少明確登入對應的 Microsoft Windows 驗證登入進行分散式查詢。在未支援安全性委派的作業系統環境中,Windows NT 驗證登入需要使用 sp_addlinkedsrvlogin 建立遠端登入與密碼的明確對應。
  • 訊息 7
    錯誤 7354:OLE DB provider 'MSDAORA' supplied invalid metadata for column '%ls'.The data type is not supported. (OLE DB Provider 'MSDAORA' 提供資料行 '%ls'' 無效的中繼資料 (Metadata)。資料類型不受支援。)
    如果您接收到此錯誤訊息,您可能遇到下面「Microsoft 知識庫」文件所列出的錯誤:
    243027 FIX:Numeric column in Oracle causes error 7354
  • 訊息 8
    錯誤 7356:OLE DB provider 'MSDAORA' supplied inconsistent metadata for a column.Metadata information was changed at execution time. (OLE DB Provider 'MSDAORA' 對資料行提供了不一致的中繼資料 (Metadata)。中繼資料資訊在執行階段已經變更。)
    如果您的連結伺服器查詢使用 Oracle 檢視,您可能會遇到下面「Microsoft 知識庫」文件所列出的問題:
    251238 PRB: Distributed Queries Return Error 7356 with MSDAORA
  • 訊息 9
    錯誤 7391:The operation could not be performed because the OLE DB provider 'MSDAORA' does not support distributed transactions.OLE DB error trace [OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction returned 0x8004d01b] (由於 OLE DB Provider 'MSDAORA' 無法開始分散式交易,所以無法執行此操作。OLE DB 錯誤追蹤 [OLE/DB Provider 'MSDAORA' ITransactionJoin::JoinTransaction 傳回 0x8004d01b])
    確認 OCI 版本依照本文先前所述正確登錄。

    注意 如果登錄項目全部正確,則會載入 MtxOCI.dll 檔。如果未載入 MtxOCI.dll 檔,則無法使用 Microsoft OLE DB Provider for Oracle 或 Microsoft ODBC Driver for Oracle 來執行 Oracle 分散式交易。如果您使用協力廠商提供者且接收到錯誤 7391,請確認您使用的 OLE DB 提供者支援分散式交易。如果 OLE DB 提供者確實支援分散式交易,請確認 Microsoft Distributed Transaction Coordinator (MSDTC) 在執行中。
  • 訊息 10
    錯誤 7392:Could not start a transaction for OLE DB provider 'MSDAORA'.OLE DB error trace [OLE/DB Provider 'MSDAORA' ITransactionLocal::StartTransaction returned 0x8004d013:ISOLEVEL=4096]. (無法為 OLE DB Provider 'MSDAORA' 啟動交易。OLE DB 錯誤追蹤 [OLE/DB Provider 'MSDAORA' ITransactionLocal::StartTransaction 傳回 0x8004d013: ISOLEVEL=4096]。)
    下列資訊是出自《SQL Server 線上叢書》:
    OLE DB 提供者傳回錯誤 7392,因為在這個工作階段只有一個交易有作用。此錯誤指出,當連線在明確或隱含交易中進行,且 OLE DB 提供者不支援巢狀交易時,嘗試對 OLE DB 提供者使用資料修改陳述式。SQL Server 需要這項支援,使其在某些錯誤情況下,在繼續交易時可以終止資料修改陳述式的影響。
    如果 SET XACT_ABORT 設定為 ON,則 SQL Server 不需要 OLE DB 提供者支援的巢狀交易。因此,請在隱含或明確交易中依照遠端資料表執行資料修改陳述式前,執行 SET XACT_ABORT ON。以避免您使用的 OLE DB 提供者不支援巢狀交易。

?考

如需詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
244661 INFO: Limitations of Microsoft Oracle ODBC Driver and OLEDB Provider
259959 INFO: Techniques to Debug Connectivity Issues to an Oracle Server Using the ODBC Driver and OLE DB Provider
239719 INFO: Supportability of the Microsoft ODBC Driver/ OLE DB Provider for Oracle w.r.t Oracle 8.x
193893 INFO:使用 Microsoft Transaction Server 和 COM+ 來使用 Oracle
191168 INFO: Error "-2147168246 (8004d00a)" Failed to Enlist on Calling Object's Transaction
如需有關如何與 DB2 一起使用連結伺服器的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
218590 INF: Configuring Data Sources for the Microsoft OLE DB Provider for DB2
216428 Configuring Microsoft ODBC Driver for DB2

屬性

文章編號: 280106 - 上次校閱: 2011年5月18日 - 版次: 8.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • 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
關鍵字:?
kbsqldeveloper kbhowtomaster KB280106
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com