之前出现过机房断电情况,重启数据库后发现出现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: