Oracle SYSTEM/UNDO表空間損壞是比較棘手的故障,通常會導致數據庫異常宕機進而無法打開數據庫。數據庫的打開故障處理起來相對比較麻煩,讀者可以參考本書第5章進一步了解該類故障的處理過程。如果數據庫沒有備份,通常需要設置官方不推薦的隱含參數或者使用bbed工具修復損壞的數據塊來強制打開數據庫,所以此類故障處理起來存在著風險性和不可預知性。當碰到此類故障時,筆者的處理思路如下(假設數據庫沒有備份):
(1)檢查數據庫的警告日志,初步確定數據庫打不開的原因。如果是RAC,則檢查所有節點的警告日志。
(2)物理備份整個數據庫。如果備份到本地,其備份速度最終取決于數據庫大小和存儲I/O能力。如果通過網絡備份到異地,則還取決于網絡帶寬。
(3)用dbv工具校驗SYSTEM/UNDO表空間,確定數據塊的損壞范圍和嚴重程度。
(4)關閉監聽。其目的是數據庫成功打開之后,外部應用不會立刻連接至數據庫。
(5)進行故障處理。具體的處理思路請參考第5章。
(6)如果是UNDO表空間有壞塊,可以設置隱含參數_offline_rollback_segments屏蔽壞塊所在的回滾段來打開數據庫。如果熟悉數據塊格式,則可以用bbed工具修復損壞的數據塊。
提示:如果空間不夠或者備份時間過長,則備份SYSTEM、UNDO和SYSAUX表空間下的數據文件、控制文件、所有在線日志文件。非常規手段修復數據庫所帶來的副作用很難被DBA全部預見到,為防止事態進一步惡化,所以在問題處理之前必須全部備份上述文件。對于不可逆轉的修復,DBA一定要小心,備份為上!