【Oracle問題集6】ORA-01548: active rollback segment XX found, terminate dropping tablespace

說明:【oracle問題集】是博主平時操作數據庫遇到的問題以及解決方案。
執行語句:表示操作數據庫過程
出錯現象:表示操作數據庫過程出現錯誤現象
出錯原因:表示出現錯誤的原因
解決方法:表示解決錯誤的方法
相關知識:表示與這個主題相關的知識
=============================================================
執行語句:
刪除表空間報錯誤,drop tablespace 表空間名
出錯現象:
“ORA-01548: active rollback segment '_SYSSMU11_4270384673$ ' found, terminate dropping tablespace” 
錯誤原因:
刪除undo表空間中的segment需要回復
解決方法:
刪除回滾段信息

1、關閉相應undo表空間的數據文件

alter database datafile '/home/oracle/undofile.dbf' offline drop

2、查詢需要segment狀態

SQL> select segment_name,tablespace_name,status from dba_rollback_segs; SEGMENT_NAME TABLESPACE_NAME STATUS ------------------------------ ------------------------------ ---------------- _SYSSMU12_3879543783$ UNDO_SMALL OFFLINE _SYSSMU11_4270384673$ UNDO_SMALL NEEDS RECOVERY _SYSSMU30_2482938352$ UNDO_TPFDA OFFLINE

3、利用pfile參數文件啓動數據庫

關閉數據庫:shutdown immediate

創建pfile文件:create pfile '/home/oracle/pfile.ora' from spfile

修改pfile文件,添加以下參數

*.undo_management='Manual'

_corrupted_rollback_segments('_SYSSMU11_4270384673$')

啓動數據庫:startup pfile='/home/oracle/pfile.ora'

4、刪除狀態爲needs Recovery的segment

drop rollback segment ‘_SYSSMU11_4270384673$’

5、重啓數據庫並刪除undo表空間

drop tablespace UNDO_SMALL

Oracle將需要回滾的數據當作已經提交的數據,爲了避免隨後出現不可預測的問題,在重起數據庫去掉隱藏參數後,應該導出數據,並建立新庫,將源數據導入。

對於沒有啓動的數據庫,可以通過Linux操作系統命令stringssystem表空間的數據文件中獲取回滾段信息。對於windows環境下的Oracle,可以將數據文件通過ftp,拷貝到linux系統中,然後執行strings命令:strings system01.dbf | grep _SYSSMU

相關知識:
    聲明:爲了更好的使讀者能夠明白與主題相關內容,特別引用http://www.askmaclean.com/archives/ora-00600-4000-ora-00704-bootstrap-process-failure.html  內容,在此表示感謝maclean!
     _CORRUPTED_ROLLBACK_SEGMENTS(corrupted undo segment list)隱藏參數所獨有的功能:

  • 在實例啓動startup並open database的階段_CORRUPTED_ROLLBACK_SEGMENTS所列出的undo segments(撤銷段/回滾段)將不會被訪問讀取
  • 所有指向這些被_CORRUPTED_ROLLBACK_SEGMENTS列出的undo segments的事務都被認爲已經提交了commit,和這個undo segments已經被drop時類似
    • 這將導致嚴重的邏輯訛誤
    • 如果數據字典上有活躍事務那麼將更糟糕,數據字典邏輯訛誤會造成數據庫管理問題
    • 如果bootstrap自舉核心對象有活躍事務,那麼將無法忽略錯誤ORA-00704: bootstrap process failure錯誤,導致無法強制打開數據庫
  • 衷心地建議用_CORRUPTED_ROLLBACK_SEGMENTS這個參數打開數據庫後導出數據並重建數據庫,這個參數使用的後遺症可能很頑固
  • Oracle公司內部有叫做TXChecker的工具可以檢查問題事務

_offline_rollback_segments 和 _corrupted_rollback_segments 均會造成的實例行爲變化:

  • 以上2個參數所列出的Undo Segments(撤銷段/回滾段)將不會被在線使用online
  • 在UNDO$數據字典基表中將體現爲OFFLINE的記錄
  • 在實例instance的生命週期中將不會再給新的事務分配使用
  • 參數所列出的Undo Segments列表上的活躍事務active transaction將即不被回滾亦不被標記爲dead以便SMON去回滾(瞭解你所不知道的SMON功能(五):Recover Dead transaction)






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章