通過創(chuàng)建SQLServer 2005到 Oracle10g 的鏈接服務(wù)器實現(xiàn)異構(gòu)數(shù)據(jù)庫數(shù)據(jù)轉(zhuǎn)換方案

在圖1中選中“鏈接服務(wù)器”,右鍵選擇“新建鏈接服務(wù)器”,如圖2,配置相關(guān)參數(shù)。
2、配置相關(guān)參數(shù)
在“常規(guī)”選項中,填寫“鏈接服務(wù)器名稱”,訪問接口選中
“ Microsoft OLE DB Provider for Oracle”項。其中產(chǎn)品名稱、數(shù)據(jù)源、訪問接口字符串請?zhí)顚懪渲玫腛racle客戶端在本地配置的net服務(wù)名。如圖3所示。

在“安全性”項中,選中使用此安全上下文建立連接,填寫遠程登錄用戶和密碼,即登錄遠程Oracle服務(wù)器的用戶和密碼。如圖4所示。
3、異構(gòu)數(shù)據(jù)庫訪問語句格式比如我們建立了鏈接服務(wù)器ORADBCONN,而Oracle中在HRSOFT用戶下面建立了表WEBUSER,那么我們的SQL語句就是:
--清空Oracle表中的數(shù)據(jù)
DELETE FROM ORADBCONN..HRSOFT.WEBUSER
--將SQLServer中的數(shù)據(jù)寫到Oracle中
INSERT into ORADBCONN.. HRSOFT. WEBUSER
SELECT * FROM WEBUSER
如果報告成功,那么我們的數(shù)據(jù)就已經(jīng)寫入到Oracle中了。
用SELECT * FROM ORADBCONN..HRSOFT.WEBUSER
查看Oracle數(shù)據(jù)庫中是否已經(jīng)有數(shù)據(jù)了。
4、鏈接服務(wù)器應(yīng)用A、查詢Oracle數(shù)據(jù)表方式一(這種方式,當(dāng)Oracle與SQLServer的數(shù)據(jù)類型不一致時經(jīng)常報錯,且速度稍慢):
select * from [LINK2ORACLE]..[ORACLE_USER_NAME].TABLE_NAME;
我在執(zhí)行該語句經(jīng)常報類似錯誤信息:鏈接服務(wù)器 "LINK2ORACLE" 的 OLE DB 訪問接口 "MSDAORA" 為列提供的元數(shù)據(jù)不一致。對象 ""CMCC"."OS2_GIS_CELL"" 的列 "ISOPENED" (編譯時序號為 20)在編譯時有 130 的 "DBTYPE",但在運行時有 5。
B、查詢Oracle數(shù)據(jù)表方式二(經(jīng)試驗,這種方式使用起來很順暢,不報錯,且速度幾乎和在Oralce中一樣快):
select * from openquery(LINK2ORACLE,'select * from OracleUserName.TableName')
您可以把openquery()當(dāng)成表來使用。
C、舉個例子(將Oralce用戶HRSOFT下的用戶表WEBUSER導(dǎo)入到SQLServer2005數(shù)據(jù)庫中):
select * into OS_GIS_WEBUSER from openquery(LINK2ORACLE,'select * from HRSOFT. WEBUSER)
D、更便捷的方式:通過創(chuàng)建同義詞進行便捷查詢:
CREATE SYNONYM OS_GIS_CELL FOR [ORACLELK]..[CMCC].OS_GIS_CELL;
select * from os_gis_cell;
select * from os_gis_cell a where a.CellName is null;
注意:涉及 Oracle 部分的 SQL 語句,尤其是 [ORACLELINK]..[ORACLE_USER_NAME].TABLE_NAME 一定要大寫,否則會報類似錯誤:
消息 7314,級別 16,狀態(tài) 1,第 1 行
鏈接服務(wù)器 "ORACLELK" 的 OLE DB 訪問接口 "MSDAORA" 不包含表 ""CMCC"."OS2_gis_CELL""。該表不存在,或者當(dāng)前用戶沒有訪問該表的權(quán)限。
配置數(shù)據(jù)源:



工程INPLAN:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.2.6)(PORT=1521)))(CONNECT_DATA=(SID=sa)(SERVER=DEDICATED)))
ERP:
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP)(HOST = 192.168.3.25)(PORT = 1528)))(CONNECT_DATA =(SID= TJTEST)))
(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL = TCP)(HOST = 192.168.3.25)(PORT = 1528)))(CONNECT_DATA =(SID= TJTEST)))
新建作業(yè)里的代碼:
delete from XBLD_Information
INSERT INTO XBLD_Information(job_name, num_layers, JB_PP1, JB_PC1, JB_PP2, JB_PC2, JB_PP3, JB_PC3, PP_PP1, PP_PC1, PP_PP2, PP_PC2, PP_PP3, PP_PC3, PP_PP4,PP_PC4,BM)
select * from openquery(INPLAN,'
select mjs15.job_name, mjs15.num_layers,mjs1.MM1 JB_PP1,mjs1.MC1 JB_PC1,mjs2.MM2 JB_PP2,mjs2.MC2 JB_PC2,mjs3.MM3 JB_PP3,mjs3.MC3 JB_PC3,mjs11.MM1 PP_PP1,mjs11.MC1 PP_PC1,mjs12.MM2 PP_PP2,mjs12.MC2 PP_PC2,mjs13.MM3 PP_PP3,mjs13.MC3 PP_PC3,mjs14.MM4 PP_PP4,mjs14.MC4 PP_PC4,Substr(mjs15.job_name,5,2) BM
from
(select mjl.job_name,
mjl.num_pcbs,
mjl.num_arrays,
mjl.num_panles_,
mjl.num_layers,
substr(mjl.op_size_y_string_,instr(mjl.op_size_y_string_,''='')+1,length(mjl.op_size_y_string_)-instr(mjl.op_size_y_string_,''='')+1) y_size, --祇へ糴
substr(mjl.op_size_x_string_,instr(mjl.op_size_x_string_,''='')+1,length(mjl.op_size_x_string_)-instr(mjl.op_size_x_string_,''='')+1) x_size --祇へ
from tj.my_job_list mjl
) mjs15,
(select *
from
(select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),1,material_name) MM1,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),1,material_count) MC1
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Core''
)where MM1 is not null
) mjs1,
(select *
from
(select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),2,material_name) MM2,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),2,material_count)MC2
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Core''
) where MM2 is not null
) mjs2,
(select *
from
(select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),3,material_name) MM3,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),3,material_count)MC3
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Core''
) where MM3 is not null
) mjs3,
(select *
from
( select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),1,material_name) MM1,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),1,material_count) MC1
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Prepreg''
)where MM1 is not null
) mjs11,
(select *
from (
select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),2,material_name) MM2,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),2,material_count)MC2
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Prepreg''
)where MM2 is not null
) mjs12,
(select *
from
( select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),3,material_name) MM3,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),3,material_count)MC3
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Prepreg''
)
where MM3 is not null
) mjs13,
(select distinct *
from
( select mjs.job_name,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),4,material_name) MM4,
decode(DENSE_RANK() over( partition by job_name order by material_name,material_count),4,material_count)MC4
from tj.my_job_stackup_material_count mjs
where mjs.type_T=''Prepreg''
) where MM4 is not null
) mjs14
where mjs15.job_name=mjs1.job_name(+)
and mjs15.job_name=mjs2.job_name(+)
and mjs15.job_name=mjs3.job_name(+)
and mjs15.job_name=mjs11.job_name(+)
and mjs15.job_name=mjs12.job_name(+)
and mjs15.job_name=mjs13.job_name(+)
and mjs15.job_name=mjs14.job_name(+)
')
UPDATE XBLD_Information SET BM=b.Describe from XBLD_Information a, XBLD_BM b where a.bm=b.id
相關(guān)文章
SQLServer 查詢當(dāng)前服務(wù)器有多少連接請求的語句
有時DBA需要檢查當(dāng)前服務(wù)器有多少連接請求,以及連接請求的登錄名,客戶端版本,主機名,程序名等等之類的信息,我們就可以對服務(wù)器的連接狀況有所了解,防止不明用戶使用。2011-08-08
玩轉(zhuǎn)-SQL2005數(shù)據(jù)庫行列轉(zhuǎn)換
雖然開發(fā)過程中沒用過行列轉(zhuǎn)換,但是聽說面試時常常會遇到這個問題,以前在網(wǎng)上也看到過大神的例子,今天自己仔細的玩了下,希望和大家分享一下了2013-11-11
SQLServer 2005 控制用戶權(quán)限訪問表圖文教程
SQL Server權(quán)限管理很簡單的一小塊,有些地方并沒有深入理解和講述,只是希望對一些剛?cè)腴T的童鞋有幫助,其它大俠就當(dāng)是:我當(dāng)堂嚇一跳,然后得啖笑。2011-07-07
win2003 Server配置SQL Server 2005遠程連接的方法
這篇文章主要介紹了win2003 Server配置SQL Server 2005遠程連接的方法,需要的朋友可以參考下2015-01-01
在SQL Server 2005所有表中搜索某個指定列的方法
這篇文章主要介紹了在SQL Server 2005所有表中搜索某個指定列的方法,需要的朋友可以參考下2016-11-11
監(jiān)視SQLServer數(shù)據(jù)庫鏡像[圖文]
SQLServer2005以上版本提供了一個數(shù)據(jù)庫鏡像監(jiān)視器,不過打開它的方法比較特別。有了圖形界面以后,SQLServer數(shù)據(jù)庫鏡像的維護難度跟成本大大降低了。2009-05-05
SQLServer 2008中通過DBCC OPENTRAN和會話查詢事務(wù)
無論是有意無意,如果事務(wù)在數(shù)據(jù)庫中保持打開,則它會阻塞其他進程對修改后的數(shù)據(jù)進行操作。同樣,對事務(wù)日志進行備份也只會截斷不活動事務(wù)的那部分事務(wù)日志,所以打開的事務(wù)會導(dǎo)致日志變多(甚至達到物理限制),直到事務(wù)被提交或回滾。2011-05-05
Sql Server安裝出錯,安裝程序配置服務(wù)器失敗的解決方法小結(jié)
機子之前有裝了sql server 2000,而且可以正常使用,最近突然無法連接到本地數(shù)據(jù)庫,打算重裝,結(jié)果重裝時出現(xiàn)了無法安裝完畢的問題,一下總結(jié)了重裝時需要注意的問題,以及常見錯誤的解決方法2012-10-10

