您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 销售管理 > 第9章:TUXEDO的数据库编程
9.1TUXEDO如何处理分布式事务在两层的C/S结构中,客户端直接访问数据库,当采用TUXEDO中间件后,形成三层结构。这时,客户端不直接访问数据库,而是改为调用中间件TUXEDO服务端上的服务,由TUXEDO服务端访问数据库,并把结果返回给客户端。如图所示。TUXEDO支持ORACLE、SYBASE、INGRES、DB2等UNIX上的大型数据库和NT上的SQLServer,并且还支持C-ISAM文件系统。即可以通过XA协议,也可不用XA协议与数据库进行连接。在说明TUXEDO与数据库的连接的配置及编程之前,我们先解释一些名词。名词解释资源管理器(RESOURCEMANAGER):最常见的是数据库,可以是其他的,如TUXEDO的QUEUE,EJB的JMS等,它们对数据进行管理和维护.事务(TRANSACTION):事务的定义很多,简单地说,事务是对资源管理器的一组操作,它使所涉及的资源管理器从一个状态转变到另一个状态,这些操作要么全部成功,要么全部失败。事务具有以下的4个特征(一般称为ACID):原子性(ATOMICITY):指事务中的所有操作作为一个整体单元要么成功要么失败.一致性(CONSISTENCY):一致性意味着不管事务提交或放弃,参与事务的所以资源管理器在事务结束后都保持一种合法的状态.一致性也意味着,当一个事务结束时,所有的参与者都要释放它所锁住的资源.隔离性(ISOLATION):隔离性意味着事务正在处理过程中,在事务外面无法看到事务处理的中间结果.持久性(DURABILITY):使事务的最终结果已被真正写到磁盘系统中.本地事务(LOCALTRANSACTION):如果一个事务只涉及到一个资源管理器,那么该事务称为本地事务。在TUXEDO中,不通过客户端数据库客户端客户端TUXEDO应用服务器XA接口的事务都是本地事务,如:在ORACLE中,用EXECCONNECT建立与数据库的连接,并用EXECCOMMIT提交一个事务,那么该事务就是本地事务.全局事务(GLOBALTRANSACTION):全局事务涉及到一个或多个资源管理器,它也称为分布式事务(DISTRBUTEDTRANSACTION),对所有涉及的资源管理器的操作必须被看作单个工作单元。它们必须被同步,并在所有服务器上圆满完成,否则,就必须被彻底取消。例如:一个服务器在写过程中被关闭,那么事务处理中其他系统上的所有写的东西就必须被取消。在TUXEDO中,采用XA接口的事务都是全局事务。全局事务是相对LT而言的,它也有AICD四个特性,所不同的是它可以跨越多个资源管理器,这些资源管理器可能在不同的平台上。在TUXEDO中,一个全局事务最多可跨越16个不同的资源管理器.事务管理器(TRANSACTINMORNITOR):管理协调参与全局事务的各个资源管理器的准备,提交及回滚等操作,事务管理器还在出现场地故障、网络故障或全局资源死锁时协调全局事务的恢复。TUXEDO在全局事务中就充当事务管理器的作用。在一个全局事务中有一个事务协调器,有一个以上的资源管理器。事务协调器与资源管理器之间采用XA协议进行通讯在TUXEDO中一个GROUP只能有以个资源管理器,所以一个全局事务会跨越多个GROUPXA协议:XA协议由TUXEDO首先提出,并交给X/Open组织,作为资源管理器(数据库)与事务管理器的接口标准。Informix是最早宣布支持XA协议的数据库厂家,Informix5.0以上的版本都提供XA接口,以实现与TUXEDO的连接。目前,Oracle、Informix、DB2、Sybase等各大数据库厂家都提供对XA的支持.XA协议采用两阶段提交方式来管理分布式事务.XA接口提供资源管理器与事务管理器之间的进行通讯的标准接口,TUXEDO支持基本的XA规范(PRELIMINARYXASPECIFICATION),及最终的XA规范(THEFINALSPECIFICATION).XA协议包括两套函数,以xa_开头的及以ax_开头的.以下的函数使事务管理器可对RM进行操作xa_open,xa_close:建立,关闭与RM的连接xa_start,xa_end:开始,结束一个本地事务xa_prepare,xa_commit,xa_rollback:预提交,提交,回滚一个本地事务xa_recover:回滚一个已进行预提交的事务ax_开头的函数使RM可以动态在事务管理器中进行注册,并可以对XID(TRANSACTIONIDS)进行操作.说明:在FINALXASPECIFICATION中,用XID代替全局事务RIDax_reg,ax_unreg:允许一个RM在一个TMS(TRANSACTOINMANAGERSERVER)中动态注册或撤消注册.全局事务rid_开头的函数在PRELIMINARYXASPECIFICATION中有,在FINALXASPECIFICATION中没有定义.全局事务rid_cmp:比较两个全局事务RID全局事务rid_fmt:格式化一个全局事务RID,以便打印全局事务rid_hash:根据全局事务RID,生成一个HASH值.现在主要的数据库都支持FINALXASPECIFICATIONTUXEDO中的全局事务有以下特点:1.可以在客户端或服务端开始一个全局事务2.在TUXEDO中全局事务能跨越多个进程3.每个全局事务有一个唯一的ID号(全局事务RID)标识,它可在TUXEDO的进程间传递。4.全局事务可以跨越DOMAIN一个全局事务从发起到提交的过程:全局事务的提交采用两阶段提交方式.在两阶段提交过程中,应用程序是事务提交得发起者,应用程序通过调用TPCOMMIT()开始一个事务的提交,该应用所在GROUP的TMS是这个事务的协调者(COORDINATOR),我们称之为COORDINATORTMS,其他参与本事务的GROUP所对应的TMS,我们称之为:SUBORDINATETMS,CORDINATORTMS负责与所有参与本全局事务的RM的通讯.完成该事务的提交,整个过程如下:1.应用程序通过调用TPCOMMIT()开始一个事务的提交2.CORDINATORTMS给参与该全局事务的每个GROUP中的TMS发送请求,每个TMS要求RM进行预提交操作3.每个RM各自进行预提交,预提交指把要更改的数据写到磁盘上,以便在失败时可以进行恢复.但没有真正更新RM4.当RM预提交完毕,每个SUBORDINATETMS都把预提交操作结果(成功或失败)告诉给COORDINATORTMS,5.如果有任何一个RM预提交失败,或COORDINATORTMS得不到它的应答,那么COORDINATORTMS告诉所有的RM回滚它们各自的本地事务.如果所有的RM预提交都成功,那么COORDINATORTMS在它所在机器的TLOG文件中写一条记录,内容包括该全局事务的全局事务RID,参与该全局事务的所以RM的列表及其他信息.以便在第二阶段提交失败时回滚.6.下一步做什么取决于在UBBCONFIG中TP_COMMIT_CONTROL得设置TP_CMT_LOGGEDTPCOMMIT()调用返回,程序继续往下走,各个RM各自进行真正得提交操作,如果在第二阶段提交失败,TMS时是不知道的.而这是TPCOMMIT()已返回成功.TP_CMT_COMPLETETPCOMMIT()会等到第二阶段提交完成才返回,如果在第二阶段提交失败,TMS是知道的.并且TPCOMMIT()会返回失败.默认值是TP_CMT_COMPLETE事务模式和非事务模式:TUXEDO的应用程序可分为两种,事务模式和非事务模式,有以下两种方式可以使一个TUXEDO应用处于事务模式下:1.显式:通过调用tpbegin(),显式开始一个全局事务2.隐式:在UBBCONFIG中对一个SERVICE设置了AUTOTRAN=Y,当该SERVICE被调用时,TUXEDO会自动启动一个全局事务注意:AUTOTRAN=Y只对全局事务起作用,对本地事务不起作用。例如:下面的程序中SERVICEA中调用了SERVICEBA(TPSRCINFO*RQST){tpcall(B,..........,flags)}那么:如果A当前不处于事务模式中,A在UBBCONFIG中设置了AUTOTRAN=Y,则系统自动起一个全局事务如果A当前已处于事务模式中,A在UBBCONFIG中设置了AUTOTRAN=Y,则:1.如果tpcall()中的flags没有设置TPNOTRAN(默认方式是不设置)那么SERVICE:B参与当前的事务。2.如果tpcall()中的flags为TPNOTRAN,那么SERVICE:B不参与当前的事务。注意:如果在UBBCONFIG中对SERVICEB设置了AUTOTRAN=Y,那么当前的事务被自动挂起,系统为B自动起一个新的事务,如果B中的事务失败了,对A中的事务没有影响。TUXEDO中与全局事务有关的设置:与全局事务有关的设置包括:RESOURCE,MACHINE,GROUPS,SERVICE4个节在RESOURCE中设置主要有:MAXGTT(MAXGlobalTransaction)在任一时刻在某一台服务器上最多可以有多少个全局事务存在,也就是可以最多有多少个未提交的全局事务,范围:0-32767。0意味着该系统不支持事务,默认值是100.该值也可在MACHIENS中设置。在MACHINES中设置的值回覆盖在RESOURCE中的设置值。GTT(GlobalTransactionTable)TUXEDO在BULLETINBOARD中维护的一张表,用于记录全局事务的状态信息,在该台服务器上发起的或该台服务器参与的每个全局事务,在GTT中都对应一条记录.每台服务器的GTT中最多可以有多少条全局事务的记录是由MAXGTT决定的,当一个全局事务成功提交时,它在GTT中的记录将被删除.如果该全局事务提交失败,它在GTT中的记录还会保持一段时间,一般是5分钟.所以GTT应该大于TLOGSIZE。GTT的范围为0-64,000,默认值为100,可以在MACHINE中覆盖该设置.CMTRET:设置TP_COMMIT_CONTROL的初始值,该值可以由在tpscmt()中重新设置.与MACHINES有关的设置:在MACHINES中设置每台机器中的全局事务日志文件的位置和大小.TLOGDEVICE:指定包含TLOG文件的TUXEDO文件系统名,长度不能超个64个字符TLOGNAME:TLOG文件的名称TLOGSIZE:TLOG文件的大小,它的大小为0=TLOGSIZE=2048,默认值为100如果一个全局事务跨越多台服务器,在每台服务器上都应该有一个TLOG文件,用于记录全局事务的信息,在全局事务要回滚时要用到记录在TLOG中的信息.TLOG可以创建在裸设备上.如果一个全局事务在该台机器上发起但还没有提交,那么它在TLOG文件种占有一页的空间,在一般的平台上一页的大小使512字节,,当该全局事务成功提交或回滚后,它在TLOG中的记录将被删除。与GROUPS有关的设置:在TUXEDO中一个GROUP中只能定义一个资源管理器,如果一个TUXEDO系统有多个资源管理器,就要定义多个GROUP才行.在GROUP中定义TMS的名称及个数,打开,关闭该资源管理器的参数,不同的资源管理器的设置都不一样.SERVICES中的设置:AUTOTRAN:如果一个客户端调用了设置AUTOTRAN=Y的SERVICE,并且该客户端当前不在事务模式下,那么TUXEDO自动为该SERVICE启动一个全局事务.TRANSTIME:对因设置了AUTOTRAN的而起动的事务设置超时时间.默认为30秒,0表示没有超时。全局事务中用到的函数在TUXEDO中有两套操作全局事务的函数ATMITUXEDO自己提供的函数TX由X/OPEN定义的函数它们基本差不多,因为TX是以ATMI为基础定义的.区别1.TX提供CHAINEDTRANSACTIONS,ATMI不提供2.TX以tx_开
本文标题:第9章:TUXEDO的数据库编程
链接地址:https://www.777doc.com/doc-4584066 .html