SQLServer連接服務器至Oracle

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服務器上的;

相關文章
相關標籤/搜索