2008-11-21 100 views
21

我能夠創建並執行DTS包,該包將遠程Oracle數據庫中的表複製到本地SQL服務器,但希望將連接設置爲Oracle數據庫作爲鏈接服務器。如何在SQL 2000/2005上將鏈接服務器設置爲Oracle數據庫?

DTS包目前使用具有以下屬性的的Microsoft OLE DB提供程序的Oracle

  • 數據來源:SERVER=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=acc)));uid=*UserName*;pwd=*UserPassword*;
  • 密碼:的userPassword
  • 用戶ID:用戶名
  • 允許保存密碼:true

如何使用上面定義的數據源將鏈接服務器設置爲Oracle數據庫?

回答

36

我是能夠建立一個鏈接的服務器遠程Oracle數據庫,它結束了一個多步驟的過程:

  1. SQL Server上安裝的Oracle ODBC驅動程序。
  2. 在SQL Server上創建系統DSN到Oracle數據庫。
  3. 使用系統DSN在SQL服務器上創建鏈接的服務器。

步驟1:在服務器上

一個安裝Oracle ODBC驅動程序。下載必需的Oracle Instant Client軟件包:Basic,ODBC和SQL * Plus(可選)

b。將軟件包解壓縮到SQL服務器上的本地目錄,通常爲C:\Oracle。這應該導致一個[目錄],如C:\Oracle\instantclient_10_2,這將是該答案的其餘部分引用的[目錄]的值。

c。創建一個名爲tnsnames.ora即時客戶端[目錄]包含以下中的文本文件:

OracleTnsName = 
(
    DESCRIPTION= 
    (
    ADDRESS = (PROTOCOL=TCP)(HOST=10.1.3.42)(PORT=1521) 
) 
    (
    CONNECT_DATA = (SERVICE_NAME=acc) 
) 
) 

注:實際HOSTPORTSERVICE_NAME會根據Oracle服務器上,你正在建立一個連接。這些信息通常可以使用聽衆下的Oracle網絡客戶端工具找到。

OracleTnsName可以是您想要分配給Oracle數據源的任何名稱,並且將在設置系統DSN時使用。如果需要,您還可以使用上面的語法在同一個tnsnames.ora文件中定義多個TNS名稱。 d)。將[目錄]添加到系統PATH環境變量。

e。創建一個名爲TNS_Admin的新系統環境變量,其值爲[directory] ​​

f。執行[directory]\odbc_install.exe實用程序來安裝Oracle ODBC驅動程序。 g。

g。建議您重新啓動SQL服務器,但可能沒有必要。另外,您可能希望將安全權限授予此目錄以獲取SQL Server和SQL代理用戶身份。

第2步:創建一個使用Oracle ODBC驅動程序

的系統DNS。打開ODBC數據源管理員工具。 [管理工具 - >數據源(ODBC)]

b。選擇系統DSN選項卡,然後選擇添加按鈕。

c。在驅動程序列表中,選擇Oracle in instantclient {version}。 (例如'instantclient 10_2中的Oracle'),然後選擇完成按鈕。 d)。指定下列內容:

  • Data Source Name:{系統DSN名稱}
  • Description:{留空/空}
  • TNS Service Name:應該在OracleTnsName你列出的tnsnames.ora文件中定義的,選擇它作爲價值。
  • 用戶ID:{Oracle用戶名}

即選擇測試連接按鈕。應該提示您提供{Oracle用戶密碼}。如果一切順利,測試將會成功。

第3步:創建SQL鏈接服務器到Oracle數據庫

打開SQL Server中的查詢窗口,並執行以下命令:

EXEC sp_addlinkedserver 
    @server  = '{Linked Server Name}' 
    ,@srvproduct = '{System DSN Name}' 
    ,@provider  = 'MSDASQL' 
    ,@datasrc  = '{System DSN Name}' 

EXEC sp_addlinkedsrvlogin 
    @rmtsrvname = '{Linked Server Name}' 
    ,@useself  = 'False' 
    ,@locallogin = NULL 
    ,@rmtuser  = '{Oracle User Name}' 
    ,@rmtpassword = '{Oracle User Password}' 

注:{Linked Server Name}可以是任何你想要的在引用Oracle服務器時使用,但{System DNS Name}必須與先前創建的系統DSN的名稱相匹配。

{Oracle User Name}應該與系統DSN使用的用戶ID相同,並且{Oracle User Password}應該與用於成功測試ODBC連接的相同。有關解決Oracle鏈接服務器問題的信息,請參閱KB 280106

查詢Oracle鏈接服務器

您可以使用OPENQUERY上的Oracle鏈接服務器執行傳遞查詢,但要注意,對於非常大的記錄,如果你指定一個您可能會收到一個ORA-01652錯誤信息傳遞查詢中的ORDER BY子句。將ORDER BY子句從傳遞查詢移至外部select語句爲我解決了這個問題。

+0

嗨,我發現[srvproduct]與調用sp_addlinkedserver時的[datasrc]具有相同的值。還想問你,如果安裝Oracle 11g express和ODT與ODAC 11.1,我將能夠測試一個鏈接到Oracle的服務器。 – 2012-07-16 04:36:52

1

我有同樣的問題。我和微軟通了幾個小時的電話,但他們沒有解決方案。這些「連接超時」設置都沒有幫助我。

爲了解決這個問題,我創建了一個運行proc的DTS作業,它只更新一行,每列兩列的時間。然後我在SQL Server和Oracle之間建立一個複製,計劃每3分鐘複製一次從SQL到Oracle的單元更改。它保持連接活着!

相關問題