SQLServer链接服务器至Oracle
1.?????????我方服務器必須安裝msdtc服務,并進行相應配置。
2.?????????我方服務器必須安裝oracle?client,這個要對應中心站oracle版本的客戶端。
3.?????????我方服務器必須安裝Oracle?Services?For?Microsoft?Transaction?Server?[版本]
???Oracle?Provider?for?OLE?DB?[版本]
這2個可以在Oracle官方網站下載
[http://www.oracle.com/technology/software/tech/windows/odpnet/index.html]
此文件為分布式事務必須的插件。
4.?????????Oracle給我們分配一個Oracle的用戶名和密碼,具有寫入/讀取表的權限。
5.?????????在我方系統的SQLServer服務器上建立鏈接服務器,指向Oracle數據庫,鏈接服務器訪問接口必須為[Oracle?Provider?for?OLE?DB](否則無法啟動分布式事務)。
?
1.?????????在寫存儲過程向oracle數據庫中?insert、delete、update的時候,一定要加上
SET?XACT_ABORT?ON
此為開啟鑲嵌事務標志,否則分布式事務會失敗。
2.?????????對于從oracle或sqlserver中select數據的時候沒有必要加入事務范圍內,會鎖表浪費時間。
3.?????????查詢語句格式為:
SELECT?*?FROM?openquery(ORA_DBENSIS,?'select?ID?from?TEST_TRANS')
或者
SELECT?*?FROM?ORA_DATABASE..TEST_USER.TEST_TRANS
用戶名TEST_USER、表名TEST_TRANS必須大寫
4.?????????插入語句格式為:
INSERT?openquery(ORAENSIS,?'select?ID?from?TEST_TRANS?where?1=0')?
values?(1)
在SQL?SERVER中訪問ORACLE表的方法在SQL?SERVER中,能否訪問ORACLE表,進行查詢操作呢?答案無疑是可以的,下面就為你介紹在SQL?SERVER中訪問ORACLE表的實現方法,供您參考。
一、配置
方法一:通過oracle的sql*net客戶端與Oracle數據庫直接相連
1、在SQL?SERVER所在服務器上安裝Oracle客戶端,并配置好客戶端,能用sqlplus工具連通Oracle數據庫2、打開ENTERPRISE?MANAGER,安全性>鏈接服務器,右鍵選擇“新建鏈接服務器”3、“鏈接服務器”->ORCL?(為鏈接服務器取名字)選擇“其它數據源”,在“提供程序名稱”?欄中選擇“Microsoft?OLE?DB?Providerfor?Oracle”4、在“產品名稱”->“Oracle”??“數據源”->“ora9i”(此處填tnsnames.ora中的服務名)在“提供程序字符串”->“MADAORA”5、切換到“安全性”一頁中,在”本地登錄“中加入oracle數據庫的用戶名,選擇“用此安全上下文進行”,填入oracle數據庫登錄的用戶和密碼6、切換到“服務器選項”一頁中,將所有選項都選上7、最后點擊“確定”完成設置8、在查詢分析器中使用創建好的鏈接服務器ORCL
SELECT?*?FROM?ORCL..SMS.EMP其中ORCL是鏈接服務器名,SMS是Oracle數據庫的用戶名,EMP是表名
方法二:通過ODBC與Oracle數據庫相連
1、在SQL?SERVER所在服務器上安裝Oracle客戶端,并配置好客戶端,能用sqlplus工具連通Oracle數據庫管理工具>數據源中創建一個系統DSN2、打開ENTERPRISE?MANAGER,安全性>鏈接服務器,右鍵選擇“新建鏈接服務器”3、“鏈接服務器”->ORCL?(為鏈接服務器取名字)選擇“其它數據源”,在“提供程序名稱”?欄中選擇“Microsoft?OLE?DB?Providerfor?ODBC”4、在“產品名稱”->“Oracle”??“數據源”->“ora9i”(此處填創建的系統DSN名)在“提供程序字符串”->“MADAORA”5、切換到“安全性”一頁中,在”本地登錄“中加入oracle數據庫的用戶名,選擇“用此安全上下文進行”,填入oracle數據庫登錄的用戶和密碼6、切換到“服務器選項”一頁中,將所有選項都選上7、最后點擊“確定”完成設置8、在查詢分析器中使用創建好的鏈接服務器ORCL?SELECT?*?FROM?ORCL..SMS.EMP?其中ORCL是鏈接服務器名,SMS是Oracle數據庫的用戶名,EMP是表名
二、關于查詢中不能使用到索引的問題
在SQLSERVER中查詢一個oracles上的表:SELECT?*?FROM?ORCL..SMS.EMP?WHERE?NAME?=?'TOM'EMP有幾百萬數據,并且在NAME上建了索引,發現查詢非常慢,通過查詢oracle上的視圖v$sqlarea,發現WHERE條件根本沒有傳到oracle服務器上,后來通過幾次測試后總算解決了該問題,總結如下:
當使用鏈接服務器訪問ORACLE表,查詢oracle的表時,where子句中字段如果是number類型,則該where條件不會傳到oracle服務器;
如果是char類型,則可以傳到oracle服務器上,但是必須在創建鏈接服務器時一定要把選項"與排序規則兼容"選上,否則也不會傳到oracle服務器上的;
轉載于:https://www.cnblogs.com/tanbin1766/p/3147997.html
總結
以上是生活随笔為你收集整理的SQLServer链接服务器至Oracle的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法,俄罗斯方块
- 下一篇: 一种父线程阻塞等待子线程的有效方法