1. 我方服務器必須安裝msdtc服務,並進行相應配置。 html
2. 我方服務器必須安裝oracle client,這個要對應中心站oracle版本的客戶端。sql
3. 我方服務器必須安裝Oracle Services For Microsoft Transaction Server [版本]數據庫
Oracle Provider for OLE DB [版本]windows
這2個能夠在Oracle官方網站下載安全
[http://www.oracle.com/technology/software/tech/windows/odpnet/index.html]服務器
此文件爲分佈式事務必須的插件。oracle
4. Oracle給咱們分配一個Oracle的用戶名和密碼,具備寫入/讀取表的權限。分佈式
5. 在我方系統的SQLServer服務器上創建連接服務器,指向Oracle數據庫,連接服務器訪問接口必須爲[Oracle Provider for OLE DB](不然沒法啓動分佈式事務)。ide
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表的實現方法,供您參考。
1、配置
方法一:經過oracle的sql*net客戶端與Oracle數據庫直接相連
一、在SQL SERVER所在服務器上安裝Oracle客戶端,並配置好客戶端,能用sqlplus工具連通Oracle數據庫二、打開ENTERPRISE MANAGER,安全性>連接服務器,右鍵選擇「新建連接服務器」三、「連接服務器」->ORCL (爲連接服務器取名字)選擇「其它數據源」,在「提供程序名稱」 欄中選擇「Microsoft OLE DB Providerfor Oracle」四、在「產品名稱」->「Oracle」 「數據源」->「ora9i」(此處填tnsnames.ora中的服務名)在「提供程序字符串」->「MADAORA」五、切換到「安全性」一頁中,在」本地登陸「中加入oracle數據庫的用戶名,選擇「用此安全上下文進行」,填入oracle數據庫登陸的用戶和密碼六、切換到「服務器選項」一頁中,將全部選項都選上七、最後點擊「肯定」完成設置八、在查詢分析器中使用建立好的連接服務器ORCL
SELECT * FROM ORCL..SMS.EMP其中ORCL是連接服務器名,SMS是Oracle數據庫的用戶名,EMP是表名
方法二:經過ODBC與Oracle數據庫相連
一、在SQL SERVER所在服務器上安裝Oracle客戶端,並配置好客戶端,能用sqlplus工具連通Oracle數據庫管理工具>數據源中建立一個系統DSN二、打開ENTERPRISE MANAGER,安全性>連接服務器,右鍵選擇「新建連接服務器」三、「連接服務器」->ORCL (爲連接服務器取名字)選擇「其它數據源」,在「提供程序名稱」 欄中選擇「Microsoft OLE DB Providerfor ODBC」四、在「產品名稱」->「Oracle」 「數據源」->「ora9i」(此處填建立的系統DSN名)在「提供程序字符串」->「MADAORA」五、切換到「安全性」一頁中,在」本地登陸「中加入oracle數據庫的用戶名,選擇「用此安全上下文進行」,填入oracle數據庫登陸的用戶和密碼六、切換到「服務器選項」一頁中,將全部選項都選上七、最後點擊「肯定」完成設置八、在查詢分析器中使用建立好的連接服務器ORCL SELECT * FROM ORCL..SMS.EMP 其中ORCL是連接服務器名,SMS是Oracle數據庫的用戶名,EMP是表名
2、關於查詢中不能使用到索引的問題
在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服務器上的;