第九章TUXEDO的数据库编程Word格式.docx
- 文档编号:19715098
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:45
- 大小:109.65KB
第九章TUXEDO的数据库编程Word格式.docx
《第九章TUXEDO的数据库编程Word格式.docx》由会员分享,可在线阅读,更多相关《第九章TUXEDO的数据库编程Word格式.docx(45页珍藏版)》请在冰豆网上搜索。
在TUXEDO中,采用XA接口的事务都是全局事务。
全局事务是相对LT而言的,它也有AICD四个特性,所不同的是它可以跨越多个资源管理器,这些资源管理器可能在不同的平台上。
在TUXEDO中,一个全局事务最多可跨越16个不同的资源管理器.
事务管理器(TRANSACTINMORNITOR):
管理协调参与全局事务的各个资源管理器的准备,提交及回滚等操作,事务管理器还在出现场地故障、网络故障或全局资源死锁时协调全局事务的恢复。
TUXEDO在全局事务中就充当事务管理器的作用。
在一个全局事务中有一个事务协调器,有一个以上的资源管理器。
事务协调器与资源管理器之间采用XA协议进行通讯在TUXEDO中一个GROUP只能有以个资源管理器,所以一个全局事务会跨越多个GROUP
XA协议:
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代替全局事务RID
ax_reg,ax_unreg:
允许一个RM在一个TMS(TRANSACTOINMANAGERSERVER)中动态注册或撤消注册.(transactionmanagerserver)
全局事务rid_开头的函数在PRELIMINARYXASPECIFICATION中有,在FINALXASPECIFICATION中没有定义.
全局事务rid_cmp:
比较两个全局事务RID
全局事务rid_fmt:
格式化一个全局事务RID,以便打印
全局事务rid_hash:
根据全局事务RID,生成一个HASH值.
现在主要的数据库都支持FINALXASPECIFICATION
TUXEDO中的全局事务有以下特点:
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各自进行预提交,预提交指把要更改的数据写到磁盘上,以便在失败时可以进行
恢复.但没有真正更新RM
4.当RM预提交完毕,每个SUBORDINATETMS都把预提交操作结果(成功或失败)告诉给
COORDINATORTMS,
5.如果有任何一个RM预提交失败,或COORDINATORTMS得不到它的应答,那么
COORDINATORTMS告诉所有的RM回滚它们各自的本地事务.
如果所有的RM预提交都成功,那么COORDINATORTMS在它所在机器的TLOG文件中
写一条记录,内容包括该全局事务的全局事务RID,参与该全局事务的所以RM的列表及
其他信息.以便在第二阶段提交失败时回滚.
6.下一步做什么取决于在UBBCONFIG中TP_COMMIT_CONTROL得设置
TP_CMT_LOGGED
TPCOMMIT()调用返回,程序继续往下走,各个RM各自进行真正得提交操作,如果在第二阶段提交失败,TMS时是不知道的.而这是TPCOMMIT()已返回成功.
TP_CMT_COMPLETE
TPCOMMIT()会等到第二阶段提交完成才返回,如果在第二阶段提交失败,TMS是知道的.
并且TPCOMMIT()会返回失败.默认值是TP_CMT_COMPLETE
事务模式和非事务模式:
TUXEDO的应用程序可分为两种,事务模式和非事务模式,有以下两种方式可以使一个TUXEDO应用处于事务模式下:
1.显式:
通过调用tpbegin(),显式开始一个全局事务
2.隐式:
在UBBCONFIG中对一个SERVICE设置了AUTOTRAN=Y,当该SERVICE被调用
时,TUXEDO会自动启动一个全局事务
注意:
AUTOTRAN=Y只对全局事务起作用,对本地事务不起作用。
例如:
下面的程序中SERVICEA中调用了SERVICEB
A(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中有两套操作全局事务的函数
ATMI
TUXEDO自己提供的函数
TX
由X/OPEN定义的函数
它们基本差不多,因为TX是以ATMI为基础定义的.区别
1.TX提供CHAINEDTRANSACTIONS,ATMI不提供
2.TX以tx_开始,而ATMI以tp开始,如tx_begin(),tpbegin()
3.TX在tx.h中定义,ATMI在atmi.h中定义
TX_开头的函数一般很少用,在此不作介绍。
inttpopen(void)
描述:
建立与一个资源管理器得连接,该资源管理器是该SERVER所在得组中定义的.并且在buildserver时要用-r参数指定该资源管理器.如果采用默认的TPSVRINIT()该函数会自动被调用。
参数:
无
返回值:
失败返回-1,错误号保存在全局变量tperrno中。
inttpclose(void)
关闭与一个资源管理器得连接,如果采用默认的TPDONE()该函数会自动被调用,
失败返回-1,错误号保存在全局变量tperrno中。
inttpbegin(unsignedlongtimeout,longflags)
开始一个全局事务
timeout:
全局事务的超时时间,从tpbegin()开始,过了TIMEOUT秒该全局事务还没有完成,
该全局事务将因超时而回滚,范围为0to231-1秒,0表示可以为无穷长。
注
意:
TIMEOUT应该大于SCANUNIT
FLAGS:
保留值,现在没有用到,要设为0
inttpcommit(longflags)
对一个全局事务进行提交操作
FLAG应该设为0
inttpabort(longflags)
对当前的全局事务进行回滚
inttpsuspend(TPTRANID*tranid,longflags)
挂起当前的全局事务,一个全局事务的发起进程A可以调用它,并把得到的句柄传给在同一台机器上另一个进程B,在B中可以调研TPRESUME()重起该全局事务.如果不是在一个全局事务的发起进程中调用TPSUSPEND(),那么只能在进程中调用TPRESUME().
注意:
一个全局事务被挂起之后,超时仍然起作用.
tranid:
如果调用成功,返回一个当前全局事务的句柄
成功返回一个当前全局事务的句柄,
inttpresume(TPTRANID*tranid,longflags)
重新开始一个全局事务
要重新开始的全局事务的句柄,为tpsuspend()中参数tranid返回值
flags:
应该设为0
inttpscmt(longflags)()
设置TP_COMMIT_CONTROL得值
FLAG有两个值
TP_CMT_LOGGED:
TPCOMMIT()在第一阶段完成之后就返回.
TP_CMT_COMPLETE:
TPCOMMIT()在第二阶段完成之后才返回.
inttpgetlev()
返回当前所处得全局事务状态.
1:
在一个全局事务中,0:
不在一个全局事务中,
9.2ORACLE数据库XA的配置
TUXEDO服务器可以和ORACLE数据库在同一台服务器上,也可以在不同的机器上,如果在不同的机器上,在TUXEDO的服务器上安装一个ORACLE的客户端。
从上一节的内容我们知道TUXEDO服务器与ORACLE数据库连接有两种方式:
1、不通过XA接口直接互连。
适用于整个系统只有一个数据库的情况。
不需要作任何的配置。
2、通过XA接口互连,对整个系统有一个数据库或多个数据库都适用,要进行一些配置工作
才行。
下面介绍采用这种互连方式的配置方法。
系统说明:
TUXEDO版本:
7.1安装目录d:
\tuxedo71
ORACLE版本:
8.1.5安装目录d:
\ora81
操作系统:
win2000
配置的步骤:
一、ORACLE的的配置
1.用internal用户(缺省的口令是oracle)进入SQLPLUS
C:
\>
sqlplusinternal/oracle
2.运行ORACLE的安装路径下的/rdbms/admin/xaview.sql
SQL>
@d:
\ora81\rdbms\admin\xaview.sql
3.授权
grantselectonv$xatrans$topublicwithgrantoption;
grantselectonv$pending_xatrans$topublicwithgrantoption;
4.用system用户(缺省的口令是manager)连接并授权
connectsystem/manager
grantselectanytabletopublic;
二、TUXEDO的配置
1.修改TUXEDO安装路径的udataobj目录下的RM文件,把以Oracle_XA:
xaosw:
开头
的一行用#注释掉,并加入一行:
Oracle_XA;
xaosw;
d:
\ora81\rdbms\xa\oraxa8.libd:
\ora81\precomp\lib\msvc\orasql8.lib
如果是在UNIX环境下,则为:
Oracle_XA:
-L${ORACLE_HOME}/lib-lclntsh
2.在TUXEDO用户下创建TMS文件:
TMS_ORA8i,TUXEDO通过TMS_ORA8i与ORACLE数据
库采用XA协议进行通讯
buildtms-od:
\tuxedo71\bin\TMS_ORA8i-rOracle_XA
如果TUXEDO服务端与ORACLE数据库不在同一台服务器上,可能会提示找不到
库文件oraxa8.lib和orasql8.lib,可到ORACLE数据库的服务端相应目录下把这两
个文件拷到当前机器ORACLE的客户端下的对应目录下.
3.配置UBBCONFIG
1.在*MACHINES节中增加:
TLOGDEVICE="
/home/oracle/temp/simpdb/TLOG"
TLOGNAME=TLOG
TLOGSIZE=200
2.改*GROUPS节的配置为:
(scott/tiger为本数据库所采用的用户及口令,可根
据需要更改)
*GROUPS
GROUP1LMID=simpleGRPNO=1
OPENINFO="
Oracle_XA:
Oracle_XA+Acc=P/scott/tiger+SesTm=600+MaxCur=5+
LogDir=."
TMSNAME="
TMS_ORA8i"
TMSCOUNT=2
修改后的配置文件ubb内容如下
IPCKEY123456
DOMAINIDsimpapp
MASTERsimple
MAXACCESSERS100
MAXSERVERS50
MAXSERVICES100
MODELSHM
LDBALN
*MACHINES
serverLMID=simple
APPDIR="
\test"
TUXCONFIG="
\test\tuxconfig"
TUXDIR="
\tux71"
TLOGDEVICE="
\test\TLOG"
TLOGNAME=TLOG
TLOGSIZE=100
GROUP1LMID=simpleGRPNO=1OPENINFO="
Oracle_XA+Acc=P/scott/tiger+SqlNet=DEMO+SesTm=600+M
axCur=5+LogDir=."
*SERVERS
DEFAULT:
CLOPT="
-A"
testSRVGRP=GROUP1SRVID=1
*SERVICES
说明:
OPENINFO的含义
P:
指定用户名与口令,通过该用户名与口令与数据库建立连接,上面的配置
中用户为scott,口令为tiger
SqlNet:
如果TUXEDO服务器与数据库服务器不在同一台机器上,TUXEDO上的
ORACLE客户端通过网络方式与数据库服务器建立连接,
在OPENINFO中的SqlNet指定该数据库的SID,如在上面的配置中该数据库
的SID=DEMO,如果不SqlNet指定,在生成的TRC文件中会有如下错误:
xaolgn_help:
XAER_RMERR:
OCIServerAttachfailer.ORA-12154
ORA-12154:
TNS:
无法处理服务名
SesTm(Sessiontimelimit):
maximumtimeatransactioncanbeinactive
MaxCur:
最多可以同时打开多少个CURSOR
4.重命名下列文件,因为下列文件名与ORACLE带的文件名有冲突,所以要改名。
1.TUXEDO安装路径include目录下的下面文件
把sqlca.h改名为sqlca.h.bbb
把sqlcode.h改名为sqlcode.h.bbb
把sqlda.h改名为sqlda.h.bbb
2.重命名TUXEDO安装路径lib目录下的下面文件
把libsql.lib改名为libsql.lib.bbb
5.用TMADMIN创建TLOG文件,TUXEDO用一个文件TLOG记录对数据库操作的日志。
用于协
调分布式数据库的提交与回滚.
D:
tmadmin
>
crdl-b500-zd:
\test\TLOG
crlog-msimple
q
三、服务端的程序:
test.pc
功能:
根据客户端传的EMPNO到表EMP中取ENAME的值,并把它返回给客户端
#include<
stdio.h>
atmi.h>
userlog.h>
EXECSQL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第九 TUXEDO 数据库 编程