一,问题描述:
在数据库月结过程中,应用层序出现报错如下:
ORA-01591 LOCK held by in-doubt distributed transaction 54.15.22626
Error:2147217900
source: OraOLEDDB
sql state:
native error 1591
Context Information
machine: TS-QUANTUN
window user: qqsysusers
database qt
SQL statements causing the error
操作系统从月初1月,上午10点后开始持续报错。
第二天发现存储网络不稳定导致两个节点之间切换,决定关闭一个节点重新执行事务月结, 查询仍然有DISTRIBTRAN,,在事务中,失败,重新执行月结功能。
总结:由于网络引起的Oracle 数据库中执行大事务,在分布式数据库中数据传输,导致失败,如果继续执行生产数据库又可能直接宕机,及时给客户说明原因,关闭数据库大事务,重新跑批月结执行。
二、问题处理
2.1.查询数据库中的事务信息:
select * from dba_2pc_pending;
这时候看到local_tran_id='41.39.330' 的事务。
2.2强行回退
rollback force '41.39.330'
2.3 再次查询事务状态
select * from dba_2pc_pending;
2.4 清除此事务信息
delete from sys.pending_trans$ where local_tran_id='41.39.330';
delete from sys.pending_sessions$ where local_tran_id='41.39.330';
delete from sys.pending_sub_sessions$ where local_tran_id='41.39.330';
commit;
exec dbms_transaction.purge_lost_db_entry('41.39.330')
2.5.数据库日志回退分布式事务: