程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> ORA-10567,ORA-00313

ORA-10567,ORA-00313

編輯:關於SqlServer
天碰到一個奇怪的問題,有一個測試的數據庫down了,我們一個同事去重新啟動一下DB,但是過了幾分鐘後又down了,察看alert_*.log發現有下列錯誤:

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved