LIBTUX_CAT:481: ERROR: Service xa_start 事务启动失败_MQ, Tuxedo及OLTP讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MQ, Tuxedo及OLTP讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3208 | 回复: 0   主题: LIBTUX_CAT:481: ERROR: Service xa_start 事务启动失败        下一篇 
d87025284
注册用户
等级:新兵
经验:62
发帖:59
精华:0
注册:2011-10-31
状态:离线
发送短消息息给d87025284 加好友    发送短消息息给d87025284 发消息
发表于: IP:您无权察看 2014-12-25 16:16:53 | [全部帖] [楼主帖] 楼主

tuxedo事务控制测试

原因分析:服务里面对数据库进行了插入,修改删除等操作而没有COMMIT或ROLLBACK,tuxedo就会自动开始一个本地事务.
tuxedo全局事务会对应一个本地连接的事务,而上面这种情况下tuxedo又想自动启动一个本地事务.
相当于一个单线程程序里面同时启动两个事务.这是不可能出现的,同时只能有一个事务
解决方案:找到tpcall时出这个错误的被调服务程序.
方案1.程序里面使用EXEC SQL COMMIT WORK;或EXEC SQL ROLLBACK;防止tuxedo自动启动一个本地事务

方案2.使用AUTOTRAN=Y,这样这个程序会自动运行在一个全局事务里面,操作也会服务返回就提交

方案3.可用有特殊原因,比如需要多次调用服务后在某种条件发生时才提交
  服务调用时使用TPNOTRAN参数.这样当程序退出时,tuxedo会自动提交这个事务,或
----------------------------------------------------------------
首次发帖,请大侠们多多指教!!!!!!!!!!!!!
--------------------------------------------------------------

例子1:

ubbconfig
...
*SERVICES
CALLTEST AUTOTRAN=N


客户端没有tpbegin等事务控制

extern "C"
void CALLTEST(TPSVCINFO *rqst)
{
      ...
      userlog("no transtciton");//此时不在事务中
      EXEC SQL INSERT TAB_TEST VALUES('111','222');//开始本地事务
      userlog("in local transaction");//此时在本地事务中
      tpbegin(30,0);//启动全局事务,出现LIBTUX_CAT:481: ERROR: Service xa_start returned -9错误
      ...
}
-----------------------------------------------------------------------


例子2
客户端没有任何tpbegin,tpcommit...
服务端

extern "C"
void CALLTEST(TPSVCINFO *rqst)
{
      ...
      userlog("no transtciton");//此时不在事务中
      EXEC SQL INSERT TAB_TEST VALUES('111','222');//开始本地事务
      userlog("in local transaction");//此时在本地事务中
      ...
}


服务调完以后,查询数据库,发现没有数据
tmsutdown 这个服务后,数据被提交到数据库
-----------------------------------------------------------------------
例子3
客户端没有tpbegin事务控制

ubbconfig
...
*SERVICES
CALLTEST AUTOTRAN=Y
extern "C"
void CALLTEST(TPSVCINFO *rqst)
{
      ...
      userlog("no transtciton");//全局事务
      EXEC SQL INSERT TAB_TEST VALUES('111','222');//不新起事务
      userlog("in local transaction");//全局事务
      ...
}


--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论