ITPub博客

首页 > Linux操作系统 > Linux操作系统 > tuxedo中oracle提交事务报2089

tuxedo中oracle提交事务报2089

原创 Linux操作系统 作者:wuft2003 时间:2010-08-04 16:52:26 0 删除 编辑

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  -----> 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博客 ” ,链接:https://blog.itpub.net/21634752/viewspace-670292/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 向佛记之十七
请登录后发表评论 登录
全部评论

注册时间:2009-05-12

  • 博文量
    295
  • 访问量
    383685