现象:dms中几乎所有的入库出库都报错
2005-12-10 09:12:53 [ERROR] com.topup.ent.kroraina.model.sysmgmt.usersqlquery.USqlQueryDAO (USqlQueryDAO.java :4255) - error=java.sql.SQLException: ORA-01591: 锁定已被有问题的分配事务处理20.18.156406挂起
ORA-01591: 锁定已被有问题的分配事务处理20.18.156406挂起 ORA-06512: 在"XXDMS.P_UPDATEITEMCOST", line 45 ORA-06512: 在"XXDMS.P_ORDCREATE_AF_10191", line 15 ORA-06512: 在"XXDMS.P_ORDCREATE_AF_10170", line 115 ORA-06512: 在line 1
查到XXDMS.P_UPDATEITEMCOST", line 45 是查询t_order_trans表,到OEM里看
进入锁,根本没发现相关的对象被锁定,
重启数据库之后做入库单还是不行 报同样的错误
查看视图DBA_2PC_PENDING,发现该事务的痕迹
看来出错原因:远程事务失败,但是又没有返回造成分布式事务挂死,从而锁定了行,数据库中有操作
,远程操作
于是登陆数据库
COMMIT FORCE '20.18.156406';
然后查看DBA_2PC_PENDING发现状态已经改为'COMMIT FORCE',SELECT该表相关行,一切正常。至此,故障解决。
总体来看,直接INSERT ... 还是很危险的,遇上不能正常返回就出问题了。Oracle的文档是推荐使用包或者存储过程来解决,此后建议同事改用此方法,目前已经测试通过。
Trackback: