此时如果做alter database create datafile as这个命令肯定是不行的,因为此时的控制文件还没有quest01.dbf这个文件的信息:
SQL> alter database create datafile 'D:\ORACLE\ORADATA\ORCL\QUEST1.DBF' as 'D:\O
RACLE\ORADATA\ORCL\QUEST1.DBF' reuse;
alter database create datafile 'D:\ORACLE\ORADATA\ORCL\QUEST1.DBF' as 'D:\ORACLE
\ORADATA\ORCL\QUEST1.DBF' reuse
*
ERROR 位于第 1 行:
ORA-01516: 不存在的日志文件, 数据文件或临时文件
'D:\ORACLE\ORADATA\ORCL\QUEST1.DBF'
必须先使用旧的控制文件进行不完全恢复到控制文件中包含了quest01.dbf文件先:
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1229498 (在 03/02/2005 01:13:44 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\ORA92\RDBMS\ARC00516.001
ORA-00280: 更改 1229498 对于线程 1 是按序列 # 516 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00283: 恢复会话因错误而取消
ORA-01244: 未命名的数据文件由介质恢复添加至控制文件
ORA-01110: 数据文件 4: 'D:\ORACLE\ORADATA\ORCL\QUEST1.DBF'
ORA-01112: 未启动介质恢复
SQL> recover database using backup controlfile until cancel;
ORA-00283: 恢复会话因错误而取消
ORA-01111: 数据文件 4 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 4: 'D:\ORACLE\ORA92\DATABASE\UNNAMED00004'
ORA-01157: 无法标识/锁定数据文件 4 - 请参阅 DBWR 跟踪文件
ORA-01111: 数据文件 4 名称未知 - 请重命名以更正文件
ORA-01110: 数据文件 4: 'D:\ORACLE\ORA92\DATABASE\UNNAMED00004'
我们看到此时控制文件中已经包含了这个数据文件的信息,但是因为被删除后恢复出来的,所以oracle不知道这个文件的具体名字,给了个奇怪的名字,没关系,我们重新命名一下这个文件:
SQL> alter database create datafile 'D:\ORACLE\ORA92\DATABASE\UNNAMED00004' as '
D:\ORACLE\ORADATA\ORCL\QUEST1.DBF' reuse;
数据库已更改。
这样数据库就存在了quest1.dbf这个文件的信息了,然后我们继续做不完全恢复:
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1229668 (在 03/02/2005 01:16:11 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\ORA92\RDBMS\ARC00516.001
ORA-00280: 更改 1229668 对于线程 1 是按序列 # 516 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00279: 更改 1229717 (在 03/02/2005 01:18:36 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\ORA92\RDBMS\ARC00517.001
ORA-00280: 更改 1229717 对于线程 1 是按序列 # 517 进行的
ORA-00278: 此恢复不再需要日志文件 'D:\ORACLE\ORA92\RDBMS\ARC00516.001'
指定日志: {=suggested | filename | AUTO | CANCEL}
ORA-00308: 无法打开存档日志 'D:\ORACLE\ORA92\RDBMS\ARC00517.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) The system cannot find the file specified.
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 1 没有从完备的旧备份中恢复
ORA-01110: 数据文件 1: 'D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'
上面恢复失败,看来'D:\ORACLE\ORA92\RDBMS\ARC00517.001'
还没存在,没关系,当前的所有redolog都在,用这个就行了,重新恢复一次:
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 1229717 (在 03/02/2005 01:18:36 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:\ORACLE\ORA92\RDBMS\ARC00517.001
ORA-00280: 更改 1229717 对于线程 1 是按序列 # 517 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
D:\oracle\oradata\orcl\redo01.log
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select name from v$datafile;
NAME
--------------------------------------------------------------------------------
D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF
D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF
D:\ORACLE\ORADATA\ORCL\QUEST.DBF
D:\ORACLE\ORADATA\ORCL\QUEST1.DBF
至此,丢失的那个重要的数据文件恢复完毕。