2013年2月5日 星期二

[MS SQL]Create DB Link to Oracle









人家都說事情絕不像憨人所想的那樣簡單,

以前建起對MS SQL的DB LINK都得心應手,

今天因為需求要建一條對Oracle的DB LINK就碰釘子了。


先來看看這則錯誤訊息,

標題: Microsoft SQL Server Management Studio
------------------------------

已建立連結的伺服器,但連接測試失敗。您要保留連結的伺服器嗎?
------------------------------
其他資訊:

執行 Transact-SQL 陳述式或批次時發生例外狀況。 (Microsoft.SqlServer.ConnectionInfo)
------------------------------
無法初始化連結伺服器 "CDCARM_BO" 的 OLE DB 提供者 "OraOLEDB.Oracle" 的資料來源物件。
連結伺服器 "CDCARM_BO" 的 OLE DB 提供者 "OraOLEDB.Oracle" 傳回訊息 "ORA-12514: TNS:listener does not currently know of service requested in connect descriptor"。 (Microsoft SQL Server, 錯誤: 7303)


話說小弟按照爬MSDN的文章還建立對Oracle的DB LINK,

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

但細細品嘗這篇文章後,建起來遇到一些問題,

解決後想說發篇文章與和我一樣不熟悉作法的朋友分享一下。

上述那篇MSDN中其實就有提到,

在建立對Oracle的DB LINK前,要先安裝Oracle Clint,

裝上後除了有些工具可以用,最重要的也就是要取得Provider,

因為前置步驟比較繁瑣,加上主要是針對上述錯誤做偵錯分享,

因此有關第一不安裝Oracle Client取得Provider的方法,

小弟我找了幾篇文章給各位參考一下,

<使用連結伺服器(Linked Server) 連接到 Oracle>

<SQL Server x64建立Oracle Linked Server筆記>

<Oracle Client 11g安裝經驗- The blog of typewriter職人- 點部落>


OK,回到這次碰到的錯誤,

其實在MSDN那篇教學文中雖有提到要安裝Oracle Clinet,

但下一步就進到MS SQL上建立DB Link的步驟與方式,

按照步驟進行完成後測試連結就跳出這個錯誤,

抓了一下關鍵字,

TNS:listener does not currently know of service requested in connect descriptor"。

這時就想到錯誤的地方了,原來是忘記在Oracle上把TNS建立起來

這件事情並未在MSDN那篇文章提到。

要建立TNS有幾種方式,以下工具在安裝完Oracle Clint後就有了。


1.使用Enterprise Manager 主控台(安裝Oracle Clinet就有)



















Databases上右鍵選擇Add Database To Tree...就可開始設定,

























接著依照要連結的Oracle資料庫資訊把連結建起來,

其中特別說明一下,

之後建DB Link的資料來源就是填寫Net Service Name。

這個名稱可以自行命名,預設是SID_Hostnmae。


2.使用Net Manager























利用前一個方法建立後在Net Manager的服務名稱下就會出現,

但也可以一開始就使用Net Manager建立,道理相同。

選擇左側服務名稱後點選號,接著就按照步驟走,

Step 1 輸入Net Service Name















Step 2 選擇網路協定















Step 3 輸入主機名稱(Hostname)

Step 4 最後輸入SID後下一步測試連接後完成
















3.修改tnsnames.ora

如果大家有先測試過1和2的方法,

就會發現我們所建立的連線訊息都會被寫進tnsname.ora

可以在oracle\product\10.2.0\client_1\NETWORK\ADMIN下找到他,

因此你也可以直接把Script寫進去。

Net Service Name =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = Hostname)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = SID)
    )
  )

了解完上述方法後在這邊補充一下,

方法1其實是透過加入Databases的方式協助建立TNS,

比較像是小撇步,因此比較常見使用法2或法3建立。


建立完TNS後就可以來設定DB Link了(終於...)

如果上述都建立好,那重點就是把Net Servie Name記下來就好了,

























連結的伺服器:可以自行取名

提供者:Oracle Provider for OLE DB

產品名稱:Oracle(可自行填寫)

資料來源:Net Servie Name

提供者名字:自行填寫


完成。

沒有留言:

張貼留言