在64位SQL Server中創建Oracle的連結伺服器

當我們同時使用SQL Server和Oracle來存儲數據時,經常會用到跨庫查詢。為了方便使用跨庫查詢,一個最好的辦法就是通過創建連結伺服器來實現。既可以在SQL Server中創建Oracle的連結伺服器,也可以在Oracle中創建SQL Server的連結伺服器。本文主要講述如何在SQL Server中創建Oracle的連結伺服器,可以通過圖形界面和命令兩種方式來創建。

工具/原料

Microsoft Windows Server 2003 R2 Enterprise x64 Edition Service Pack2

Microsoft SQL Server 2005 Standard Edition x64

Oracle Provider for OLE DB

0. 前期準備工作——安裝驅動

如果用32位win2003作業系統,會有系統自帶的Microsoft OLE DB Provider for Oracle驅動,因此不需要做額外的準備工作,但如果使用的是64位系統,那麼這個驅動是沒有的,並且微軟也不提供這個驅動的64位版本,因此,此時只能使用Oracle提供的Oracle Provider for OLE DB這個驅動。

那麼如何安裝這個驅動呢?安裝一個完整的Oracle11gR2程序也是一個有效的方法,但這個64位版本的安裝包有2個多G,相當龐大,如果僅僅是為了建立連結伺服器,完全沒必要裝這麼個龐然大物。其實我們只需要到Oracle官網上下載ODAC壓縮包即可。

至於如何安裝ODAC,不是本文的重點,大家可以百度搜尋我的另一篇文章——《Oracle數據訪問組件ODAC的安裝方法》。

1. 通過圖形界面創建Oracle的連結伺服器

打開Microsoft SQL Server Management Studio並以sa身份登錄,在左側的「對象資源管理器」窗口中展開「伺服器對象」節點,在其下的「連結伺服器」節點上右鍵選擇「新建連結伺服器...」,如圖

在彈出的「新建連結伺服器」對話框中,按照圖示填寫,具體填寫項目說明如下:

* 連結伺服器:這是連結伺服器的別名,名字可以由你自己隨意決定

* 伺服器類型選擇「其他數據源」

* 訪問接口:一定要選擇「Oracle Provider for OLE DB」。如果是32位系統,還可以選擇「Microsoft OLE DB Provider for Oracle」,但64位系統就只能選擇前者

* 產品名稱:一定是「Oracle」,這是固定寫法,只要是連結Oracle資料庫,都得這麼寫

* 數據源:是你要連結的Oracle資料庫的庫名。在我的Oracle資料庫軟體里,建立了一個名為ora的資料庫,我想連結到這個名為ora的資料庫,所以我這裡的「數據源」填的就是「ora」,大家可以根據自己的實際情況來填寫。

填好以後不要急著去點擊「確定」按鈕。

再點擊左側「選項頁」里的「安全性」,右邊選擇最下面的「使用此安全上下文建立連接」,然後在下面輸入連接到ora(根據自己的實際情況來更改)資料庫的用戶名和密碼。再點擊「確認」按鈕,至此,一個明文ORA_TEST的連結伺服器就建好了。

2. 通過命令來創建Oracle的連結伺服器

把下面兩條命令語句補全,然後在SQL Server中執行即可創建成功:

EXEC master.dbo.sp_addlinkedserver @server = N'別名', @srvproduct=N'庫名',@provider=N'MSDAORA', @datasrc=N'TNS名'

EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'別名', @locallogin = NULL ,@useself = N'False', @rmtuser = N'模式名', @rmtpassword = N'密碼'

3. 測試查詢Oracle資料庫

select * from openquery(ORA_TEST, 'SELECT * FROM tab')

4. 可能遇到的問題

在測試查詢Oracle資料庫時,有可能會遇到無法創建「OraOLEDB.Oracle」的實例的錯誤。這個問題可以在里搜尋我的另一篇文章——《無法創建「OraOLEDB.Oracle」的實例的解決辦法》。

注意事項

本文的成功是建立在Oracle資料庫驅動的成功安裝和tnsnames.ora文件的正確配置的基礎之上的,對這一點如果有疑惑,大家可以百度搜尋我的另一篇文章——《Oracle數據訪問組件ODAC的安裝方法》。

在測試查詢Oracle資料庫時,有可能會遇到無法創建「OraOLEDB.Oracle」的實例的錯誤。這個問題可以在里搜尋我的另一篇文章——《無法創建「OraOLEDB.Oracle」的實例的解決辦法》。

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場