基于XA协议的TUXEDO应用与共享DATABASE LINK的风险分析

2014-12-30 15:15高宏娟于刚
科技创新导报 2014年32期

高宏娟+于刚

摘 要:在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