程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ORA-01591:lockheldbyin-doubtdistributedtransaction問題解決

ORA-01591:lockheldbyin-doubtdistributedtransaction問題解決

編輯:Oracle教程

ORA-01591:lockheldbyin-doubtdistributedtransaction問題解決


昨天跑批量數據的程序時遇到oracle錯誤:

$tail -f INDB_ERROR_8.LOG

[Time]2014-12-01 04:10:31: activeAccountDeposit in oracle error: =ORA-01591: lock held by in-doubt distributed transaction 20.21.65527021
[Time]2014-12-01 04:10:31: 文件:/billing/drecv4/drecvlog/201411/DRECV/tmp/8-15-accountdeposit.dat改名到/billing/drecv4/drecvlog/201411/DRECV/tmp/8-15-accountdeposit.dat.err失敗!ORA-01591: lock held by in-doubt distributed transaction 20.21.65527021
DwriteOffCore.cpp:3152
[Time]2014-12-01 04:10:31: 8-15-accountdeposit.dat更新表發生錯誤!ORA-01591: lock held by in-doubt distributed transaction 20.21.65527021
DwriteOffCore.cpp:4431

[Time]2014-12-01 04:10:31: 入庫發生錯誤!

重復跑程序錯誤依舊。

打開數據庫,查看這個tran_id確實有,其實是11月19號的時候就留下了這個事務。這是分布式事務的問題,當執行這個事務的時候遇到一些問題,比如網絡問題,oracle就會卡住在這裡,一直留著,當後面你更新到這條數據的時候就會報這個錯。

\

然後找dba,他執行一下:

rollback force ‘20.21.65527021’

commit

搞定。

後續防止這個錯誤的其中一個方法就是,在跑批量程序前,統一先檢查並殺掉這些阻塞。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved