數據庫壞塊觸發ora-00600和ora-07445


上午10:03分收到資源同步庫的宕機告警,登陸數據庫核實數據庫確實異常,第一反應手動重啟庫,但依舊失敗。

回過頭查看數據庫告警日志,發現大量的600和7445報錯
 
 
 
 

查看trace文件,發現都是對同一個表T_PRODUCT_ADDR_6_8_TEMP_AREA的更新操作:

在連續的報錯后,數據庫自身有個壞塊recover的操作

從在線日志恢復成功后,依然有類似的報錯信息,最后數據庫直接宕機

 

 

【分析過程】
1.根據數據庫報錯信息中涉及的兩個數據文件號信息,在數據庫啟動到mount狀態,通過以下腳本查詢對應的數據文件

2.用DBV工具查看是否存在邏輯壞塊

發現數據文件repgx11.dat確實存在壞塊
3.查看主機日志,沒有IO相關報錯
4.登陸資源同步庫所連存儲EVA8100和EVA6400查看,也無異常報錯信息
5.剩下的就是考慮如何恢復的問題:
從上面的報錯信息可以看出是由於存在壞塊,導致事務異常而無法回滾,通過設置event='10513 trace name context forever,level 2'內部事件后,SMON不再recover dead transaction ,數據庫能正常打開。至此數據庫正常恢復。

6.雖然數據庫正常打開,但壞塊問題依然存在,通過告警日志的提示信息file 58 block 367365查找壞塊所在的對象

跟trace文件中提示的操作對象一致,通過重建該表,並rename互換解決該問題
互換后:
7.修改pfile,刪除event時間,使用spfile重啟數據庫,正常,數據庫無類似的異常報錯
8.通過DBV校驗問題文件
已恢復正常
 
【附屬說明】
1.如果在重建表后,壞塊依然存在,可以刪除原來的表,再使用CREATE TABLE命令將原存在邏輯壞塊的數據塊覆蓋,避免上述ORA-600問題再次發生。
create table LARGE_TABLE (t1 int) tablespace REP_GX;
alter table LARGE_TABLE  allocate extent (datafile '/dsgdata/zydata/repgx17.dat' size 10M);
 
2.如果數據庫處於歸檔模式,且有備份,可以通過RMAN來恢復
RMAN> blockrecover datafile 58 block 367365 from backupset;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM