Errors in file /home/sfcs/admin/world/udump/water_ora_15814.trc:
ORA-00600: internal error code, arguments: [3020], [377610042], [1], [979], [285
], [144], [], []
ORA-10567: Redo is inconsistent with data block (file# 90, block# 122682)
ORA-10564: tablespace IA
ORA-01110: data file 90: '/oradata/100_test/IA09.dbf'
Errors with log .
在trc文件中一大堆的dump信息,大概是因為redo中的變更信息和數據文件某一個塊的變更信息不一致造成的,baidu了一下,發現這種問題引起的原因很多,但沒有給出解法,引起的原因摘錄如下:
1.數據庫異常關閉,比如斷電,shutdown abort等。
2.standbyDB上案例比較多,比如設置standby_file_nanagement=auto,然後primary DB產生新的數據文件時,standby也會產生一份,但產生後standby上有時候會發生這種錯誤,不知道這種情況算不算BUG。
3.數據庫在線數據文件被copy走了,恢復時有可能出現這種問題。
當然了,最簡單的辦法就是使用下面這個SQL,查詢出這個塊屬於哪個segment,如果是index,那恭喜你,數據不會丟失,你可以將此drop掉,然後重新建立一個,如果是數據segment,並且沒有作備份,像我們這個測試數據庫,那不好意思,看你的運氣了。
查詢block屬於哪個segment的SQL:
SELECT segment_name,segment_type,extent_id,block_id, blocks
from dba_extents t
where
file_id = 29
AND 2819 between block_id and (block_id + blocks - 1)
以下是我們的做法,不一定適合所有情況。
1.startup mount,使用recover database指令恢復,等完畢後打開一下,如果運氣好的話,數據庫就打開了。但是在recover的時候報錯ORA-00313: open failed for members of log group 4 of thread 1。然後使用不完全恢復指令,輸入archive的時候將redo挨個試了一下,到那個需要的日志時報ORA-10567錯誤,數據庫還是打不開。
2.重建了control file文件,繼續嘗試使用不完全指令恢復,報錯
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/data1/sfcs_100/orcl/datafile/system01.dbf'
使用下列SQL發現數據庫的所有文件頭的checkpoint_change#是一致的
select min(checkpoint_change#)-max(checkpoint_change#) from v$datafile_header
繼續恢復時提示需要archive log,察看alert*.log,發現錯誤:
Datafile 187: '/oradata/100_test/test_01.dbf'
Media Recovery Log
ORA-279 signalled during: ALTER DATABASE RECOVER database using backup cont...
Fri Sep 14 15:34:03 2007
ALTER DATABASE RECOVER CONTINUE DEFAULT
Media Recovery Log /home/sfcs/dbs/arch/1_979.dbf
然後將該文件offline drop,又提示另外一個文件需要恢復。
3.修改spfile中的參數,加上允許redolog壞的參數,並且把undo_managerment設成manual,如下:
undo_management='Manual'
_allow_resetlogs_corruption=true