對接問題描述:不知道正式庫oracle數據庫賬戶密碼,對方願意在對方的客戶端上輸入賬號和密碼,但不告訴我們
解決方案:使用一台sql server作為中間服務器,可以通過轉存數據到sql server,再從sql server同步數據到我方數據庫。在sql server 上建立一個鏈接服務器連接Oracle,通過openquery查詢oracle數據
具體實施方案:
在sql server創建鏈接服務器,通過鏈接服務器查詢oracle數據,鏈接服務器對方設置,我方不知道賬戶和密碼。
創建連接服務器方案如下圖:
1、 確保pl/sql能夠登錄上oracle,查看pl/sql的聯系信息文件tnsnames.ora,找到數據庫連接相關信息,如下圖:
如圖,CUNJK即數據庫名字,需要被sql server鏈接服務器使用
2、 登錄sql server,創建鏈接服務器,找到鏈接服務器文職,服務器對象->鏈接服務器,步驟如下圖
訪問接口調節oracle的訪問接口,服務器對象->鏈接服務器->訪問接口,右鍵OraCLEDB.Oracle打開屬性,勾選允許進程內
3、 創建鏈接服務器
右鍵鏈接服務器->新建鏈接服務器,填寫創建服務器名字,選擇訪問接口為oracle,產品名稱為Oracle,數據源請填寫與pl/sql鏈接信息相同,
安全性登錄,如下圖:
輸入Oracle的賬戶和密碼,密碼隱藏,我方不會知曉,
服務器選項配置,如下圖:
調節RPC為Ture,RPC Out為True
確定完成。
4、 建立查詢,測試
查詢鏈接服務器需要使用OPENQUERY函數進行查詢,sql請參考SQL server的語法原則,示例如下:
SELECT top 1 * FROM OPENQUERY(CUNJK,'select * from cjk_account') a;
方案總結:能通過sql server查詢數據,我方即可通過同步程序連接sql sever進行數據同步
鏈接服務器查詢 OPENQUERY
使用sql server鏈接服務器查詢oracle ,會先通過查詢sql 查詢oracle,緩存到sql server 中,再通過sql server 查詢,查詢會較慢
OpenQuery 是SQL Server用來與其他Server交互的一種技術,通過OpenQuery,SQL Server 可以直接訪問其他數據庫資源。而其他數據庫在OpenQuery 表達式中是以Linked Server 存在的
在OpenQuery內部添加查詢條件,比在外面添加查詢速度相對較快,在內部添加條件’’(單引號字符串條件)會有限制,’’(單引號必須進行轉義),兩個雙引號,代表一個雙引號,示例如下:
Select from OPENQUERY(R,'select * from cjk_account where createdate < ''2019-03-17 08:52:55'' ')
如果對openquery查詢還沒有弄明白,可參考這篇博文:http://www.cnblogs.com/Dannier/archive/2011/09/21/openquery.html