解决生产环境上日志报事务回滚的问题

来源:互联网 发布:自学java好还是培训好 编辑:程序博客网 时间:2024/05/22 01:31

日志报错代码 :
[10-6-12 9:44:01:602 GMT+08:00] 0000004d LocalTranCoor W WLTC0033W: 清除 LocalTransactionContainment 时,资源 jdbc/DB2 Universal JDBC Driver DataSource 回滚。
[10-6-12 9:44:01:604 GMT+08:00] 0000004d LocalTranCoor W WLTC0032W: 清除 LocalTransactionContainment 期间回滚了一个或多个本地事务资源。

2、原因
1由于数据库资源(预执行的事务)没有显示commit,connection没有关闭,导致一直没有释放资源,等到超时的时候或者机制自动启动回收资源的时候,会把数据库缓冲的事务回滚。

2数据库缓冲资源有限,如果数据库操作或事务量很大,超过时间限制的也会回滚,或者还没轮到执行的事务,也会回滚。

3、解决方法
对于本信贷系统原因,是底层代码把数据库的自动提交属性设置为false,因此在页面代码必须显示commit,否则就一直不会释放资源。(直接原因,是页面代码漏了commit()方法)。
由于该事务是select语句,并没有对数据库进行修改,所以即使回滚了,也没有引起生产上的故障。但是若是update、insert等事务,就会执行不了。

参考资料
http://bbs.csdn.net/topics/90165953
http://www.webspherechina.net/Question/14706

0 0