【Oracle问题集2】ORA-01113: file 7 needs media recovery
执行语句:
SQL> alter tablespace ts001 offline;
SQL> alter tablespace ts001 rename datafile '/home/oracle/db001.df' to '/home/oracle/dbf001.dbf'
SQL> alter tablespace ts001 online;
出错现象:
ORA-01113: file 7 needs media recovery
ORA-01110: data file 7: '/home/oracle/dbf001.dbf'
错误原因:
表空间脱机以及重命名数据文件引起
解决方法:
重新恢复数据文件。例如 recover datafile '/home/oracle/dbf001.dbf';
相关知识:
数据文件中,以下是recover命令的三中应用情形:
(1)recover [automatic] database:该命令只能在数据库加载(mount)状态下使用
(2)recover [automatis] tablespace "表空间号"|"表空间名":该命令只能在数据库打开(open)状态下使用
(3)recover [automatic] datafile "数据文件名"|"数据文件号"
automatic选项表示自动搜索和恢复归档日志文件和联机重做日志中提交的数据,也可以在recover命令面前加上alter database(可选)
下面结合数据字典dba_data_files、dba_tablespaces、v$datafile以及在恢复时常用的v$recover_file、v$recovery_log来演示如何进行数据文件一级的完全恢复 工作。
(1)通过查询dba_data_files获取数据库的数据文件及其对应表空间信息
(2)通过DBA_TABLESPACES获取表空间及其状态信息
(3)通过v$datafile获取数据文件号及其状态信息
(4)接下来查询v$recover_file、v$recovery_log,由于数据库正常运行,不需要恢复,所有这两个数据字典中均无记录信息
(5)为了演示表空间脱机和数据文件脱机之间的区别,我们首先脱机表空间users
(6)查询得表空间users及其对应的7号数据文件均已脱机
(7)查询数据字典v$recover_file,发现有一条记录:其中file#表示文件号,第二、第三列均表示文件状态,第四列error有两个值:offline normal和null,前者表 示数据文件在设置为联机之前不需要恢复,后者表示该数据文件脱机的原因不清楚。第五列是SCN号。此记录表明7号数据文件处于脱机状态,并且在联机前不需要 介质恢复
(8)接下来查询v$recovery_log,由于是将users正常脱机,所以该数据字典中还是没有记录信息,可以查询其属性信息:thread#一般只有在集群(Real Application Cluster)时才有意义,sequence#为归档日志文件的序列号,archive_name为归档日志文件名
(9)联机表空间users,此后查询发现表空间users及其7号数据文件均已联机
(10)接下来查询v$recover_file、v$recovery_log,同(4),由于数据库正常运行,不需要恢复,所有这两个数据字典中均无记录信息
(11)接下来与对表空间的操作相对应,将users的7号数据文件脱机,此后查询发现7号数据文件变为recover状态,而表空间users仍为联机状态
(12)查询v$recover_file,发现7号数据文件处于脱机状态,但脱机原因未知
(13)查询v$recovery_log,发现仍无记录信息
(14)试图联机7号数据文件,系统报错:文件7需要介质恢复
(15)使用recover命令对7号数据文件进行介质恢复,然后将其成功联机