Email: service@parnassusdata.com 7 x 24 online support!
ORACLE备份和恢复时产生ORA-1113错误的常见原因和解决方案
如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
适用于
Oracle 数据库 – 企业版 - 9.0.1.0 版本及更高的
本文档的内容适用于任何平台
目的
本文的目的是列出ORA-1113错误的常见原因和解决方案
解决步骤
一个数据文件需要恢复是会产生ORA-1113错误。
定义ORA-01113错误:
ORA-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.
ORA-01113错误后面经常跟着ORA-01110错误,指出哪个文件需要介质恢复的名称。
ORA-01113: file 28 needs media recovery
ORA-01110: data file 28: '/h04/usupport/app/oracle/oradata/index02.dbf'
这个错误表明这个数据文件相对于控制文件和其他数据文件来说不是最新的。
Oracle 的数据结构是紧耦合的,即所有的数据文件,数据文件,redo日志文件和控 制文件在数据库打开状态或者检查点结束时必须是同步的。
这意味着所有的文件的SCN号必须是相同的。如果某一个数据文件SCN是不同的,那么就会产生ORA-1113错误。
例如,当你把一个表空间处于热备份模式,其所有数据文件的检查点SCN为当前值,直到发出相应的结束备份。如果热备份期间的数据库崩溃,没有进行恢复并尝试重新,你可能会产生ORA-1113错误,表空间里最少有一个数据文件已经开始备份,那么这个数据文件的SCN很可能比控制文件及其他表空间的数据文件来得低。
还会将数据文件置成offline,让SCN不会改变。
如果你没有先恢复数据文件而试图将数据文件置成online,他的SCN会比其他(online)数据文件老,因此产生ORA-1113错误。
先进行这些操作:
查询v$LOG和v$LOGFILE动态性能试图。
1. 如果数据库是关闭的,那么必须先mount数据库
SQL> STARTUP MOUNT;
2. 连接数据库并进行查询:
SQL> connect / as sysdba
SQL> SELECT V1.GROUP#, MEMBER, SEQUENCE#, FIRST_CHANGE#
FROM V$LOG V1, V$LOGFILE V2
WHERE V1.GROUP# = V2.GROUP# ;
这将列出所有的联机日志文件和它们对应的序列号及第一次改变号。
下一步怎么做取决于解决ORA-1113的解决方案。
在接下来的部分进行讨论。
可能的原因和解决方案汇总:
I. 热备表空间时崩溃后启动数据库
**********************************************************
1、mount数据库
SQL> STARTUP MOUNT;
2、找出数据库崩溃或意外关闭或机器重启时是哪个数据文件在热备时,执行下面查询:
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. 确认每个归档日志,直到你收到消息“介质恢复完成”。如果系统提示你一个不存在的归档日志,数据库大概需要的一个或多个在线日志的与恢复进行。比较在线日志序列号和ORA-280消息中引用的序列号。然后输入其序列号相匹配一个重做组成员之的绝对路径。继续输入的要求联机日志,直到您收到消息“介质恢复完成”。
4. 打开数据库
SQL> ALTER DATABASE OPEN;
B. 数据库是非归档模式
在这种情况下,你只能成功的完成数据文件或表空间的修复当需要提供的redo日志在联机redo日志的范围内。
执行下面查询:
SQL> SELECT FILE#, CHANGE# FROM V$RECOVER_FILE;
如果CHANGE#比FIRST_CHANGE#的最小值大,那么这个数据文件可以恢复。在这种情况下接下来就根据方案II的方法。你必须提供根据提示提供有效的联机日志,知道恢复完成。
如果CHANGE#比FIRST_CHANGE#的最小值小,那么这个数据文件时不可以恢复的。你可以选择如下几种:
-如果数据文件是在临时表空间或者索引表空间,用ALTER DATABASE DATAFILE '' OFFLINE DROP语句删除数据文件并打开数据库。一旦数据库打开了,你必须删除这个数据文件所在的表空间并重建这个表空间。
-如果数据文件是在system表空间或undo表空间,从最近的拷贝或者最近的全备里还原数据文件。如果你没有这两个,那么可能不能完全恢复数据库。系客户支持获得更多细节做出决定。
III. 尝试将数据文件或表空间置成online
**********************************************
1. 恢复数据文件:
SQL> RECOVER DATAFILE '</path/filename>' ;
如果恢复表空间,执行:
SQL> RECOVER TABLESPACE <tablespacename> ;
如果恢复数据库,执行:
SQL> RECOVER DATABASE;
--注:恢复数据库,offline的数据文件无法恢复。
2.确认每个归档日志,直到你收到消息“介质恢复完成”。如果系统提示你一个不存在的归档日志,数据库大概需要的一个或多个在线日志的与恢复进行。比较在线日志序列号和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、用“cancle”命令取消恢复;.
3、用下面命令打开数据库:
SQL> ALTER DATABASE OPEN RESETLOGS;