SQL Server2012創建連接服務器到ORACLE11G


做ETL,肯定少不了經常會從不同的數據庫直接進行數據的操作,為了更好的進行跨庫操作,SQL SERVER 2012擁有LinkedServer功能。前段時間寫了個SQL SERVER同種數據庫直接的鏈接數據庫的鏈接,具體請參考:http://blog.csdn.net/waterxcfg304/article/details/42004753

 

 

下面我來介紹下如何通過SQL SERVER 2012來建立ORACLE11G的鏈接服務器。

一,創建鏈接服務

1, 創建鏈接服務器之前,一定要確保你的SQL SERVER服務器上有ORACLE的客戶端程序或者安裝了ORACLE數據庫服務器。

下圖可以看出我的SQL SERVER服務器上是有ORACLE11G的驅動程序的。

 

 

二,通過圖形界面建立鏈接服務器

需要填寫的信息:

1, 鏈接服務器:ORACLE11G,這個是隨便寫的

2, 服務器類型:選擇ORACLEProvider for OLE DB

3, 產品名稱: 寫 ORACLE,一般都寫這個

4, 數據源:ORCL 這ORCL不是隨便寫的,一定是tnsnames.ora里的服務名,還要注意listener的配置。

 

下面是我tnsnames.ora里的配置信息:

 

ORCL =

 (DESCRIPTION =

   (ADDRESS = (PROTOCOL = TCP)(HOST =R9HDET7.vscsh.com)(PORT = 1521))

   (CONNECT_DATA =

     (SERVER = DEDICATED)

     (SERVICE_NAME = ORCL)

   )

 )

 

 

下面是我的listener.ora的配置:

SID_LIST_LISTENER=

 (SID_LIST =

     (SID_DESC =

       (SID_NAME = CLRExtProc)

       (ORACLE_HOME =D:\oracle11g\app\product\11.2.0\dbhome_1)

       (PROGRAM = extproc)

       (ENVS ="EXTPROC_DLLS=ONLY:D:\oracle11g\app\product\11.2.0\dbhome_1\bin\oraclr11.dll")

     )

 

     (SID_DESC =

        (GLOBAL_DBNAME =orcl)

        (ORACLE_HOME =D:\oracle11g\app\product\11.2.0\dbhome_1)

        (SID_NAME =orcl)

     )

))

 

 

 

LISTENER =

 (DESCRIPTION_LIST =

   (DESCRIPTION =

     (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))

     (ADDRESS = (PROTOCOL = TCP)(HOST =R9HDET7.vscsh.com)(PORT = 1521))

   )

 )

 

 

 

三,鏈接服務器安全性配置

1,選擇—〉使用此安全上下文建立鏈接,輸入登錄ORACLE數據庫的用戶名和密碼

 

 

2,點擊[確定],出現如下的錯誤。

 

 

 

四,解決[無法創建鏈接服務器“ORACLE11G”的 OLE DB 訪問接口“OraOLEDB.Oracle”的實例。 (.NetSqlClient Data Provider)]的錯誤

這個問題一般是由於注冊表中缺少相關信息造成的,我們只需要補全這部分信息即可解決。

 

解決方法如下:

1, 打開“運行”窗口,輸入“regedit”,回車。

2, HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MicrosoftSQLServer\MSSQL11.MSSQLSERVER\Providers

在Providers下面一般來說是看不到OraOLEDB.Oracle這一項的,於是新建這一項。

在Providers上面右鍵選擇New -> Key,把新增加的項改名為“OraOLEDB.Oracle”

 

 

 

3, 為“OraOLEDB.Oracle”這個鍵新增一個DWORD Value,把名字改為“AllowInProcess”

4, 為“OraOLEDB.Oracle”這個鍵新增一個DWORDValue,把名字改為“AllowInProcess”

5, 把“AllowInProcess”的值改為“00000001”

 

 

6,改好后的效果如圖。修改即刻生效,現在就可以再去訪問鏈接服務器上的Oracle數據庫了。

 

 

 

7,但是這個時候我再次做鏈接服務器的時候,還是出現了上面同樣的錯誤提示如下:

 

 

 

 

 

8,百思考不知道原因啊??突然我發現如下:鏈接服務器—〉訪問接口—〉OraOLEDB.Oracle—〉允許進程內沒有勾上,但是我想上面的配置4里已經有(為“OraOLEDB.Oracle”這個鍵新增一個DWORD Value,把名字改為“AllowInProcess”),不知道為什么不起作用?????,那好吧,我只好手動的勾上了。

 

 

 

7, 手動勾上允許進程內

 

 

 

8, 再次測試是否連通

 

 

 

 

 

從上面的這個圖可以看出,已經鏈接成功,SQL SERVER2012和ORACLE11G服務器之間的鏈接服務器已經建立成功。

 

 

 

五,下面我來測試如何在SQL SERVER2012里通過上面建立的鏈接服務器查詢ORACLE11G里的表數據。

1, 在ORACLE數據庫里建立一個測試表

 

 

2, 我用OPENQUERY來查詢ORACLE數據庫里的數據如下:

select * from openquery(ORACLE11G,'SELECT * FROM TESTLINKED_SERVER')

 

 

 

從上面可以看出,我查詢到了我再ORACLE數據庫里剛才建立的表和表數據信息。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM