某客戶機關資料庫出現異常,大緻現象是:資料庫狀态是open的,但是其中一個資料檔案無法通路,本文分享排查原因與解決問題的整個過程。
通過ls 檢視檔案都報錯,如下所示:
同時dd指令也無法讀取該檔案:
此時在從資料庫層面看到的資訊類似如下:
從上述資訊來看,資料庫第11号檔案無法讀取。
在我們進行恢複之前,客戶進行了多次嘗試,還遭遇了一些資料庫壞塊,也遇到了不少ora-00600 錯誤:
上述ora-00600 錯誤,總的來都是常見的,幾乎都可以定性為資料壞塊。
對于file 3的壞塊,處理相對簡單,直接drop或者truncate相關對象即可,然後重建awr。
但是對于第11号資料檔案,怎麼辦呢?這裡我們的處理方法是當檔案丢失處理(很久之前處理過Windows環境資料檔案大小為 0 kb的問題,這幾種情況都類似。)
這裡我說一下簡單的處理思路:
1. 通過odu 掃盤,分别以不同offset方式來掃(0和4096)。
2. 對比兩次掃描結果,組合extent資訊,抽取檔案。
由于這裡檔案隻有1個,大小20g左右,通過dd 拼接即可。
最終檔案拼接完成後,由于這裡是非歸檔環境,無法進行正常recover,是以還需要通過bbed來修改資料檔案頭的checkpoint資訊。
對于檔案系統來講,目前已經不是Oracle存儲的最佳選擇了,建議使用ASM。當然,其他資料庫比如MySQL、PostgreSQL除外。