Oracle 在备份&恢复中发现ORA-1113错误的常见原因和解决方案

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638 QQ号:47079569 邮箱:[email protected].

ORA-01113
oerr ora 1113
01113, 00000, "file %s needs media recovery"
// *Cause:  An attempt was made to online or open a database with a file that
//         is in need of media recovery.
// *Action: First apply media recovery to the file.



适用于:

Oracle Database – Enterprise Edition – 版本 9.0.1.0 及以上
本文信息适用于任何平台。

 

目标

本文旨在列出ORA-1113错误的常见原因和解决方案。

故障排除步骤

当数据文件需要恢复时,发生一个ORA-1113 。

ORA-01113的定义:

ORA-01113, 00000, “file %s needs media recovery”

原因:  使用媒体恢复所需的文件尝试联机或打开数据库。
行为:首先将媒体恢复应用到文件。

 

ORA-01113 错误通常伴随着一个ORA-01110错误,表明媒体恢复所需的数据文件名。

ORA-01113: file 28 needs media recovery
ORA-01110: data file 28: ‘/h04/usupport/app/oracle/oradata/index02.dbf’

 

该错误信息表明数据文件对于控制文件和其他数据文件不是最新的。

Oracle的架构是紧密结合的,这表现在打开数据库或在检查点结束时所有的数据库文件,即数据文件,重做日志文件和控制文件必须同步。

ORA-1113 error will be generated. 这意味着所有数据文件的检查点SCN(系统提交号)必须是相同的。如果这不是对特定数据文件的情况,将产生ORA-1113错误。

例如,当你使表空间处于热备份模式,所有数据文件的检查点SCN是在当前值被冻结,直到你发出相应的结束备份end backup。如果在热备份期间数据库崩溃,并尝试不做恢复重启它,对于正在被备份表空间中至少一个数据文件可能会得到ORA-1113,因为它的SCN很可能低于其他表空间中控制文件和数据文件SCN。

同样,脱机数据文件使其检查点SCN冻结。如果你只是尝试联机文件而不先恢复它,它的 SCN将可能比联机数据文件的旧得多,因而将导致ORA-1113。

在开始这些行为之前做到以下几点:
查询V$LOG 和 V$LOGFILE.

1. 如果数据库宕机,你需要先mount它。

SQL> STARTUP MOUNT;

  1. 然后连接内部Server Manager 并发出查询:

    SQL> connect / as sysdba

    SQL> SELECT V1.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE#
    FROM V$LOG V1, V$LOGFILE V2
    WHERE V1.GROUP# = V2.GROUP# ;

这将列出所有的联机重做日志文件以及它们各自的序列和第一个变化号first change numbers。

接下来的步骤取决于发出该ORA-1113的情况。

