Oracle數(shù)據(jù)庫錯誤ORA-01591的解決方法詳解
作者:newhappy2008 
  本文我們主要對Oracle數(shù)據(jù)庫錯誤ORA-01591的原因進行了分析,并給出了兩種詳細的解決方案,希望能夠?qū)δ兴鶐椭?/div>  
 
                       
  在Oracle數(shù)據(jù)庫操作中遇到了ORA-01591的錯誤,經(jīng)過分析得知錯誤的原因是使用了分布式事務(wù),造成這個問題的原因很多時候都是由于網(wǎng)絡(luò)問題造成的。
解決辦法如下:
1.找到TRAN_ID
- Select 'Rollback force '''||LOCAL_TRAN_ID||'''' from sys.pending_trans$;
 
2.將其COMMIT或ROLLBACK:
- rollback force LOCAL_TRAN_ID;
 - commit force LOCAL_TRAN_ID;
 
3.如果執(zhí)行失敗,則強行從資料字典中刪除該交易記錄
- set transaction use rollback segment system;
 - delete from dba_2pc_pending where local_tran_id = LOCAL_TRAN_ID;
 - delete from pending_sessions$ where local_tran_id = LOCAL_TRAN_ID;
 - delete from pending_sub_sessions$ where local_tran_id = LOCAL_TRAN_ID;
 - commit;
 
生成批量語句:
- begin
 - for r in (select local_tran_id
 - from dba_2pc_pending t
 - where t.state = 'collecting') loop
 - --dbms_output.put_line('commit force '''||r.local_tran_id||''';');
 - dbms_output.put_line('delete from dba_2pc_pending where local_tran_id = '''||r.local_tran_id||''';');
 - dbms_output.put_line('delete from pending_sessions$ where local_tran_id = '''||r.local_tran_id||''';');
 - dbms_output.put_line('delete from pending_sub_sessions$ where local_tran_id = '''||r.local_tran_id||''';');
 - end loop;
 - dbms_output.put_line('commit;');
 - end;
 
4.執(zhí)行失敗,還一種情況可以嘗試下重起一下Oracle服務(wù),這種情況我遇到過一次,重新啟動后該鎖自動解除(因為對刪除數(shù)據(jù)字典比較擔(dān)心,所以胡亂試了一次重啟數(shù)據(jù)庫,前提是執(zhí)行了commit force LOCAL_TRAN_ID;失敗之后重新啟動)。
以上就是Oracle數(shù)據(jù)庫錯誤ORA-01591的幾種詳細的解決方法,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】
責(zé)任編輯:趙鵬 
                    來源:
                    CSDN博客
  
 
相關(guān)推薦
 
 
 
 














 
 
 