高宏娟+于剛
摘 要:在TUXEDO應用中,為了保障事務完整性,通常使用XA協議進行多資源操作的一致性管理。但是在這類應用中,使用共享Database Link進行多數據庫資源操作時,可能會破壞事務完整性并且會引發系統運行風險。該文對在XA協議的TUXEDO應用中使用共享Database Link引發的風險進行分析,并且給出了預防措施,為通訊行業業務系統的穩定運行提供技術支撐。
關鍵詞:TUXEDO ?XA協議 ?Database Link
中圖分類號:TP311.52 文獻標識碼:A 文章編號: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協議的ORACLE+TUXEDO應用開發模式已被電信、銀行、電商等[1 2 3]普遍使用。XA協議是X/Open組織提出的分布式交易處理的規范,主要定義了事務管理器和資源管理器之間的接口,開發人員可開發基于該協議的多數據庫(資源)應用系統;ORACLE數據庫為關系型數據庫系統;TUXEDO為交易中間件產品,主要進行事務控制。近幾年,隨著業務發展,尤其是在“去小型機”的背景下,為提高較大型的IT系統的運行效率,一般會將ORACLE數據庫進行分庫操作,降低單機運行壓力,提高運行效率。在這種情況下,多資源交易的事務理就變得尤為重要。由于數據庫資源較多,事務控制難度增加,原在一個數據庫上完成的業務,可能要拆分為兩個或更多的數據庫完成。在此背景下,為縮短開發時間、減少開發量,在應用程序中使用Database Link[4](簡稱DBLINK)的情況越來越多。DBLINK的使用,雖然可快速響應業務變更需求,提高開發效率,但給系統穩定運行帶來風險,甚至引起系統中斷,文中根據實際發生的故障對這一隱患引發的風險進行分析,為后續系統的開發、維護工作提供參考。
1 TUXEDO應用與共享DBLINK風險分析
TUXEDO具備多資源事務管理功能,客戶端請求通過應用服務器傳遞給TUXEDO服務器,TUXEDO通過XA協議連接多個ORACLE數據庫完成業務[5],如圖1所示。
以用戶繳費為例,需要在oracle_1完成日志記錄,在oracle_2完成費用計算,只有兩個數據庫的事務均完成,繳費才成功。因此在TUXEDO 配置文件中,一般會配置多組,分別連接不同的數據庫,代碼實例如下:
*GROUPS
*G_YZ為組名,使用Oracle_XA協議連接數據庫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協議連接數據庫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的應用程序會設計不同的SERVER,連接不同的GROUP,實現對不同數據庫事務的管理,依靠TUXEDO的事務管理功能,完成整個事務完整性控制,例如,在TUXEDO中配置有如下服務:endprint
*SERVERS
*AccSrv為費用計算服務,連接G_JF對應的數據庫
"AccSrv" ? ? ? ?SRVGRP="G_JF" ? SRVID=8001
…
*LogSrv為日志記錄服務,連接G_YZ對應的數據庫
"LogSrv" ? ? ? ?SRVGRP="G_YZ" ? SRVID=9001
…
TUXEDO通過對兩個事務的管理,完成一個完整交易過程,當兩個服務均返回成功,業務才成功受理。正常的事務控制需要對兩個事務進行嚴格控制,但在XA協議的TUXEDO應用,可使用共享的DBLINK[6],通過使用共享DBLINK,應用程序可以從當前數據庫執行另一個數據庫的DDL及DML操作。例如,在LogSrv服務中,該服務只記錄日志,如使用DBLINK,費用計算功能可通過該服務對應的oralce_1數據庫執行oracle_2數據庫的SQL,無需單獨設計AccSrv服務,節省了開發成本及時間,這一設計方式,雖然有如上優點,但在實際應用中發現存在如下風險:
(1)破壞XA協議多資源操作的一致性管理。XA具備多資源(多庫)的事務管理功能[7],該功能通過與多資源的通信來保障事務完整性,而在XA協議的應用中使用了DBLINK,則可以從一個資源上完成另一個或多個資源的操作任務,破壞了XA事務管理的完整性,多庫操作的數據一致性無法保障。仍以用戶繳費為例,當用戶繳費行為發生時,如使用XA協議管理兩個數據庫,LogSrv和AccSrv均需返回成功,交易才完成,否則全部回退。如使用DBLINK, XA的事務管理器只管理oracle_1,若在繳費過程中,oracle_1執行成功,oracle_2出現異常,XA事務管理器仍認為交易受理成功。如圖2所示,原應由XA事務管理的應用使用DBLNK在完成,XA的事務管理器無法獲取oracle_2的事務完成情況,因此異常情況下難以保障事務完整性及數據一致性,這在高可靠性的交易系統中,應當是被避免的。
使用DBLINK方式完成交易過程,系統正常運行下事務管理并無異常,而一旦出現一方數據庫異常終止,則出現部分交易成功,部分交易失敗的情況,這在交易系統中是嚴重缺陷。
(2)增加ORACLE數據庫會話數量。在現實維護中,發現使用共享DBLINK的系統,ORACLE數據庫異常停機風險高于其它系統。一個共享的DBLINK,會被多個會話使用,在XA事務中,即使事務提交了,這些會話也會被緩存在數據庫中,以便其它事務繼續使用,這從節省連接資源上,是一個很好的思路。但是在較大型的IT系統中,經過長時間運行,大量客戶端會產生大量共享連接,這些連接以會話形式保存下來,導致數據庫會話數量不斷增長,如果會話數量到達上限,新的會話將無法連接,ORACLE數據庫報ORA-00018: maximum number of sessions exceeded[8] 錯誤。若此時ORACLE需要申請新會話完成自身維護,這一需求將得不到滿足,處于保障機制,ORACLE數據庫會自動停止運行,從而導致大規模系統故障,如圖3所示。
筆者維護的IT交易系統,因在使用XA協議的TUXEDO應用中使用共享DBLINK,為系統安全埋下隱患,導致上半年連續兩次因共享DBLINK緩存過多會話,數據庫異常停止,引發全省交易系統故障,后緊急將相關業務下線并采用XA協議完成業務需求,隱患消除。
2 預防措施
為保障事務完整性及系統安全,應在開發中注意如下事項:
(1)在基于XA的TUXEDO的應用中,禁止使用共享DBLINK。DBLINK的使用,一方面增加系統耦合度,另一方面,也增加了系統安全運行風險。DBLINK禁用后,使用接口程序或第三方工具完成數據交互、傳輸[9]。
(2)適當增大最大會話數量。通過show parameter sessions查看最大會話數量,通過增大sessions參數,增加最大會話數量。一般最大會話數量為日常運行會話數量的2倍,需要注意的是,如果使用了共享DBLINK,增加回話數量只是緩解或延遲故障發生,無法根治,只作為保障措施使用。
(3)對數據庫會話數量進行監控。通過select count(1) from v$session獲取當前數據庫會話數量,通過對當前運行會話數量與最大值進行對比,一旦會話數量超過額定使用率,進行告警,及時進行人工干預,清理多余連接,避免數據庫會話到達上限。
3 結語
DBLINK的跨多數據庫操作給應用開發帶來一系列方便,但也增加了系統的耦合度,且在XA事務中使用,將破壞事務完整性功能,同時導致ORACLE數據庫會話不斷增多,進而引發數據庫故障,因此建議:在使用XA協議進行數據庫操作的應用中,應逐步禁用DBLINK,并對數據庫會話數量進行監控。
DBLINK的使用是長期積累的結果,如系統設計之初未進行嚴格管理,在大型的IT系統要取消DBLINK的使用,改造難度較大,應對DBLINK的使用進行嚴格管理及登記,根據重要度、優先級,逐步進行改造。
參考文獻
[1] 童旺宇,熊盛武,吳進波.TUXEDO在銀行中間業務系統中的設計與實現[J].計算機技術與發展,2007(7):240-243.
[2] 熊磊.TUXEDO中間件及在江蘇有線BOSS系統中的應用[J].有線電視技術,2013(8):82-84.
[3] 楊文兵,陳煉.Tuxedo中間件在電信計費系統中的應用設計方案[J].電腦知識與技術,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中間件的多層體系結構研究[J].計算機工程與應用,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數據庫應用程序開發[J].電腦編程技巧與維護,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系統Mosaic與Oracle間接口的設計與實現[J].計算機應用與軟件,2012,29(6):228-229,232.endprint
*SERVERS
*AccSrv為費用計算服務,連接G_JF對應的數據庫
"AccSrv" ? ? ? ?SRVGRP="G_JF" ? SRVID=8001
…
*LogSrv為日志記錄服務,連接G_YZ對應的數據庫
"LogSrv" ? ? ? ?SRVGRP="G_YZ" ? SRVID=9001
…
TUXEDO通過對兩個事務的管理,完成一個完整交易過程,當兩個服務均返回成功,業務才成功受理。正常的事務控制需要對兩個事務進行嚴格控制,但在XA協議的TUXEDO應用,可使用共享的DBLINK[6],通過使用共享DBLINK,應用程序可以從當前數據庫執行另一個數據庫的DDL及DML操作。例如,在LogSrv服務中,該服務只記錄日志,如使用DBLINK,費用計算功能可通過該服務對應的oralce_1數據庫執行oracle_2數據庫的SQL,無需單獨設計AccSrv服務,節省了開發成本及時間,這一設計方式,雖然有如上優點,但在實際應用中發現存在如下風險:
(1)破壞XA協議多資源操作的一致性管理。XA具備多資源(多庫)的事務管理功能[7],該功能通過與多資源的通信來保障事務完整性,而在XA協議的應用中使用了DBLINK,則可以從一個資源上完成另一個或多個資源的操作任務,破壞了XA事務管理的完整性,多庫操作的數據一致性無法保障。仍以用戶繳費為例,當用戶繳費行為發生時,如使用XA協議管理兩個數據庫,LogSrv和AccSrv均需返回成功,交易才完成,否則全部回退。如使用DBLINK, XA的事務管理器只管理oracle_1,若在繳費過程中,oracle_1執行成功,oracle_2出現異常,XA事務管理器仍認為交易受理成功。如圖2所示,原應由XA事務管理的應用使用DBLNK在完成,XA的事務管理器無法獲取oracle_2的事務完成情況,因此異常情況下難以保障事務完整性及數據一致性,這在高可靠性的交易系統中,應當是被避免的。
使用DBLINK方式完成交易過程,系統正常運行下事務管理并無異常,而一旦出現一方數據庫異常終止,則出現部分交易成功,部分交易失敗的情況,這在交易系統中是嚴重缺陷。
(2)增加ORACLE數據庫會話數量。在現實維護中,發現使用共享DBLINK的系統,ORACLE數據庫異常停機風險高于其它系統。一個共享的DBLINK,會被多個會話使用,在XA事務中,即使事務提交了,這些會話也會被緩存在數據庫中,以便其它事務繼續使用,這從節省連接資源上,是一個很好的思路。但是在較大型的IT系統中,經過長時間運行,大量客戶端會產生大量共享連接,這些連接以會話形式保存下來,導致數據庫會話數量不斷增長,如果會話數量到達上限,新的會話將無法連接,ORACLE數據庫報ORA-00018: maximum number of sessions exceeded[8] 錯誤。若此時ORACLE需要申請新會話完成自身維護,這一需求將得不到滿足,處于保障機制,ORACLE數據庫會自動停止運行,從而導致大規模系統故障,如圖3所示。
筆者維護的IT交易系統,因在使用XA協議的TUXEDO應用中使用共享DBLINK,為系統安全埋下隱患,導致上半年連續兩次因共享DBLINK緩存過多會話,數據庫異常停止,引發全省交易系統故障,后緊急將相關業務下線并采用XA協議完成業務需求,隱患消除。
2 預防措施
為保障事務完整性及系統安全,應在開發中注意如下事項:
(1)在基于XA的TUXEDO的應用中,禁止使用共享DBLINK。DBLINK的使用,一方面增加系統耦合度,另一方面,也增加了系統安全運行風險。DBLINK禁用后,使用接口程序或第三方工具完成數據交互、傳輸[9]。
(2)適當增大最大會話數量。通過show parameter sessions查看最大會話數量,通過增大sessions參數,增加最大會話數量。一般最大會話數量為日常運行會話數量的2倍,需要注意的是,如果使用了共享DBLINK,增加回話數量只是緩解或延遲故障發生,無法根治,只作為保障措施使用。
(3)對數據庫會話數量進行監控。通過select count(1) from v$session獲取當前數據庫會話數量,通過對當前運行會話數量與最大值進行對比,一旦會話數量超過額定使用率,進行告警,及時進行人工干預,清理多余連接,避免數據庫會話到達上限。
3 結語
DBLINK的跨多數據庫操作給應用開發帶來一系列方便,但也增加了系統的耦合度,且在XA事務中使用,將破壞事務完整性功能,同時導致ORACLE數據庫會話不斷增多,進而引發數據庫故障,因此建議:在使用XA協議進行數據庫操作的應用中,應逐步禁用DBLINK,并對數據庫會話數量進行監控。
DBLINK的使用是長期積累的結果,如系統設計之初未進行嚴格管理,在大型的IT系統要取消DBLINK的使用,改造難度較大,應對DBLINK的使用進行嚴格管理及登記,根據重要度、優先級,逐步進行改造。
參考文獻
[1] 童旺宇,熊盛武,吳進波.TUXEDO在銀行中間業務系統中的設計與實現[J].計算機技術與發展,2007(7):240-243.
[2] 熊磊.TUXEDO中間件及在江蘇有線BOSS系統中的應用[J].有線電視技術,2013(8):82-84.
[3] 楊文兵,陳煉.Tuxedo中間件在電信計費系統中的應用設計方案[J].電腦知識與技術,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中間件的多層體系結構研究[J].計算機工程與應用,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數據庫應用程序開發[J].電腦編程技巧與維護,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系統Mosaic與Oracle間接口的設計與實現[J].計算機應用與軟件,2012,29(6):228-229,232.endprint
*SERVERS
*AccSrv為費用計算服務,連接G_JF對應的數據庫
"AccSrv" ? ? ? ?SRVGRP="G_JF" ? SRVID=8001
…
*LogSrv為日志記錄服務,連接G_YZ對應的數據庫
"LogSrv" ? ? ? ?SRVGRP="G_YZ" ? SRVID=9001
…
TUXEDO通過對兩個事務的管理,完成一個完整交易過程,當兩個服務均返回成功,業務才成功受理。正常的事務控制需要對兩個事務進行嚴格控制,但在XA協議的TUXEDO應用,可使用共享的DBLINK[6],通過使用共享DBLINK,應用程序可以從當前數據庫執行另一個數據庫的DDL及DML操作。例如,在LogSrv服務中,該服務只記錄日志,如使用DBLINK,費用計算功能可通過該服務對應的oralce_1數據庫執行oracle_2數據庫的SQL,無需單獨設計AccSrv服務,節省了開發成本及時間,這一設計方式,雖然有如上優點,但在實際應用中發現存在如下風險:
(1)破壞XA協議多資源操作的一致性管理。XA具備多資源(多庫)的事務管理功能[7],該功能通過與多資源的通信來保障事務完整性,而在XA協議的應用中使用了DBLINK,則可以從一個資源上完成另一個或多個資源的操作任務,破壞了XA事務管理的完整性,多庫操作的數據一致性無法保障。仍以用戶繳費為例,當用戶繳費行為發生時,如使用XA協議管理兩個數據庫,LogSrv和AccSrv均需返回成功,交易才完成,否則全部回退。如使用DBLINK, XA的事務管理器只管理oracle_1,若在繳費過程中,oracle_1執行成功,oracle_2出現異常,XA事務管理器仍認為交易受理成功。如圖2所示,原應由XA事務管理的應用使用DBLNK在完成,XA的事務管理器無法獲取oracle_2的事務完成情況,因此異常情況下難以保障事務完整性及數據一致性,這在高可靠性的交易系統中,應當是被避免的。
使用DBLINK方式完成交易過程,系統正常運行下事務管理并無異常,而一旦出現一方數據庫異常終止,則出現部分交易成功,部分交易失敗的情況,這在交易系統中是嚴重缺陷。
(2)增加ORACLE數據庫會話數量。在現實維護中,發現使用共享DBLINK的系統,ORACLE數據庫異常停機風險高于其它系統。一個共享的DBLINK,會被多個會話使用,在XA事務中,即使事務提交了,這些會話也會被緩存在數據庫中,以便其它事務繼續使用,這從節省連接資源上,是一個很好的思路。但是在較大型的IT系統中,經過長時間運行,大量客戶端會產生大量共享連接,這些連接以會話形式保存下來,導致數據庫會話數量不斷增長,如果會話數量到達上限,新的會話將無法連接,ORACLE數據庫報ORA-00018: maximum number of sessions exceeded[8] 錯誤。若此時ORACLE需要申請新會話完成自身維護,這一需求將得不到滿足,處于保障機制,ORACLE數據庫會自動停止運行,從而導致大規模系統故障,如圖3所示。
筆者維護的IT交易系統,因在使用XA協議的TUXEDO應用中使用共享DBLINK,為系統安全埋下隱患,導致上半年連續兩次因共享DBLINK緩存過多會話,數據庫異常停止,引發全省交易系統故障,后緊急將相關業務下線并采用XA協議完成業務需求,隱患消除。
2 預防措施
為保障事務完整性及系統安全,應在開發中注意如下事項:
(1)在基于XA的TUXEDO的應用中,禁止使用共享DBLINK。DBLINK的使用,一方面增加系統耦合度,另一方面,也增加了系統安全運行風險。DBLINK禁用后,使用接口程序或第三方工具完成數據交互、傳輸[9]。
(2)適當增大最大會話數量。通過show parameter sessions查看最大會話數量,通過增大sessions參數,增加最大會話數量。一般最大會話數量為日常運行會話數量的2倍,需要注意的是,如果使用了共享DBLINK,增加回話數量只是緩解或延遲故障發生,無法根治,只作為保障措施使用。
(3)對數據庫會話數量進行監控。通過select count(1) from v$session獲取當前數據庫會話數量,通過對當前運行會話數量與最大值進行對比,一旦會話數量超過額定使用率,進行告警,及時進行人工干預,清理多余連接,避免數據庫會話到達上限。
3 結語
DBLINK的跨多數據庫操作給應用開發帶來一系列方便,但也增加了系統的耦合度,且在XA事務中使用,將破壞事務完整性功能,同時導致ORACLE數據庫會話不斷增多,進而引發數據庫故障,因此建議:在使用XA協議進行數據庫操作的應用中,應逐步禁用DBLINK,并對數據庫會話數量進行監控。
DBLINK的使用是長期積累的結果,如系統設計之初未進行嚴格管理,在大型的IT系統要取消DBLINK的使用,改造難度較大,應對DBLINK的使用進行嚴格管理及登記,根據重要度、優先級,逐步進行改造。
參考文獻
[1] 童旺宇,熊盛武,吳進波.TUXEDO在銀行中間業務系統中的設計與實現[J].計算機技術與發展,2007(7):240-243.
[2] 熊磊.TUXEDO中間件及在江蘇有線BOSS系統中的應用[J].有線電視技術,2013(8):82-84.
[3] 楊文兵,陳煉.Tuxedo中間件在電信計費系統中的應用設計方案[J].電腦知識與技術,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中間件的多層體系結構研究[J].計算機工程與應用,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數據庫應用程序開發[J].電腦編程技巧與維護,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系統Mosaic與Oracle間接口的設計與實現[J].計算機應用與軟件,2012,29(6):228-229,232.endprint