系统中偶尔会出现ORA-01591  分布式事务锁的问题。每次把事务回滚了。隔一段时间(几天或是十几天)又出现。哪位大神可以告诉我ORA-01591 产生的原因。以及解决方案么?对于ORACLE  还不是很精。所以请尽量描述详细点。谢谢

解决方案 »

  1.   

    一般情况下,Oracle错误最快的解决办法是查错误编码,比如楼主这里是:ORA-01591。就直接去Google下,有时候不能给出你准确答案,却常常能让给你点提示,楼主可以参考以下文章:http://www.mscto.com/Oracle/2009030888843.htmlhttp://blog.csdn.net/csucxcc/article/details/5727560
      

  2.   

    谢谢楼上的回答。我最最想知道的就是ORA_01591  倒底是怎样产生的。哪些场景会报ORA_01591错误...每种场景报错后对应的处理方式。有哪位大神赐教一下呀。
      

  3.   

    这个估计需要根据其中的SQL语句排查了,发现死锁时,你先用相关工具或者自己写SQL查看下是哪一句SQL锁住了表,然后围绕该SQL进行排查。
      

  4.   

    看alert log里面有没有相关的信息,应该用trc记录,把trc信息贴出来
      

  5.   

    ORA-01591: lock held by in-doubt distributed transaction string 
    Cause: Trying to access resource that is locked by a dead two-phase commit transaction that is in prepared state.
    Action: DBA should query the pending_trans$ and related tables, and attempt to repair network connection(s) to coordinator and commit point. If timely repair is not possible, DBA should contact DBA at commit point if known or end user for correct outcome, or use heuristic default if given to issue a heuristic commit or abort command to finalize the local portion of the distributed transaction.看来还是锁引起的,查锁吧  
    v$lock,v$locked_object
      

  6.   

    看来还是锁引起的,查锁吧   
    v$lock,v$locked_object
      

  7.   

    看alert log里面有没有相关的信息,应该用trc记录,把trc信息贴出来
      

  8.   


    alert log 是在哪里看呀? 
     
    rdbms/log/ 目录下没有生成trc信息.  下面我收集了一些错误信息.程序日志打印的错误
    Error - OCI_ERROR:[code:1591, msg:ORA-01591: lock held by in-doubt distributed transaction 5.14.2258这个是dba_2pc_pending 中,这条锁定的事务记录(必须要回滚再可以让程序执行,所以我把事务回滚了)
    1 5.14.2258 113577.574B0D6B9299E0FB3E147D37C03101C92951BA5E forced rollback no 2012/5/2 21:24:21 2012/5/2 23:43:58 2012/5/6 21:08:31 cics p750blpar4 9464444390203这条是pending_trans$中的记录。
    15 5.14.2258 113577 574B0D6B9299E0FB3E147D37C03101C92951BA5E forced rollback P 00000001 00000000 0 2012/5/2 21:24:21 2012/5/2 23:43:58 2012/5/6 21:08:31 cics p750blpar4 9464444390203