oracle 事务故障,处理Oracle的分布式事务故障

最近两天生产数据库一直在报ORA-24756错误,查了MOS上的文档,看到一篇类似的,说是BUG(Bug 19201866 - RECO reports ORA-24756 repeatedly into trace file (文档 ID 19201866.8)),但是HP-UX上的11.2.0.4没有解决需要升级到12.2版本,文档中还说重启实例也可以解决,但是不现实。

于是查报错时的trace文件都是如下的内容

***2017-02-0409:17:56.058

ERROR,tran=42.13.2709343,ose=0:

ORA-24756:

......

看到tran=42.13.2709343,印象中是分布式事务,于是查DBA_2PC_PENDINGS视图

SYS@db1>COLLOCAL_TRAN_IDFORMATA13

SYS@db1>COLGLOBAL_TRAN_IDFORMATA90

SYS@db1>COLSTATEFORMATA10

SYS@db1>COLMIXEDFORMATA3

SYS@db1>COLHOSTFORMATA10

SYS@db1>COLCOMMIT#FORMATA15

SYS@db1>SETLINESIZE240

SYS@db1>SELECTLOCAL_TRAN_ID,GLOBAL_TRAN_ID,STATE,FAIL_TIME,FORCE_TIME,RETRY_TIME,MIXED,HOST,COMMIT#

2FROMDBA_2PC_PENDING

3/

LOCAL_TRAN_IDGLOBAL_TRAN_IDSTATEFAIL_TIMEFORCE_TIMERETRY_TIMEMIXHOSTCOMMIT#

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

42.13.27093431096044365.31302E3235352E3233322E32332E746D313438363137313036383638333230333633collecting2017020409:17:552017020601:12:41nobosbpm4s764631398601

看到LOCAL_TRAN_ID和trace文件中的tran一致,刚开始的设想是正确的。其中FAIL_TIME是20170204 09:17:55对应到后台的alert日志中,看到这个时间前后的报错信息

SatFeb0409:17:502017

Error22trappedin2PContransaction42.13.2709343.Cleaningup.

Errorstackreturnedtouser:

ORA-02050:transaction42.13.2709343rolledback,someremoteDBsmaybein-doubt

ORA-00022:invalidsessionID;accessdenied

ORA-02063:precedinglinefromLINK_DB2

SatFeb0409:17:562017

DISTRIBTRAN41544f4d.31302E3235352E3233322E32332E746D313438363137313036383638333230333633

islocaltran42.13.2709343(hex=2a.0d.29575f)

insertpendingcollectingtran,scn=764631398601(hex=b2.079538c9)

SatFeb0409:17:562017

Errorsinfile/oracle11g/app/oracle/diag/rdbms/db1/db1/trace/db1_reco_23402.trc:

ORA-24756:

这种分布式事务故障可能会锁定数据导致其他事务报ORA-01591报错或者一直占用UNDO段不能被别的事务重用。需要手工处理这种故障。

SYS@db1>EXECUTEDBMS_TRANSACTION.PURGE_LOST_DB_ENTRY('42.13.2709343');

PL/sqlproceduresuccessfullycompleted.

SYS@db1>commit;

Commitcomplete.

SYS@db1>SELECTLOCAL_TRAN_ID,COMMIT#

2FROMDBA_2PC_PENDING

3/

norowsselected

清理完毕。

MOS文档:How to Purge a Distributed Transaction from a Database (文档 ID 159377.1)ORA-30019 When Executing Dbms_transaction.Purge_lost_db_entry (文档 ID 290405.1)

总结

以上是编程之家为你收集整理的处理Oracle的分布式事务故障全部内容,希望文章能够帮你解决处理Oracle的分布式事务故障所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值