在SQL Server中,能否訪問Oracle表,進行查詢操作呢?答案無疑是可以的,下面就為你介紹在SQL Server中訪問Oracle表的實現方法,供您參考。
一、配置
方法一:通過oracle的sql*net客戶端與Oracle數據庫直接相連
1、在SQL Server所在服務器上安裝Oracle客戶端,並配置好客戶端,能用sqlplus
工具連通Oracle數據庫
2、打開ENTERPRISE MANAGER,安全性>鏈接服務器,右鍵選擇“新建鏈接服務器”
3、“鏈接服務器”->ORCL (為鏈接服務器取名字)
選擇“其它數據源”,在“提供程序名稱” 欄中選擇“Microsoft OLE DB Provider
for 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數據庫
管理工具>數據源中創建一個系統DSN
2、打開ENTERPRISE MANAGER,安全性>鏈接服務器,右鍵選擇“新建鏈接服務器”
3、“鏈接服務器”->ORCL (為鏈接服務器取名字)
選擇“其它數據源”,在“提供程序名稱” 欄中選擇“Microsoft OLE DB Provider
for 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服務器上的;