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

Oracle數據庫錯誤ORA-01591的解決方法詳解

編輯:Oracle數據庫基礎

Oracle數據庫操作中遇到了ORA-01591的錯誤,經過分析得知錯誤的原因是使用了分布式事務,造成這個問題的原因很多時候都是由於網絡問題造成的。

解決辦法如下:

1.找到TRAN_ID

  1. Select 'Rollback force '''||LOCAL_TRAN_ID||'''' from sys.pending_trans$; 

2.將其COMMIT或ROLLBACK:

  1. rollback force LOCAL_TRAN_ID;   
  2. commit force LOCAL_TRAN_ID; 

3.如果執行失敗,則強行從資料字典中刪除該交易記錄

  1. set transaction use rollback segment system;   
  2. delete from dba_2pc_pending where local_tran_id = LOCAL_TRAN_ID;   
  3. delete from pending_sessions$ where local_tran_id = LOCAL_TRAN_ID;  
  4. delete from pending_sub_sessions$ where local_tran_id = LOCAL_TRAN_ID;   
  5. commit; 

生成批量語句:

  1. begin   
  2. for r in (select local_tran_id   
  3. from dba_2pc_pending t   
  4. where t.state = 'collecting') loop   
  5. --dbms_output.put_line('commit force '''||r.local_tran_id||''';');   
  6. dbms_output.put_line('delete from dba_2pc_pending where local_tran_id = '''||r.local_tran_id||''';');   
  7. dbms_output.put_line('delete from pending_sessions$ where local_tran_id = '''||r.local_tran_id||''';');   
  8. dbms_output.put_line('delete from pending_sub_sessions$ where local_tran_id = '''||r.local_tran_id||''';');   
  9. end loop;   
  10. dbms_output.put_line('commit;');   
  11. end; 

4.執行失敗,還一種情況可以嘗試下重起一下Oracle服務,這種情況我遇到過一次,重新啟動後該鎖自動解除(因為對刪除數據字典比較擔心,所以胡亂試了一次重啟數據庫,前提是執行了commit force LOCAL_TRAN_ID;失敗之後重新啟動)。

以上就是Oracle數據庫錯誤ORA-01591的幾種詳細的解決方法,希望本次的介紹能夠對您有所收獲!

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