• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于XA協(xié)議的TUXEDO應(yīng)用與共享DATABASE LINK的風(fēng)險(xiǎn)分析

      2014-12-30 15:15:27高宏娟于剛
      科技創(chuàng)新導(dǎo)報(bào) 2014年32期

      高宏娟+于剛

      摘 要:在TUXEDO應(yīng)用中,為了保障事務(wù)完整性,通常使用XA協(xié)議進(jìn)行多資源操作的一致性管理。但是在這類應(yīng)用中,使用共享Database Link進(jìn)行多數(shù)據(jù)庫資源操作時(shí),可能會(huì)破壞事務(wù)完整性并且會(huì)引發(fā)系統(tǒng)運(yùn)行風(fēng)險(xiǎn)。該文對在XA協(xié)議的TUXEDO應(yīng)用中使用共享Database Link引發(fā)的風(fēng)險(xiǎn)進(jìn)行分析,并且給出了預(yù)防措施,為通訊行業(yè)業(yè)務(wù)系統(tǒng)的穩(wěn)定運(yùn)行提供技術(shù)支撐。

      關(guān)鍵詞:TUXEDO ?XA協(xié)議 ?Database Link

      中圖分類號(hào):TP311.52 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1674-098X(2014)11(b)-0064-03

      RISK ANALYSIS FOR SHARED DBLINK IN TUXEDO APPLICATIONS

      BASED ON XA PROTOCOL

      Gao Hongjuan1 Yu Gang2

      (1.Xinhua College, Ningxia University, Yinchuan 750021,Ningxia,China;

      2.Business Support and Information Systems Department, China Mobile Group Ningxia co,.ltd, Yinchuan 750002,Ningxia,China)

      TUXEDO application use the XA protocol for the transaction consistency management and integrity of operation in multi-resource. The sharing Database Link operation will destroy the integrity of the transaction in such applications. Influence and risks of using shared Database Link in TUXEDO application will be analyzed. Precaution will be showed which provide technical support for business continuity trading systems.

      Key Words:TUXEDO;XA Protocol;Database;Link

      基于XA協(xié)議的ORACLE+TUXEDO應(yīng)用開發(fā)模式已被電信、銀行、電商等[1 2 3]普遍使用。XA協(xié)議是X/Open組織提出的分布式交易處理的規(guī)范,主要定義了事務(wù)管理器和資源管理器之間的接口,開發(fā)人員可開發(fā)基于該協(xié)議的多數(shù)據(jù)庫(資源)應(yīng)用系統(tǒng);ORACLE數(shù)據(jù)庫為關(guān)系型數(shù)據(jù)庫系統(tǒng);TUXEDO為交易中間件產(chǎn)品,主要進(jìn)行事務(wù)控制。近幾年,隨著業(yè)務(wù)發(fā)展,尤其是在“去小型機(jī)”的背景下,為提高較大型的IT系統(tǒng)的運(yùn)行效率,一般會(huì)將ORACLE數(shù)據(jù)庫進(jìn)行分庫操作,降低單機(jī)運(yùn)行壓力,提高運(yùn)行效率。在這種情況下,多資源交易的事務(wù)理就變得尤為重要。由于數(shù)據(jù)庫資源較多,事務(wù)控制難度增加,原在一個(gè)數(shù)據(jù)庫上完成的業(yè)務(wù),可能要拆分為兩個(gè)或更多的數(shù)據(jù)庫完成。在此背景下,為縮短開發(fā)時(shí)間、減少開發(fā)量,在應(yīng)用程序中使用Database Link[4](簡稱DBLINK)的情況越來越多。DBLINK的使用,雖然可快速響應(yīng)業(yè)務(wù)變更需求,提高開發(fā)效率,但給系統(tǒng)穩(wěn)定運(yùn)行帶來風(fēng)險(xiǎn),甚至引起系統(tǒng)中斷,文中根據(jù)實(shí)際發(fā)生的故障對這一隱患引發(fā)的風(fēng)險(xiǎn)進(jìn)行分析,為后續(xù)系統(tǒng)的開發(fā)、維護(hù)工作提供參考。

      1 TUXEDO應(yīng)用與共享DBLINK風(fēng)險(xiǎn)分析

      TUXEDO具備多資源事務(wù)管理功能,客戶端請求通過應(yīng)用服務(wù)器傳遞給TUXEDO服務(wù)器,TUXEDO通過XA協(xié)議連接多個(gè)ORACLE數(shù)據(jù)庫完成業(yè)務(wù)[5],如圖1所示。

      以用戶繳費(fèi)為例,需要在oracle_1完成日志記錄,在oracle_2完成費(fèi)用計(jì)算,只有兩個(gè)數(shù)據(jù)庫的事務(wù)均完成,繳費(fèi)才成功。因此在TUXEDO 配置文件中,一般會(huì)配置多組,分別連接不同的數(shù)據(jù)庫,代碼實(shí)例如下:

      *GROUPS

      *G_YZ為組名,使用Oracle_XA協(xié)議連接數(shù)據(jù)庫oracle_1

      "G_YZ" LMID="tuxcrm3" GRPNO=300 OPENINFO="Oracle_XA:Oracle_XA+acc=P/user_name_1/@@912461cc11e446452asd5e5319f328d3@@+SesTm=150+LogDir=.+SqlNet=oracle_1+Loose_Coupling=true"

      TMSNAME="TMS_ORA81"

      TMSCOUNT=5

      *G_JF為組名,使用Oracle_XA協(xié)議連接數(shù)據(jù)庫oracle_2

      "G_JF" LMID="tuxcrm3" ?GRPNO=500 OPENINFO="Oracle_XA:Oracle_XA+acc=P/ user_name_2/@@bbbe29086e6fa23asd5ad5d19d13ad9@@+SesTm=150+LogDir=.+SqlNet= oracle_2+Loose_Coupling=true"

      TMSNAME="TMS_ORA81"

      TMSCOUNT=5

      TUXEDO的應(yīng)用程序會(huì)設(shè)計(jì)不同的SERVER,連接不同的GROUP,實(shí)現(xiàn)對不同數(shù)據(jù)庫事務(wù)的管理,依靠TUXEDO的事務(wù)管理功能,完成整個(gè)事務(wù)完整性控制,例如,在TUXEDO中配置有如下服務(wù):endprint

      *SERVERS

      *AccSrv為費(fèi)用計(jì)算服務(wù),連接G_JF對應(yīng)的數(shù)據(jù)庫

      "AccSrv" ? ? ? ?SRVGRP="G_JF" ? SRVID=8001

      *LogSrv為日志記錄服務(wù),連接G_YZ對應(yīng)的數(shù)據(jù)庫

      "LogSrv" ? ? ? ?SRVGRP="G_YZ" ? SRVID=9001

      TUXEDO通過對兩個(gè)事務(wù)的管理,完成一個(gè)完整交易過程,當(dāng)兩個(gè)服務(wù)均返回成功,業(yè)務(wù)才成功受理。正常的事務(wù)控制需要對兩個(gè)事務(wù)進(jìn)行嚴(yán)格控制,但在XA協(xié)議的TUXEDO應(yīng)用,可使用共享的DBLINK[6],通過使用共享DBLINK,應(yīng)用程序可以從當(dāng)前數(shù)據(jù)庫執(zhí)行另一個(gè)數(shù)據(jù)庫的DDL及DML操作。例如,在LogSrv服務(wù)中,該服務(wù)只記錄日志,如使用DBLINK,費(fèi)用計(jì)算功能可通過該服務(wù)對應(yīng)的oralce_1數(shù)據(jù)庫執(zhí)行oracle_2數(shù)據(jù)庫的SQL,無需單獨(dú)設(shè)計(jì)AccSrv服務(wù),節(jié)省了開發(fā)成本及時(shí)間,這一設(shè)計(jì)方式,雖然有如上優(yōu)點(diǎn),但在實(shí)際應(yīng)用中發(fā)現(xiàn)存在如下風(fēng)險(xiǎn):

      (1)破壞XA協(xié)議多資源操作的一致性管理。XA具備多資源(多庫)的事務(wù)管理功能[7],該功能通過與多資源的通信來保障事務(wù)完整性,而在XA協(xié)議的應(yīng)用中使用了DBLINK,則可以從一個(gè)資源上完成另一個(gè)或多個(gè)資源的操作任務(wù),破壞了XA事務(wù)管理的完整性,多庫操作的數(shù)據(jù)一致性無法保障。仍以用戶繳費(fèi)為例,當(dāng)用戶繳費(fèi)行為發(fā)生時(shí),如使用XA協(xié)議管理兩個(gè)數(shù)據(jù)庫,LogSrv和AccSrv均需返回成功,交易才完成,否則全部回退。如使用DBLINK, XA的事務(wù)管理器只管理oracle_1,若在繳費(fèi)過程中,oracle_1執(zhí)行成功,oracle_2出現(xiàn)異常,XA事務(wù)管理器仍認(rèn)為交易受理成功。如圖2所示,原應(yīng)由XA事務(wù)管理的應(yīng)用使用DBLNK在完成,XA的事務(wù)管理器無法獲取oracle_2的事務(wù)完成情況,因此異常情況下難以保障事務(wù)完整性及數(shù)據(jù)一致性,這在高可靠性的交易系統(tǒng)中,應(yīng)當(dāng)是被避免的。

      使用DBLINK方式完成交易過程,系統(tǒng)正常運(yùn)行下事務(wù)管理并無異常,而一旦出現(xiàn)一方數(shù)據(jù)庫異常終止,則出現(xiàn)部分交易成功,部分交易失敗的情況,這在交易系統(tǒng)中是嚴(yán)重缺陷。

      (2)增加ORACLE數(shù)據(jù)庫會(huì)話數(shù)量。在現(xiàn)實(shí)維護(hù)中,發(fā)現(xiàn)使用共享DBLINK的系統(tǒng),ORACLE數(shù)據(jù)庫異常停機(jī)風(fēng)險(xiǎn)高于其它系統(tǒng)。一個(gè)共享的DBLINK,會(huì)被多個(gè)會(huì)話使用,在XA事務(wù)中,即使事務(wù)提交了,這些會(huì)話也會(huì)被緩存在數(shù)據(jù)庫中,以便其它事務(wù)繼續(xù)使用,這從節(jié)省連接資源上,是一個(gè)很好的思路。但是在較大型的IT系統(tǒng)中,經(jīng)過長時(shí)間運(yùn)行,大量客戶端會(huì)產(chǎn)生大量共享連接,這些連接以會(huì)話形式保存下來,導(dǎo)致數(shù)據(jù)庫會(huì)話數(shù)量不斷增長,如果會(huì)話數(shù)量到達(dá)上限,新的會(huì)話將無法連接,ORACLE數(shù)據(jù)庫報(bào)ORA-00018: maximum number of sessions exceeded[8] 錯(cuò)誤。若此時(shí)ORACLE需要申請新會(huì)話完成自身維護(hù),這一需求將得不到滿足,處于保障機(jī)制,ORACLE數(shù)據(jù)庫會(huì)自動(dòng)停止運(yùn)行,從而導(dǎo)致大規(guī)模系統(tǒng)故障,如圖3所示。

      筆者維護(hù)的IT交易系統(tǒng),因在使用XA協(xié)議的TUXEDO應(yīng)用中使用共享DBLINK,為系統(tǒng)安全埋下隱患,導(dǎo)致上半年連續(xù)兩次因共享DBLINK緩存過多會(huì)話,數(shù)據(jù)庫異常停止,引發(fā)全省交易系統(tǒng)故障,后緊急將相關(guān)業(yè)務(wù)下線并采用XA協(xié)議完成業(yè)務(wù)需求,隱患消除。

      2 預(yù)防措施

      為保障事務(wù)完整性及系統(tǒng)安全,應(yīng)在開發(fā)中注意如下事項(xiàng):

      (1)在基于XA的TUXEDO的應(yīng)用中,禁止使用共享DBLINK。DBLINK的使用,一方面增加系統(tǒng)耦合度,另一方面,也增加了系統(tǒng)安全運(yùn)行風(fēng)險(xiǎn)。DBLINK禁用后,使用接口程序或第三方工具完成數(shù)據(jù)交互、傳輸[9]。

      (2)適當(dāng)增大最大會(huì)話數(shù)量。通過show parameter sessions查看最大會(huì)話數(shù)量,通過增大sessions參數(shù),增加最大會(huì)話數(shù)量。一般最大會(huì)話數(shù)量為日常運(yùn)行會(huì)話數(shù)量的2倍,需要注意的是,如果使用了共享DBLINK,增加回話數(shù)量只是緩解或延遲故障發(fā)生,無法根治,只作為保障措施使用。

      (3)對數(shù)據(jù)庫會(huì)話數(shù)量進(jìn)行監(jiān)控。通過select count(1) from v$session獲取當(dāng)前數(shù)據(jù)庫會(huì)話數(shù)量,通過對當(dāng)前運(yùn)行會(huì)話數(shù)量與最大值進(jìn)行對比,一旦會(huì)話數(shù)量超過額定使用率,進(jìn)行告警,及時(shí)進(jìn)行人工干預(yù),清理多余連接,避免數(shù)據(jù)庫會(huì)話到達(dá)上限。

      3 結(jié)語

      DBLINK的跨多數(shù)據(jù)庫操作給應(yīng)用開發(fā)帶來一系列方便,但也增加了系統(tǒng)的耦合度,且在XA事務(wù)中使用,將破壞事務(wù)完整性功能,同時(shí)導(dǎo)致ORACLE數(shù)據(jù)庫會(huì)話不斷增多,進(jìn)而引發(fā)數(shù)據(jù)庫故障,因此建議:在使用XA協(xié)議進(jìn)行數(shù)據(jù)庫操作的應(yīng)用中,應(yīng)逐步禁用DBLINK,并對數(shù)據(jù)庫會(huì)話數(shù)量進(jìn)行監(jiān)控。

      DBLINK的使用是長期積累的結(jié)果,如系統(tǒng)設(shè)計(jì)之初未進(jìn)行嚴(yán)格管理,在大型的IT系統(tǒng)要取消DBLINK的使用,改造難度較大,應(yīng)對DBLINK的使用進(jìn)行嚴(yán)格管理及登記,根據(jù)重要度、優(yōu)先級(jí),逐步進(jìn)行改造。

      參考文獻(xiàn)

      [1] 童旺宇,熊盛武,吳進(jìn)波.TUXEDO在銀行中間業(yè)務(wù)系統(tǒng)中的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007(7):240-243.

      [2] 熊磊.TUXEDO中間件及在江蘇有線BOSS系統(tǒng)中的應(yīng)用[J].有線電視技術(shù),2013(8):82-84.

      [3] 楊文兵,陳煉.Tuxedo中間件在電信計(jì)費(fèi)系統(tǒng)中的應(yīng)用設(shè)計(jì)方案[J].電腦知識(shí)與技術(shù),2010(8): 6362-6364.

      [4] Oracle Corporation.Oracle? Database Administrator's Guide [DB/OL]:http://docs.oracle.com/cd/B19306_01/server.102/b14231/ds_concepts.htm#sthref3874,2001.

      [5] 黃昕.基于TUXEDO中間件的多層體系結(jié)構(gòu)研究[J].計(jì)算機(jī)工程與應(yīng)用,2003(39):94-95.

      [6] Oracle Corporation. Oracle? Database Reference [DB/OL]: http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams140.htm,2002.

      [7] 彭邦倫.交易中間件TUXFDO數(shù)據(jù)庫應(yīng)用程序開發(fā)[J].電腦編程技巧與維護(hù),2013(17):46-51.

      [8] Oracle Corporation.Oracle? Database Error Message[DB/OL].http://docs.oracle.com/cd/B19306_01/server.102/b14219/e0.htm#sthref21,2006.

      [9] 張瑞平.EMS系統(tǒng)Mosaic與Oracle間接口的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(6):228-229,232.endprint

      *SERVERS

      *AccSrv為費(fèi)用計(jì)算服務(wù),連接G_JF對應(yīng)的數(shù)據(jù)庫

      "AccSrv" ? ? ? ?SRVGRP="G_JF" ? SRVID=8001

      *LogSrv為日志記錄服務(wù),連接G_YZ對應(yīng)的數(shù)據(jù)庫

      "LogSrv" ? ? ? ?SRVGRP="G_YZ" ? SRVID=9001

      TUXEDO通過對兩個(gè)事務(wù)的管理,完成一個(gè)完整交易過程,當(dāng)兩個(gè)服務(wù)均返回成功,業(yè)務(wù)才成功受理。正常的事務(wù)控制需要對兩個(gè)事務(wù)進(jìn)行嚴(yán)格控制,但在XA協(xié)議的TUXEDO應(yīng)用,可使用共享的DBLINK[6],通過使用共享DBLINK,應(yīng)用程序可以從當(dāng)前數(shù)據(jù)庫執(zhí)行另一個(gè)數(shù)據(jù)庫的DDL及DML操作。例如,在LogSrv服務(wù)中,該服務(wù)只記錄日志,如使用DBLINK,費(fèi)用計(jì)算功能可通過該服務(wù)對應(yīng)的oralce_1數(shù)據(jù)庫執(zhí)行oracle_2數(shù)據(jù)庫的SQL,無需單獨(dú)設(shè)計(jì)AccSrv服務(wù),節(jié)省了開發(fā)成本及時(shí)間,這一設(shè)計(jì)方式,雖然有如上優(yōu)點(diǎn),但在實(shí)際應(yīng)用中發(fā)現(xiàn)存在如下風(fēng)險(xiǎn):

      (1)破壞XA協(xié)議多資源操作的一致性管理。XA具備多資源(多庫)的事務(wù)管理功能[7],該功能通過與多資源的通信來保障事務(wù)完整性,而在XA協(xié)議的應(yīng)用中使用了DBLINK,則可以從一個(gè)資源上完成另一個(gè)或多個(gè)資源的操作任務(wù),破壞了XA事務(wù)管理的完整性,多庫操作的數(shù)據(jù)一致性無法保障。仍以用戶繳費(fèi)為例,當(dāng)用戶繳費(fèi)行為發(fā)生時(shí),如使用XA協(xié)議管理兩個(gè)數(shù)據(jù)庫,LogSrv和AccSrv均需返回成功,交易才完成,否則全部回退。如使用DBLINK, XA的事務(wù)管理器只管理oracle_1,若在繳費(fèi)過程中,oracle_1執(zhí)行成功,oracle_2出現(xiàn)異常,XA事務(wù)管理器仍認(rèn)為交易受理成功。如圖2所示,原應(yīng)由XA事務(wù)管理的應(yīng)用使用DBLNK在完成,XA的事務(wù)管理器無法獲取oracle_2的事務(wù)完成情況,因此異常情況下難以保障事務(wù)完整性及數(shù)據(jù)一致性,這在高可靠性的交易系統(tǒng)中,應(yīng)當(dāng)是被避免的。

      使用DBLINK方式完成交易過程,系統(tǒng)正常運(yùn)行下事務(wù)管理并無異常,而一旦出現(xiàn)一方數(shù)據(jù)庫異常終止,則出現(xiàn)部分交易成功,部分交易失敗的情況,這在交易系統(tǒng)中是嚴(yán)重缺陷。

      (2)增加ORACLE數(shù)據(jù)庫會(huì)話數(shù)量。在現(xiàn)實(shí)維護(hù)中,發(fā)現(xiàn)使用共享DBLINK的系統(tǒng),ORACLE數(shù)據(jù)庫異常停機(jī)風(fēng)險(xiǎn)高于其它系統(tǒng)。一個(gè)共享的DBLINK,會(huì)被多個(gè)會(huì)話使用,在XA事務(wù)中,即使事務(wù)提交了,這些會(huì)話也會(huì)被緩存在數(shù)據(jù)庫中,以便其它事務(wù)繼續(xù)使用,這從節(jié)省連接資源上,是一個(gè)很好的思路。但是在較大型的IT系統(tǒng)中,經(jīng)過長時(shí)間運(yùn)行,大量客戶端會(huì)產(chǎn)生大量共享連接,這些連接以會(huì)話形式保存下來,導(dǎo)致數(shù)據(jù)庫會(huì)話數(shù)量不斷增長,如果會(huì)話數(shù)量到達(dá)上限,新的會(huì)話將無法連接,ORACLE數(shù)據(jù)庫報(bào)ORA-00018: maximum number of sessions exceeded[8] 錯(cuò)誤。若此時(shí)ORACLE需要申請新會(huì)話完成自身維護(hù),這一需求將得不到滿足,處于保障機(jī)制,ORACLE數(shù)據(jù)庫會(huì)自動(dòng)停止運(yùn)行,從而導(dǎo)致大規(guī)模系統(tǒng)故障,如圖3所示。

      筆者維護(hù)的IT交易系統(tǒng),因在使用XA協(xié)議的TUXEDO應(yīng)用中使用共享DBLINK,為系統(tǒng)安全埋下隱患,導(dǎo)致上半年連續(xù)兩次因共享DBLINK緩存過多會(huì)話,數(shù)據(jù)庫異常停止,引發(fā)全省交易系統(tǒng)故障,后緊急將相關(guān)業(yè)務(wù)下線并采用XA協(xié)議完成業(yè)務(wù)需求,隱患消除。

      2 預(yù)防措施

      為保障事務(wù)完整性及系統(tǒng)安全,應(yīng)在開發(fā)中注意如下事項(xiàng):

      (1)在基于XA的TUXEDO的應(yīng)用中,禁止使用共享DBLINK。DBLINK的使用,一方面增加系統(tǒng)耦合度,另一方面,也增加了系統(tǒng)安全運(yùn)行風(fēng)險(xiǎn)。DBLINK禁用后,使用接口程序或第三方工具完成數(shù)據(jù)交互、傳輸[9]。

      (2)適當(dāng)增大最大會(huì)話數(shù)量。通過show parameter sessions查看最大會(huì)話數(shù)量,通過增大sessions參數(shù),增加最大會(huì)話數(shù)量。一般最大會(huì)話數(shù)量為日常運(yùn)行會(huì)話數(shù)量的2倍,需要注意的是,如果使用了共享DBLINK,增加回話數(shù)量只是緩解或延遲故障發(fā)生,無法根治,只作為保障措施使用。

      (3)對數(shù)據(jù)庫會(huì)話數(shù)量進(jìn)行監(jiān)控。通過select count(1) from v$session獲取當(dāng)前數(shù)據(jù)庫會(huì)話數(shù)量,通過對當(dāng)前運(yùn)行會(huì)話數(shù)量與最大值進(jìn)行對比,一旦會(huì)話數(shù)量超過額定使用率,進(jìn)行告警,及時(shí)進(jìn)行人工干預(yù),清理多余連接,避免數(shù)據(jù)庫會(huì)話到達(dá)上限。

      3 結(jié)語

      DBLINK的跨多數(shù)據(jù)庫操作給應(yīng)用開發(fā)帶來一系列方便,但也增加了系統(tǒng)的耦合度,且在XA事務(wù)中使用,將破壞事務(wù)完整性功能,同時(shí)導(dǎo)致ORACLE數(shù)據(jù)庫會(huì)話不斷增多,進(jìn)而引發(fā)數(shù)據(jù)庫故障,因此建議:在使用XA協(xié)議進(jìn)行數(shù)據(jù)庫操作的應(yīng)用中,應(yīng)逐步禁用DBLINK,并對數(shù)據(jù)庫會(huì)話數(shù)量進(jìn)行監(jiān)控。

      DBLINK的使用是長期積累的結(jié)果,如系統(tǒng)設(shè)計(jì)之初未進(jìn)行嚴(yán)格管理,在大型的IT系統(tǒng)要取消DBLINK的使用,改造難度較大,應(yīng)對DBLINK的使用進(jìn)行嚴(yán)格管理及登記,根據(jù)重要度、優(yōu)先級(jí),逐步進(jìn)行改造。

      參考文獻(xiàn)

      [1] 童旺宇,熊盛武,吳進(jìn)波.TUXEDO在銀行中間業(yè)務(wù)系統(tǒng)中的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007(7):240-243.

      [2] 熊磊.TUXEDO中間件及在江蘇有線BOSS系統(tǒng)中的應(yīng)用[J].有線電視技術(shù),2013(8):82-84.

      [3] 楊文兵,陳煉.Tuxedo中間件在電信計(jì)費(fèi)系統(tǒng)中的應(yīng)用設(shè)計(jì)方案[J].電腦知識(shí)與技術(shù),2010(8): 6362-6364.

      [4] Oracle Corporation.Oracle? Database Administrator's Guide [DB/OL]:http://docs.oracle.com/cd/B19306_01/server.102/b14231/ds_concepts.htm#sthref3874,2001.

      [5] 黃昕.基于TUXEDO中間件的多層體系結(jié)構(gòu)研究[J].計(jì)算機(jī)工程與應(yīng)用,2003(39):94-95.

      [6] Oracle Corporation. Oracle? Database Reference [DB/OL]: http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams140.htm,2002.

      [7] 彭邦倫.交易中間件TUXFDO數(shù)據(jù)庫應(yīng)用程序開發(fā)[J].電腦編程技巧與維護(hù),2013(17):46-51.

      [8] Oracle Corporation.Oracle? Database Error Message[DB/OL].http://docs.oracle.com/cd/B19306_01/server.102/b14219/e0.htm#sthref21,2006.

      [9] 張瑞平.EMS系統(tǒng)Mosaic與Oracle間接口的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(6):228-229,232.endprint

      *SERVERS

      *AccSrv為費(fèi)用計(jì)算服務(wù),連接G_JF對應(yīng)的數(shù)據(jù)庫

      "AccSrv" ? ? ? ?SRVGRP="G_JF" ? SRVID=8001

      *LogSrv為日志記錄服務(wù),連接G_YZ對應(yīng)的數(shù)據(jù)庫

      "LogSrv" ? ? ? ?SRVGRP="G_YZ" ? SRVID=9001

      TUXEDO通過對兩個(gè)事務(wù)的管理,完成一個(gè)完整交易過程,當(dāng)兩個(gè)服務(wù)均返回成功,業(yè)務(wù)才成功受理。正常的事務(wù)控制需要對兩個(gè)事務(wù)進(jìn)行嚴(yán)格控制,但在XA協(xié)議的TUXEDO應(yīng)用,可使用共享的DBLINK[6],通過使用共享DBLINK,應(yīng)用程序可以從當(dāng)前數(shù)據(jù)庫執(zhí)行另一個(gè)數(shù)據(jù)庫的DDL及DML操作。例如,在LogSrv服務(wù)中,該服務(wù)只記錄日志,如使用DBLINK,費(fèi)用計(jì)算功能可通過該服務(wù)對應(yīng)的oralce_1數(shù)據(jù)庫執(zhí)行oracle_2數(shù)據(jù)庫的SQL,無需單獨(dú)設(shè)計(jì)AccSrv服務(wù),節(jié)省了開發(fā)成本及時(shí)間,這一設(shè)計(jì)方式,雖然有如上優(yōu)點(diǎn),但在實(shí)際應(yīng)用中發(fā)現(xiàn)存在如下風(fēng)險(xiǎn):

      (1)破壞XA協(xié)議多資源操作的一致性管理。XA具備多資源(多庫)的事務(wù)管理功能[7],該功能通過與多資源的通信來保障事務(wù)完整性,而在XA協(xié)議的應(yīng)用中使用了DBLINK,則可以從一個(gè)資源上完成另一個(gè)或多個(gè)資源的操作任務(wù),破壞了XA事務(wù)管理的完整性,多庫操作的數(shù)據(jù)一致性無法保障。仍以用戶繳費(fèi)為例,當(dāng)用戶繳費(fèi)行為發(fā)生時(shí),如使用XA協(xié)議管理兩個(gè)數(shù)據(jù)庫,LogSrv和AccSrv均需返回成功,交易才完成,否則全部回退。如使用DBLINK, XA的事務(wù)管理器只管理oracle_1,若在繳費(fèi)過程中,oracle_1執(zhí)行成功,oracle_2出現(xiàn)異常,XA事務(wù)管理器仍認(rèn)為交易受理成功。如圖2所示,原應(yīng)由XA事務(wù)管理的應(yīng)用使用DBLNK在完成,XA的事務(wù)管理器無法獲取oracle_2的事務(wù)完成情況,因此異常情況下難以保障事務(wù)完整性及數(shù)據(jù)一致性,這在高可靠性的交易系統(tǒng)中,應(yīng)當(dāng)是被避免的。

      使用DBLINK方式完成交易過程,系統(tǒng)正常運(yùn)行下事務(wù)管理并無異常,而一旦出現(xiàn)一方數(shù)據(jù)庫異常終止,則出現(xiàn)部分交易成功,部分交易失敗的情況,這在交易系統(tǒng)中是嚴(yán)重缺陷。

      (2)增加ORACLE數(shù)據(jù)庫會(huì)話數(shù)量。在現(xiàn)實(shí)維護(hù)中,發(fā)現(xiàn)使用共享DBLINK的系統(tǒng),ORACLE數(shù)據(jù)庫異常停機(jī)風(fēng)險(xiǎn)高于其它系統(tǒng)。一個(gè)共享的DBLINK,會(huì)被多個(gè)會(huì)話使用,在XA事務(wù)中,即使事務(wù)提交了,這些會(huì)話也會(huì)被緩存在數(shù)據(jù)庫中,以便其它事務(wù)繼續(xù)使用,這從節(jié)省連接資源上,是一個(gè)很好的思路。但是在較大型的IT系統(tǒng)中,經(jīng)過長時(shí)間運(yùn)行,大量客戶端會(huì)產(chǎn)生大量共享連接,這些連接以會(huì)話形式保存下來,導(dǎo)致數(shù)據(jù)庫會(huì)話數(shù)量不斷增長,如果會(huì)話數(shù)量到達(dá)上限,新的會(huì)話將無法連接,ORACLE數(shù)據(jù)庫報(bào)ORA-00018: maximum number of sessions exceeded[8] 錯(cuò)誤。若此時(shí)ORACLE需要申請新會(huì)話完成自身維護(hù),這一需求將得不到滿足,處于保障機(jī)制,ORACLE數(shù)據(jù)庫會(huì)自動(dòng)停止運(yùn)行,從而導(dǎo)致大規(guī)模系統(tǒng)故障,如圖3所示。

      筆者維護(hù)的IT交易系統(tǒng),因在使用XA協(xié)議的TUXEDO應(yīng)用中使用共享DBLINK,為系統(tǒng)安全埋下隱患,導(dǎo)致上半年連續(xù)兩次因共享DBLINK緩存過多會(huì)話,數(shù)據(jù)庫異常停止,引發(fā)全省交易系統(tǒng)故障,后緊急將相關(guān)業(yè)務(wù)下線并采用XA協(xié)議完成業(yè)務(wù)需求,隱患消除。

      2 預(yù)防措施

      為保障事務(wù)完整性及系統(tǒng)安全,應(yīng)在開發(fā)中注意如下事項(xiàng):

      (1)在基于XA的TUXEDO的應(yīng)用中,禁止使用共享DBLINK。DBLINK的使用,一方面增加系統(tǒng)耦合度,另一方面,也增加了系統(tǒng)安全運(yùn)行風(fēng)險(xiǎn)。DBLINK禁用后,使用接口程序或第三方工具完成數(shù)據(jù)交互、傳輸[9]。

      (2)適當(dāng)增大最大會(huì)話數(shù)量。通過show parameter sessions查看最大會(huì)話數(shù)量,通過增大sessions參數(shù),增加最大會(huì)話數(shù)量。一般最大會(huì)話數(shù)量為日常運(yùn)行會(huì)話數(shù)量的2倍,需要注意的是,如果使用了共享DBLINK,增加回話數(shù)量只是緩解或延遲故障發(fā)生,無法根治,只作為保障措施使用。

      (3)對數(shù)據(jù)庫會(huì)話數(shù)量進(jìn)行監(jiān)控。通過select count(1) from v$session獲取當(dāng)前數(shù)據(jù)庫會(huì)話數(shù)量,通過對當(dāng)前運(yùn)行會(huì)話數(shù)量與最大值進(jìn)行對比,一旦會(huì)話數(shù)量超過額定使用率,進(jìn)行告警,及時(shí)進(jìn)行人工干預(yù),清理多余連接,避免數(shù)據(jù)庫會(huì)話到達(dá)上限。

      3 結(jié)語

      DBLINK的跨多數(shù)據(jù)庫操作給應(yīng)用開發(fā)帶來一系列方便,但也增加了系統(tǒng)的耦合度,且在XA事務(wù)中使用,將破壞事務(wù)完整性功能,同時(shí)導(dǎo)致ORACLE數(shù)據(jù)庫會(huì)話不斷增多,進(jìn)而引發(fā)數(shù)據(jù)庫故障,因此建議:在使用XA協(xié)議進(jìn)行數(shù)據(jù)庫操作的應(yīng)用中,應(yīng)逐步禁用DBLINK,并對數(shù)據(jù)庫會(huì)話數(shù)量進(jìn)行監(jiān)控。

      DBLINK的使用是長期積累的結(jié)果,如系統(tǒng)設(shè)計(jì)之初未進(jìn)行嚴(yán)格管理,在大型的IT系統(tǒng)要取消DBLINK的使用,改造難度較大,應(yīng)對DBLINK的使用進(jìn)行嚴(yán)格管理及登記,根據(jù)重要度、優(yōu)先級(jí),逐步進(jìn)行改造。

      參考文獻(xiàn)

      [1] 童旺宇,熊盛武,吳進(jìn)波.TUXEDO在銀行中間業(yè)務(wù)系統(tǒng)中的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007(7):240-243.

      [2] 熊磊.TUXEDO中間件及在江蘇有線BOSS系統(tǒng)中的應(yīng)用[J].有線電視技術(shù),2013(8):82-84.

      [3] 楊文兵,陳煉.Tuxedo中間件在電信計(jì)費(fèi)系統(tǒng)中的應(yīng)用設(shè)計(jì)方案[J].電腦知識(shí)與技術(shù),2010(8): 6362-6364.

      [4] Oracle Corporation.Oracle? Database Administrator's Guide [DB/OL]:http://docs.oracle.com/cd/B19306_01/server.102/b14231/ds_concepts.htm#sthref3874,2001.

      [5] 黃昕.基于TUXEDO中間件的多層體系結(jié)構(gòu)研究[J].計(jì)算機(jī)工程與應(yīng)用,2003(39):94-95.

      [6] Oracle Corporation. Oracle? Database Reference [DB/OL]: http://docs.oracle.com/cd/B19306_01/server.102/b14237/initparams140.htm,2002.

      [7] 彭邦倫.交易中間件TUXFDO數(shù)據(jù)庫應(yīng)用程序開發(fā)[J].電腦編程技巧與維護(hù),2013(17):46-51.

      [8] Oracle Corporation.Oracle? Database Error Message[DB/OL].http://docs.oracle.com/cd/B19306_01/server.102/b14219/e0.htm#sthref21,2006.

      [9] 張瑞平.EMS系統(tǒng)Mosaic與Oracle間接口的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2012,29(6):228-229,232.endprint

      兰西县| 苍南县| 正镶白旗| 镇平县| 遂平县| 黄平县| 郧西县| 河津市| 友谊县| 莱芜市| 托克托县| 即墨市| 龙泉市| 白山市| 边坝县| 禹城市| 金平| 调兵山市| 石棉县| 随州市| 托里县| 工布江达县| 留坝县| 托里县| 新竹市| 河西区| 卫辉市| 西乌珠穆沁旗| 宝坻区| 屯门区| 房山区| 曲周县| 云霄县| 德惠市| 台湾省| 阿勒泰市| 青神县| 新民市| 化州市| 九龙县| 嘉黎县|