天天看點

ORA-00376:file x cannot be read at this time

   之前出現過機房斷電情況,重新開機資料庫後發現出現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.