生產故障:Oracle數據庫意外宕機導致Undo損壞
瀏覽量: 次 發布日期:2023-09-17 11:49:34
生產故障:Oracle數據庫意外宕機導致Undo損壞
IT數據庫行業小學生,記錄日常工作中數據庫知識及一些故障案例,如有不對請指正,歡迎關注小編,小編微信xh870545795,CSDN:dba_notes
一、故障背景
客戶一臺運行在windows2008上的oracle 10.2.0.4 的單機數據庫,由于近期在部署第三方監控系統,監控系統bug導致服務器cpu占用率達到100%,導致數據庫服務異常停止,再次啟動提示undo損壞,具體排查過程如下。
二、排查處理
1.故障現象
客戶反饋數據庫突然連不上,報錯如下:
2.遠程連接服務器排查
2.1 登錄服務器發現oracle服務停止,服務器運行卡頓,查看資源利用情況如下
發現服務器cpu使用率達到100%,內存使用占比也相對較高,繼續排查可疑進程:
發現java.exe這個進程不斷終止和重啟,占用cpu資源。經過和客戶溝通殺掉了相關服務后,cpu使用恢復正常。
2.2重啟數據庫,啟動報錯如下
提示ORA-01092,實例終止,強制斷開連接,查看alert日志,提示undo表空間有問題,進一步查看trc文件:
提示回滾段需要恢復,證實了是undo表空間的問題,數據庫異常宕機,導致undo回滾段損壞。
2.3修復undo
修復undo最好的方法是完全恢復,不過如果沒有備份,可以采用一種非常規的手段(利用Oracle的隱藏參數),如果此時undo包含未提交的事務,會造成一點點的數據丟失(一般都是可忍受的),如果沒有未提交的事務,則不會有數據丟失。因為客戶沒有備份,所以采用非常規手段。
2.3.1 創建pfile,添加隱含參數,并啟動數據庫
修改initorcl.ora文件,加入
使用pfile啟動數據庫
查看一下當前的rollback segments
2.3.2 新建undo表空間替換有問題的undo
新建undo表空間
停庫,修改pfile文件將undo表空間改為undotbs2
修改initorcl.ora文件
再次使用pfile啟動數據庫
刪除損壞的undotbs1表空間:
停庫并注釋掉相關隱含參數:
修改initorcl.ora文件,注釋或者刪除參數:
通過pfile生成spfile啟動數據庫,處理完成