在sql2008上面建立dblink
一.建立oracle的鏈接服務器
1.首先電腦上應該安裝有oracle的客戶端,並能連接到服務器
(因爲這裏是TIPTOP ERP系統+oracle數據庫,所以電腦上oracle的安裝就先忽略)
2.在sql server2008的Management Stadio 中——鏈接服務器——新建鏈接服務器
3.在新建對話框"常規"選項卡里面:
【鏈接服務器名字】:自己取一個,我這裏寫ERP
【訪問接口選擇】:Microsoft OLEDB Provider for Oracle 驅動
【產品名稱】:Oracle
【數據源】:寫上自己電腦上tnsnames.ora 文件中配置的服務名;我這裏是topprod
【訪問接口字符串】:user id=TEST;password=TEST(可以省略)
4.在新建對話框"安全性"選項卡里面,選擇安全性選項頁,
使用此安裝上下文建立連接:
【遠程登錄】:TEST
【使用密碼】:******
5.SQL的寫法有兩種
<1>使用T-SQL語法:
SELECT * FROM LNK1..用戶名.表名 --注意用戶名稱,表名稱要大寫
EX:SELECT * FROM ERP..SH_CCT.TC_QCS_FILE
<2>使用PLSQL語法:
select * from openquery(LNK1,'select * from 用戶名.表名')
EX:SELECT * FROM openquery(ERP,'SELECT * FROM SH_CCT.TC_QCS_FILE')
第二種訪問方式比第一種約快50%;第二種訪問方式跟直連ORACLE的速度相當;
第一種訪問方式可能會導致一些意外錯誤,如:該表不存在,或者當前用戶沒有訪問該表的權限。
如果需要訪問的column中使用沒有精度的數據類型,這兩種查詢方式都可能會報錯,這是ORACLE的BUG,
無法修正,只能通過查詢語句的特殊處理規避這一問題:
OLEDB 提供程序 'OraOLEDB.Oracle' 爲列提供的元數據不一致。執行時更改了元數據信息。
查詢:SELECT * FROM OPENQUERY(TEST, 'SELECT * FROM tableName')
寫入:INSERT INTO OPENQUERY(TEST, 'SELECT * FROM tableName WHERE 1>1') VALUES(3,6,'ANDY')
更新:UPDATE OPENQUERY(TEST, 'SELECT * FROM tableName') SET role_id = 'ForTest' WHERE id = 3
刪除:DELETE OPENQUERY(TEST, 'SELECT * FROM tableName') WHERE id IN (1,3)
二.建立SQl Server的鏈接服務器(建立方法同上)
select * from [192.168.1.14].[EFNETDB].[dbo].py05b_shya
Select * From [鏈接服務器名].[遠程數據庫名].[所有者].[表名]
Select * from [127.0.0.1].[cntvs].[dbo].[t_class]
********************************************************************************************************************************************
==== Till good is better, but better best
====“我的努力不會停止,敬請期待吧!”My trying hard will go on!Please wait and see!
********************************************************************************************************************************************