tuxedo中oracle提交事务报2089

02089, 00000, "COMMIT is not allowed in a subordinate session"
// *Cause: COMMIT was issued in a session that is not the two-phase commit
//         global coordinator.
// *Action: Issue commit at the global coordinator only.

在tpcall 一个服务中,如果单独的commit , 回报2089的错误;

在网上找了一下资料,基本上很难实现在不建立新数据连接的情况下,提交已经做的修改。

解决方法找到了三个:

1.   在程序中断掉原来的数据库连接, 建立新的连接。

这种情况有很多问题,断开的时候如果提交的话,不能提交成功,所以可能会把原来的提交回滚。自己一定要管理号对事物的控制,高手能用!

2.在服务中tpcall 一个new service, tpcall 一个新的服务,这种会包括建立数据库的连接, 事务控制,这是一个中很好理解,很好的方法,很多人都是用的这种方法。

tpcall   ---》service_A  -----》tpcall  sevice_B  ( select updae , insert delete   commit  , exit) --- >service A  -----&gt ok

3. 在网上还搜到了一个新的方法,

仍然是建立新的数据库连接,不过在建立新的连接的时候指定子标识符号

EXEC SQL CONNECT :h_sqlusr IDENTIFIED BY :h_sqlpwd AT :h_conn USING :h_sid;

AT 指定子标识符号!

在更新,EXEC SQL At :newLink
               update tb_tablea

EXEC SQL At :newLink  INSERT

EXEC SQL At :newLink  DELETE

提交:

 EXEC SQL AT :newLink COMMIT ;

or

EXEC SQL AT :newLink COMMIT WORK RELEASE;

 

回滚:

EXEC SQL AT :newLink rollback WORK RELEASE;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/21634752/viewspace-670292/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/21634752/viewspace-670292/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值