在SQL SERVER中訪問ORACLE表的方法
在SQL SERVER中,能否訪問ORACLE表,進(jìn)行查詢操作呢?答案無疑是可以的,下面就為你介紹在SQL SERVER中訪問ORACLE表的實(shí)現(xiàn)方法,供您參考。
一、配置
方法一:通過oracle的sql*net客戶端與Oracle數(shù)據(jù)庫直接相連
1、在SQL SERVER所在服務(wù)器上安裝Oracle客戶端,并配置好客戶端,能用sqlplus
工具連通Oracle數(shù)據(jù)庫
2、打開ENTERPRISE MANAGER,安全性>鏈接服務(wù)器,右鍵選擇“新建鏈接服務(wù)器”
3、“鏈接服務(wù)器”->ORCL (為鏈接服務(wù)器取名字)
選擇“其它數(shù)據(jù)源”,在“提供程序名稱” 欄中選擇“Microsoft OLE DB Provider
for Oracle”
4、在“產(chǎn)品名稱”->“Oracle” “數(shù)據(jù)源”->“ora9i”(此處填tnsnames.ora中的服務(wù)名)
在“提供程序字符串”->“MADAORA”
5、切換到“安全性”一頁中,在”本地登錄“中加入oracle數(shù)據(jù)庫的用戶名,選擇“用此安全
上下文進(jìn)行”,填入oracle數(shù)據(jù)庫登錄的用戶和密碼
6、切換到“服務(wù)器選項(xiàng)”一頁中,將所有選項(xiàng)都選上
7、最后點(diǎn)擊“確定”完成設(shè)置
8、在查詢分析器中使用創(chuàng)建好的鏈接服務(wù)器ORCL
SELECT * FROM ORCL..SMS.EMP
其中ORCL是鏈接服務(wù)器名,SMS是Oracle數(shù)據(jù)庫的用戶名,EMP是表名
方法二:通過ODBC與Oracle數(shù)據(jù)庫相連
1、在SQL SERVER所在服務(wù)器上安裝Oracle客戶端,并配置好客戶端,能用sqlplus
工具連通Oracle數(shù)據(jù)庫
管理工具>數(shù)據(jù)源中創(chuàng)建一個系統(tǒng)DSN
2、打開ENTERPRISE MANAGER,安全性>鏈接服務(wù)器,右鍵選擇“新建鏈接服務(wù)器”
3、“鏈接服務(wù)器”->ORCL (為鏈接服務(wù)器取名字)
選擇“其它數(shù)據(jù)源”,在“提供程序名稱” 欄中選擇“Microsoft OLE DB Provider
for ODBC”
4、在“產(chǎn)品名稱”->“Oracle” “數(shù)據(jù)源”->“ora9i”(此處填創(chuàng)建的系統(tǒng)DSN名)
在“提供程序字符串”->“MADAORA”
5、切換到“安全性”一頁中,在”本地登錄“中加入oracle數(shù)據(jù)庫的用戶名,選擇“用此安全
上下文進(jìn)行”,填入oracle數(shù)據(jù)庫登錄的用戶和密碼
6、切換到“服務(wù)器選項(xiàng)”一頁中,將所有選項(xiàng)都選上
7、最后點(diǎn)擊“確定”完成設(shè)置
8、在查詢分析器中使用創(chuàng)建好的鏈接服務(wù)器ORCL
SELECT * FROM ORCL..SMS.EMP
其中ORCL是鏈接服務(wù)器名,SMS是Oracle數(shù)據(jù)庫的用戶名,EMP是表名
二、關(guān)于查詢中不能使用到索引的問題
在SQLSERVER中查詢一個oracles上的表:
SELECT * FROM ORCL..SMS.EMP WHERE NAME = 'TOM'
EMP有幾百萬數(shù)據(jù),并且在NAME上建了索引,發(fā)現(xiàn)查詢非常慢,通過查詢oracle上的
視圖v$sqlarea,發(fā)現(xiàn)WHERE條件根本沒有傳到oracle服務(wù)器上,后來通過幾次測試
后總算解決了該問題,總結(jié)如下:
當(dāng)使用鏈接服務(wù)器訪問ORACLE表,查詢oracle的表時,where子句中字段如果是number類型,則該
where條件不會傳到oracle服務(wù)器;
如果是char類型,則可以傳到oracle服務(wù)器上,但是必須在創(chuàng)建鏈接服務(wù)器時一定要
把選項(xiàng)"與排序規(guī)則兼容"選上,否則也不會傳到oracle服務(wù)器上的;
【編輯推薦】
Oracle內(nèi)存結(jié)構(gòu)--SGA