任旭升
(陜西法士特集團(tuán)信息中心,陜西 西安 710077)
?
基于DBLINK的系統(tǒng)集成問(wèn)題解析
任旭升
(陜西法士特集團(tuán)信息中心,陜西 西安 710077)
通過(guò)作者在多個(gè)系統(tǒng)集成項(xiàng)目中的實(shí)際經(jīng)歷,總結(jié)并梳理了在基于ORACLE數(shù)據(jù)庫(kù)的底層數(shù)據(jù)同步過(guò)程對(duì)DBLINK的使用中所遇到的問(wèn)題,剖析了原因,并給出了具體的解決方法,對(duì)于有類似多數(shù)據(jù)庫(kù)集成工作場(chǎng)景的從業(yè)人員,具有一定的借鑒和指導(dǎo)意義。
數(shù)據(jù)庫(kù);ORACLE;DATABASE LINK
隨著企業(yè)信息化進(jìn)程的進(jìn)一步加快,IT系統(tǒng)的建設(shè)從前期單一的系統(tǒng)處理模式開(kāi)始向多個(gè)應(yīng)用系統(tǒng)的集成進(jìn)行轉(zhuǎn)變,從一個(gè)個(gè)獨(dú)立的信息系統(tǒng)單獨(dú)處理業(yè)務(wù)問(wèn)題,轉(zhuǎn)變?yōu)槎鄠€(gè)系統(tǒng)協(xié)同處理問(wèn)題,這就使得業(yè)務(wù)邏輯設(shè)計(jì)和數(shù)據(jù)共享成為必須要面對(duì)的工作,在處理數(shù)據(jù)共享的環(huán)節(jié)中,對(duì)于數(shù)據(jù)的流動(dòng)往往通過(guò)建立中間庫(kù)接口表的方式進(jìn)行處理,而在這一過(guò)程中,基本的技術(shù)手段就是通過(guò)建立數(shù)據(jù)庫(kù)鏈接來(lái)進(jìn)行實(shí)現(xiàn)。在筆者所經(jīng)歷的幾個(gè)ORACLE數(shù)據(jù)庫(kù)集成項(xiàng)目之中,這一模式已得到了較好的使用,下文將對(duì)實(shí)現(xiàn)過(guò)程和實(shí)際過(guò)程當(dāng)中所出現(xiàn)的各種問(wèn)題做一闡述。
2.1概念定義
Database Link是建立本地?cái)?shù)據(jù)庫(kù)到遠(yuǎn)程數(shù)據(jù)庫(kù)的路徑的一種數(shù)據(jù)庫(kù)對(duì)象,簡(jiǎn)寫為DBLINK,通過(guò)此對(duì)象可以實(shí)現(xiàn)對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)上對(duì)象的各種操作,實(shí)現(xiàn)了將多個(gè)ORACLE數(shù)據(jù)庫(kù)邏輯成為一個(gè)數(shù)據(jù)庫(kù)的功能,而這一過(guò)程,通過(guò)建立同義詞對(duì)象,可以使得用戶使用更加透明。
2.2創(chuàng)建方法
在創(chuàng)建一個(gè)dblink之前,首先需要在tnsnames.ora中建立一個(gè)對(duì)應(yīng)遠(yuǎn)程數(shù)據(jù)庫(kù)的服務(wù)連接字符串,并且需要遠(yuǎn)程數(shù)據(jù)庫(kù)上所要連接的schema和口令。創(chuàng)建的基本語(yǔ)法為:Create database link dblink_name connect to schema identified by password using ‘service_str’;其中service_str為到遠(yuǎn)程數(shù)據(jù)庫(kù)的連接字符串[1]。
3.1連接案例
在本案例中,本地?cái)?shù)據(jù)庫(kù)為某企業(yè)ERP數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名為WZZ,主機(jī)名為srmtest2;遠(yuǎn)程數(shù)據(jù)庫(kù)為企業(yè)WMS數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)為orcl,主機(jī)名為wms業(yè)務(wù)實(shí)現(xiàn)需要將WMS的數(shù)據(jù)傳遞到ERP數(shù)據(jù)庫(kù)中,由系統(tǒng)并發(fā)處理程序進(jìn)行處理,然后將處理結(jié)果返回給WMS數(shù)據(jù)庫(kù)。
3.2異常處理
◆ 異常一:當(dāng)存儲(chǔ)過(guò)程或函數(shù)通過(guò) dblink對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)表進(jìn)行更改操作時(shí)(例如以下語(yǔ)句):
UPDATE wms_receivings_int@fstdbSET request_id=fnd_global.conc_request_id WHERE id=data_rec.id;
系統(tǒng)會(huì)拋出錯(cuò)誤ORA-02069:global_names parameter must be set to TRUE for this operation。此問(wèn)題產(chǎn)生的根本原因是在執(zhí)行update時(shí)使用到了本地函數(shù)fnd_global,而此函數(shù)在遠(yuǎn)端數(shù)據(jù)庫(kù)是不存在的。因此解決問(wèn)題的一個(gè)途徑就是在遠(yuǎn)端數(shù)據(jù)庫(kù)創(chuàng)建這個(gè)函數(shù)。但大多數(shù)情況下,在遠(yuǎn)端數(shù)據(jù)庫(kù)創(chuàng)建對(duì)象的條件難以滿足,需要采取其它更為有效方法來(lái)規(guī)避這樣的問(wèn)題。這里根據(jù)錯(cuò)誤提示設(shè)置global_names參數(shù)為true,此參數(shù)設(shè)置后,要求創(chuàng)建的dblink的名稱必須和遠(yuǎn)端數(shù)據(jù)庫(kù)的global_name一致(select global_name from global_name);如果創(chuàng)建dblink時(shí)沒(méi)有指定目標(biāo)數(shù)據(jù)庫(kù)的domain部分,系統(tǒng)自動(dòng)會(huì)將本地domain部分添加給dblink,當(dāng)然可以通過(guò)修改當(dāng)前數(shù)據(jù)庫(kù)與遠(yuǎn)端數(shù)據(jù)庫(kù)為相同domain,創(chuàng)建時(shí)就可以省略掉domain部分。本例中根據(jù)參數(shù)規(guī)則,創(chuàng)建出名為orcl.wms.com的dblink。
◆ 異常二:當(dāng)設(shè)置完global_names參數(shù),創(chuàng)建好新的dblink后,繼續(xù)執(zhí)行update語(yǔ)句時(shí),系統(tǒng)又拋出另外一個(gè)錯(cuò)誤:
ORA-04054: database link WZZ.SRTEST2.COM does not exist
ORA-02063: preceding line from ORCL.WMS.COM
根據(jù)錯(cuò)誤提示,可知是WZZ.SRTEST2.COM這個(gè)dblink不存在,而此名稱恰為本地?cái)?shù)據(jù)庫(kù)的global_name,根據(jù)global_names為true時(shí)的規(guī)則,此名稱應(yīng)對(duì)應(yīng)遠(yuǎn)端數(shù)據(jù)庫(kù)的dblink,再聯(lián)想到存儲(chǔ)過(guò)程在兩端數(shù)據(jù)庫(kù)上的雙向操作,因此判斷需要在遠(yuǎn)端數(shù)據(jù)庫(kù)上再建立一個(gè)名為WZZ.SRTEST2.COM的dblink,當(dāng)創(chuàng)建完成后,update恢復(fù)正常。
◆ 異常三:dblink的刪除異常;當(dāng)刪除dblink時(shí)系統(tǒng)拋出錯(cuò)誤:ORA-02024: database link not found。通過(guò)dba_objects確認(rèn)這是個(gè)數(shù)據(jù)庫(kù)中確實(shí)存在的dblink對(duì)象,也確認(rèn)對(duì)
象的名稱沒(méi)有錯(cuò)誤,但無(wú)論如何就是不能刪除。經(jīng)分析原因,大致是在global_names為false的情況下,使用者對(duì)global_name進(jìn)行了修改,因而在此修改之前創(chuàng)建的dblink在刪除操作時(shí)就會(huì)出現(xiàn)錯(cuò)誤。并且當(dāng)global_name 發(fā)生改變后,已經(jīng)存在的dblink也無(wú)法刪除。這時(shí)如果僅通過(guò)alter命令,讓global_name 還原成舊值的然后執(zhí)行刪除的操作是無(wú)效的。此時(shí)有效的解決方法,就是用sys用戶來(lái)修改props$表:update props$ set value$ = ′
在數(shù)據(jù)庫(kù)的日常運(yùn)維工作中,會(huì)遇到種種因設(shè)置不當(dāng)或因?qū)σ?guī)則不清而引發(fā)的錯(cuò)誤異常,因此在學(xué)習(xí)和工作過(guò)程中,要善于歸類,勤于總結(jié),才能很好的避免問(wèn)題的發(fā)生和有效的解決發(fā)生的問(wèn)題。
[1]Oracle Database 11g Administration[DB].ORACLE公司,2010.
[2]Oracle Database Concepts Release 11g[DB].ORACLE公司,2011.
Analysis of System Integration Based on DBLINK
Ren Xusheng
(ITDepartmentofShaanxiFastGearCo.,Ltd.,Xi’anShaanxi710077,China)
This article summarizes some useful experiences for the database integration using the Oracle database link object, provides a convenient library of knowledge with the experience of multiple integrate databases for the relative people.
oracle; database; database link
2016-04-20
任旭升(1982- ),男,陜西西安人,工程師,本科學(xué)歷,研究方向:數(shù)據(jù)庫(kù)技術(shù)在制造行業(yè)的應(yīng)用。
1674- 4578(2016)04- 0025- 01
TP315
A