1. 清理分布式事务语句:
select 'rollback force '||''''||local_tran_id||''''||';' "RollBack"
from dba_2pc_pending
where state='prepared';
select 'exec dbms_transaction.purge_lost_db_entry('||''''||local_tran_id||''''||');' "Purge"
from dba_2pc_pending;
需commit(之前一直漏也没问题,rollback force这应该和rollback结束事务类似,无需commit啊,exec dbms包应该也不需要提交;纯属个人揣测)
2. 把查询处理的rollback force语句执行就hang住了,搜了下要执行exec dbms_transaction,手动执行就报
ORA-06510 unhandled user-defined exception
ORA-0’6512 SYS.DBMS_TRANSACTION line 107
3. 执行rollback force的会话的等待事件为free global transaction table entry,且没有阻塞
4.查看数据库当前的等待事件,异常等待事件就是enq: DR – contention(因为没看过)
5. 查询阻塞,9560,自己阻塞自己(2b了,没查blocking_instance,这是RAC,后来才知道这个是3节点的9560会话阻塞了1节点的9560会话,我是在1节点操作的)
6. 如果这时在3节点执行rollback force,应该可以了。
7.后来把4个节点的RECO进程全杀掉,非核心进程,杀掉后会自动启动。
自己虚拟机环境测试截图:
8. 在1节点操作rollback force还是hang住,在3节点操作就没问题。
9. 搜索的关于类似的问题,墨天轮上有一篇文章可参考
标签:dbms,rollback,hang,9560,事务时,force,节点,分布式 From: https://www.cnblogs.com/gwgwgw/p/16859753.html