这是在下面的章节中讨论。
  
 
 可能的原因和解决方案总结:
 
 
 I.   AT STARTUP AFTER CRASH WITH TABLESPACE(S) IN HOT BACKUP 在热备份中的表空间崩溃后启动
 II.  在从备份中还原数据文件或表空间后启动
 III. TRYING TO ONLINE A DATAFILE OR TABLESPACE 尝试联机一个数据文件或表空间
 IV. 在恢复时使用 ' USING BACKUP CONTROLFILE'选项来进行不完整恢复
  
 
 I. 在热备份中的表空间崩溃后启动
 **********************************************************
  
    1. Mount数据库。 
  
           SQL> STARTUP MOUNT;
 
    2. 当数据库崩溃或者被shutdown abort或机器由以下查询重启时,找出哪些数据文件处于热备份模式时:
  
          SQL> SELECT V1.FILE#, NAME 
                 FROM V$BACKUP V1, V$DATAFILE V2 
                 WHERE V1.STATUS = 'ACTIVE' AND V1.FILE# = V2.FILE# ; 
    
    3. 对于被以上查询返回的所有文件,发出命令: 
  
           SQL> ALTER DATABASE DATAFILE '</path/filename>' END BACKUP; 
  
    4. 打开数据库。 
 
           SQL> ALTER DATABASE OPEN;
  
  
 II. 在从备份中还原数据文件或表空间后启动  
 ********************************************************************* 
  
 A. 数据库处于归档日志模式下
  
    1. Mount 数据库。 
 
            SQL> STARTUP MOUNT; 
 
    2. 恢复数据文件: 
  
           SQL> RECOVER DATAFILE '</path/filename>' ;
  
       如果在一个表空间中恢复多于一个数据文件,发出
 
            SQL> RECOVER TABLESPACE <tablespacename> ;
 
       如果恢复多于一个表空间,发出  
  
            SQL> RECOVER DATABASE;
  
 
    3. 确认你被提示的每个归档日志,直到收到消息 "Media recovery complete"。
 
      如果系统提示你不存在的归档日志,Oracle可能需要的一个或多个在线日志来继续恢复。比较在ORA-280消息中引用的序列号和的你的在线日志序列号。然后输入匹配所需序列号的重做组的成员之一的全路径名。
  
    4. 打开数据库。 
           
        SQL> ALTER DATABASE OPEN;
 
   
 B. 数据库处于非归档模式下 
  
    在这种情况下,只有当被用于数据文件或表空间的重做在你联机日志范围之内,恢复才会成功。
    发出查询: 
  
         SQL> SELECT FILE#, CHANGE# FROM V$RECOVER_FILE; 
  
    将你获得的更改号与你联机日志的FIRST_CHANGE#相比较。
  
       如果CHANGE#大于你日志的最低FIRST_CHANGE#,数据文件可以被恢复。在这种情况下,应遵循的过程类似于上述情况II.A,除了提示时必须输入相应的联机日志,直到恢复完成。
  
    如果CHANGE#小于你日志的最低FIRST_CHANGE#,文件不能被恢复。你的选择包括:
  
       - 如果数据文件处于临时或索引表空间,你可以用ALTER DATABASE DATAFILE'' OFFLINE DROP语句drop它,然后打开数据库。一旦数据库启动,你必须drop该数据文件所属的表空间,并重建它。
  
       - 如果数据文件在SYSTEM 或回滚表空间中,还原数据文件的最新副本(如果可用)或你最近的完整备份。如果没有这两种情况,则可能无法完全恢复该数据库。欲了解更多详情或协助你的决定,请与Oracle Customer Support联系。 
  
   在这种情况下的其他情况,你必须权衡要备份与重建所涉及表空间的成本,如前两个例子中所述。欲了解更多详情或协助你的决定,请与Oracle Customer Support联系。
  
  
 III. 尝试联机一个数据文件或表空间 
 **********************************************
  
    1. 恢复数据文件: 
  
            SQL> RECOVER DATAFILE '</path/filename>' ;
  
       如果是恢复表空间,进行 
  
            SQL> RECOVER TABLESPACE <tablespacename> ;
 
      如果是恢复数据库,进行
          
            SQL> RECOVER DATABASE;
 
       -- 注:恢复了数据库,脱机数据文件将不会被恢复。 
  
    2. 确认你被提示的每个归档日志直到收到信息 "Media recovery complete"。 
 
       如果系统提示你不存在的归档日志,Oracle可能需要的一个或多个在线日志来继续恢复。比较在ORA-280消息中引用的序列号和的你的在线日志序列号。然后输入匹配所需序列号的重做组的成员之一的全路径名。
 
    3. 打开数据库。 
           
        SQL> ALTER DATABASE OPEN;
 
 
  
 
 IV. 在恢复时使用 'USING BACKUP CONTROLFILE' 选项来进行不完整恢复
 *******************************************************************************
 
   如果使用"RECOVER DATABASE USING BACKUP CONTROLFILE;" 选项恢复数据库而不指定  "UNTIL CANCEL"选项,则在"ALTER DATABASE OPEN RESETLOGS;" 时你会遇到ORA-1113 错误。
         
   解决该问题的步骤:
 
     1. 再次恢复数据库,使用:
 
         SQL> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;
 
     2. 通过发出"CANCEL"命令取消恢复。
   
     3. 打开数据库,使用:
 
         SQL> ALTER DATABASE OPEN RESETLOGS;

Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *