DB Transaction controlling
如果事务控制在服务端,首先要在tpsvrinit()中连接数据库,在tpsvrdone()中断开连接,这些查一下以前的,然后再事务开始的地方使用 tpbegin(30,0),之后可以进行update,insert之类的操作,完成后使用tpcommit(),一定要检查一下tpcommit() 的返回值,如果是-1则事务提交失败。
如果在客户端控制事务,服务端:首先要在tpsvrinit()中连接数据库,在tpsvrdone()中断开连接,之后可以进行update,insert之类的操作,然后正常返回tpreturn()
客户端:首先tpbegin(30,0),然后tpcall(),如果tpcall()成功,tpcommit(),
这样做,比较消耗资源,但能从客户端控制多数据源的数据同步更新。
这个问题有点复杂:
1. TUXEDO中的XA,客户端和服务端都是可以tpcommit()的,因为在内部是tpcall("..TMS",..),事务的提交和回滚走的是另一条通道,另一个SESSION,这才是XA的魅力。
2. 如果用XA的话,要在UBB中配置TMS及其OPENINFO,在程序中要用tpopen()/tpclose()
3. 在X/OPEN的规范上,ORACLE又申明了动态XA的规范,但TUXEDO不怎么支持,如果RM文件中switch结构用xaoswd而不是xaosw就会也出这个问题。
请教:采用xa方式与oracle数据库连接,数据库的数据不能及时刷新,怎么回事?
谢谢各位了!我的问题终于解决了,原来是我在RM文件中用了xaoswd了
posted by MiDBA at 9/25/2004 09:55:00 AM
![]()


<< Home