Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72321
  • 博文数量: 25
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2008-12-08 09:35
文章分类

全部博文(25)

文章存档

2011年(1)

2009年(18)

2008年(6)

我的朋友

分类: Oracle

2008-12-25 23:01:45

现象: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:

阅读(867) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~