出错情况:
sql> alter database open;
alter database open
*
第 1 行出现错误:
ora-01113: 文件 1 需要介质恢复
ora-01110: 数据文件 1: 'f:/oracle/oradata/orcl/system01.dbf'
试图恢复数据文件出错:
sql> recover datafile 'f:/oracle/oradata/orcl/system01.dbf';
ora-00283: 恢复会话因错误而取消
ora-00322: 日志 3 (用于线程 1) 不是最新副本
ora-00312: 联机日志 3 线程 1: 'f:/oracle/oradata/orcl/redo03.log'
联机日志分为当前联机日志(current)和非当前联机日志(inactive),非当前联机日志(inactive)的损坏是比较简单的,一般通过clear命令就可以解决问题。
在数据库mount或open状态下查询v$log,显示log状态。
sql> select group#,
2 status,
3 first_change#
4 from v$log;
group# status first_change#
---------- ---------------- -------------
1 unused 1324963
3 current 1363585
2 unused 1343246
此时可以发现redo日志3是current状态,具体恢复步骤如下:
使用clear命令清理這個文件所在的redo log group。
sql> alter database clear unarchived logfile group 3;
数据库已更改。
sql>recover datafile 'f:/oracle/oradata/orcl/system01.dbf';
完成介质恢复。
sql> alter database open;
alter database open
*
第 1 行出现错误:
ora-01113: 文件 2 需要介质恢复
ora-01110: 数据文件 2: 'f:/oracle/oradata/orcl/sysaux01.dbf'
然后根据提示一步步恢复数据文件即可。