之前出現過機房斷電情況,重新開機資料庫後發現出現ORA-00376的錯誤。
通過查詢資料檔案狀态:
SQL> select file_id,online_status from dba_data_files order by 1;
FILE_ID ONLINE_STATUS
---------- -------------
1 SYSTEM
2 ONLINE
3 ONLINE
4 ONLINE
5 RECOVER
6 ONLINE
7 RECOVER
8 ONLINE
9 ONLINE
10 ONLINE
11 RECOVER
12 ONLINE
13 RECOVER
14 RECOVER
15 RECOVER
16 RECOVER
檔案中出現了大量的recover的狀态,需要進行媒體恢複。
SQL> select file#, status, fuzzy, checkpoint_time, checkpoint_change#,
resetlogs_change#, resetlogs_time from v$datafile_header where file#=5;
FILE# STATUS FUZZY CHECKPOINT_TIME CHECKPOINT_CHANGE# RESETLOGS_CHANGE# RESETLOGS_TIME
---------- ------- ----- --------------- ------------------ ----------------- --------------
5 OFFLINE YES 2013-6-19 9:52: 38391683 940976 2013-5-15 19:1
目前的資料檔案的SCN号為 38391683,需要尋找别這個高的archive log 或redo log。
SQL> Select sequence#,name,first_change#,next_change# from v$archived_log;
SEQUENCE# NAME FIRST_CHANGE# NEXT_CHANGE#
---------- -------------------------------------------------------------------------------- ------------- ------------
465 D:\APP\ARCHIVELOG\ARC0000000465_0815512562.0001 36366097 36618224
466 D:\APP\ARCHIVELOG\ARC0000000466_0815512562.0001 36618224 36843775
467 D:\APP\ARCHIVELOG\ARC0000000467_0815512562.0001 36843775 37065721
468 D:\APP\ARCHIVELOG\ARC0000000468_0815512562.0001 37065721 37294978
469 D:\APP\ARCHIVELOG\ARC0000000469_0815512562.0001 37294978 37572830
470 D:\APP\ARCHIVELOG\ARC0000000470_0815512562.0001 37572830 37818186
471 D:\APP\ARCHIVELOG\ARC0000000471_0815512562.0001 37818186 38093499
472 D:\APP\ARCHIVELOG\ARC0000000472_0815512562.0001 38093499 38346397
473 D:\APP\ARCHIVELOG\ARC0000000473_0815512562.0001 38346397 38381157
很幸運,38391683大于473這個最大的archive log 的SCN,我不需archive log 的幫助。recover所需的資訊在redo log 中。
例如:資料檔案file_id為5的處于recover狀态,執行
select 'alter database recover datafile '||file_id||' ;' from dba_data_files where online_status ='RECOVER';
select 'alter database datafile '||file_id||' online;' from dba_data_files where online_status ='OFFLINE';
alter database recover datafile 5;
依次恢複狀态為recover的資料檔案。
再次檢視online_status為offline狀态,需要執行
Alter database datafile 5 online;
依次将處于offline的資料檔案ONLINE。都online後資料庫處于open狀态了後,就可以用了。
如果資料庫處于No Archive log 狀态的時候,recover所需的資訊隻能從redo log 中擷取,如果此時的redo log被overwrite了,将不能online資料檔案,那隻能想其他方法了。
Possible causes and solutions summary:
=====================================
A. Tablespace or Datafile offline.
B. Datafile does not exist at the OS level.
C. Datafile locked by Backup Software.
D. Incorrectly set ULIMIT on UNIX.
E. Rollback Segment with active transactions is unavailable
F. Possible Other Causes.