一般我們使用C#開發時,往往選擇SQL Server數據庫與之配合使用,因為使用起來最方便。
但如果我們需要和第三方廠商的軟件進行數據交互時,就有可能碰到對方使用Oracle數據庫,並且在某些特定情況下還只能把數據交互的接口放到Oracle上,這時候我們就需要訪問Oracle數據庫了。
針對這種情況,我們有兩種訪問方案:
- 直接在軟件中增加對Oracle數據庫的讀寫操作
- 在SQL Server數據庫中建立鏈接服務器,並通過同義詞把接口表當做本地表來訪問
由於訪問Oracle時必須安裝Oracle客戶端,對於方案1來說,不僅需要針對Oracle開發對應的訪問代碼,還需要在每台安裝軟件的電腦上裝上Oracle客戶端,這對軟件的部署帶來了很大的壓力(B/S架構除外);而方案2則僅僅需要在SQL Server所在的電腦上安裝Oracle客戶端即可。
而對於訪問Oracle數據庫的性能和靈活性來說,方案1既可以較快的速度訪問,也能使用事務、內置函數等一系列Oracle所擁有的功能;而方案2的訪問速度很慢,也不能使用事務。
作為數據交互接口,我們估計其訪問的數據量很小,對性能的要求也不高,所用的操作也就普通的增刪改查,不會用到Oracle特有的東西。綜合上面的對比分析,再考慮效率,覺得方案2比較適合。
下面以方案2為例說明一下配置的過程:
1、安裝Oracle客戶端
先到Oracle的官網上下載適用於Windows的Oracle Data Access Components(ODAC),這里使用ODAC112030Xcopy_x64.zip(如果系統不是64位的請選擇32位的版本,如ODAC112030Xcopy_32bit.zip)。
解壓並在命令行界面進入解壓文件夾,運行“install.bat oledb c:\oracle odac”安裝(我們只需要oledb的驅動,並把對應的文件安裝到C盤oracle目錄下。注意其中的空格)。
在環境變量中為Path添加“C:\oracle;C:\oracle\bin;”到開頭。
2、在SQL Server添加鏈接服務器
在SQL Server Management Studio中連接到數據庫,並在其下的“服務器對象”-“鏈接服務器”,右鍵選擇“新建鏈接服務器”。
在常規中填入鏈接服務器名稱:SWAPDB、訪問接口:Oracle Provider for OLE DB、產品名稱:oracle、數據源:(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.2)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = ORACLEDB)))
其中鏈接服務器名稱在建立同義詞的時候用到,產品名稱可以隨便填,數據源中的HOST和SERVICE_NAME改為自己所使用Oracle接口的對應地址與數據庫名稱。
在安全性中選擇“使用此安全上下文建立連接”,填入Oracle數據庫所用的登陸賬號/密碼,點擊“確定”建立鏈接。
在“服務器對象”-“鏈接服務器”-“訪問接口”-“OraOLEDB.Oracle”,右鍵選擇“屬性”。
啟用“允許進程內”的接口選項。
建立鏈接服務器后可以通過“服務器對象”-“鏈接服務器”-“SWAPDB”,右鍵“測試連接”查看是否成功。
3、在數據庫中創建同義詞
在對應數據庫的查詢窗口中執行“CREATE SYNONYM [dbo].[T_User] FOR [SWAPDB]..[ORAUSER].[T_User]”,這里只能用SQL語句建立同義詞,使用圖形界面將出錯,其中T_User是表名稱,SWAPDB是剛才創建的鏈接服務器名稱,ORAUSER是Oracle數據庫的用戶。
配置完成后,我們就可以在SQL Server中直接使用“select * from T_User”訪問遠程Oracle的接口表了