上一篇说到有备份控制文件的恢复,但如果在备份点与故障点之间添加了表空或者数据文件,它的恢复又将如何呢。测试如下:
备份当前控制文件,然后添加表空间:
SQL> create tablespace study2 datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\study2.dbf','D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\study3.dbf'
SQL> shutdown immediate
恢复备份控制文件. 启动ORACLE。
SQL> startup
ORACLE 例程已经启动。
ORACLE 例程已经启动。
Total System Global Area 603979776 bytes
Fixed Size 1250380 bytes
Variable Size 213912500 bytes
Database Buffers 381681664 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
ORA-01122: 数据库文件 1 验证失败
ORA-01110: 数据文件 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF'
ORA-01207: 文件比控制文件更新 - 旧的控制文件
Fixed Size 1250380 bytes
Variable Size 213912500 bytes
Database Buffers 381681664 bytes
Redo Buffers 7135232 bytes
数据库装载完毕。
ORA-01122: 数据库文件 1 验证失败
ORA-01110: 数据文件 1: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF'
ORA-01207: 文件比控制文件更新 - 旧的控制文件
SQL> recover database using backup controlfile until cancel
ORA-00279: 更改 620660 (在 03/27/2010 09:47:27 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\STUDY\ARCHIVELOG\2010_03_27\O1_MF_1
ORA-00279: 更改 620660 (在 03/27/2010 09:47:27 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\STUDY\ARCHIVELOG\2010_03_27\O1_MF_1
_4_%U_.ARC
ORA-00280: 更改 620660 (用于线程 1) 在序列 #4 中
ORA-00280: 更改 620660 (用于线程 1) 在序列 #4 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\oradata\study\REDO03.LOG
ORA-00283: 恢复会话因错误而取消
ORA-01244: 未命名的数据文件由介质恢复添加至控制文件
ORA-01110: 数据文件 6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY3.DBF'
ORA-01110: 数据文件 5: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY2.DBF'
ORA-01112: 未启动介质恢复
可以看到会报ORA-01244: 未命名的数据文件由介质恢复添加至控制文件
错误,恢复被取消。
错误,恢复被取消。
SQL> select file#,name from v$datafile
2 /
2 /
file# NAME
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
1 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSTEM01.DBF
2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF
3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF
4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF
5 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00005
6 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00006
2 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\UNDOTBS01.DBF
3 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\SYSAUX01.DBF
4 D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\USERS01.DBF
5 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00005
6 D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00006
找开alert_log的到这一段:
File #5 added to control file as 'UNNAMED00005'. Originally created as:
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY2.DBF'
File #6 added to control file as 'UNNAMED00006'. Originally created as:
'D:\ORACLE\PRODv$datafileUCT\10.2.0\ORADATA\STUDY\STUDY3.DBF'
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY2.DBF'
File #6 added to control file as 'UNNAMED00006'. Originally created as:
'D:\ORACLE\PRODv$datafileUCT\10.2.0\ORADATA\STUDY\STUDY3.DBF'
个人认为通过v$datafile,File#就是可determine which unnamed file corresponds to which datafile.
重命名数据文件:
SQL> alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED0
0005' to 5: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY2.DBF'
2 /
alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00005'
0005' to 5: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY2.DBF'
2 /
alter database rename file 'D:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE\UNNAMED00005'
to 5: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\STUDY\STUDY2.DBF'
继续执行恢复
SQL> recover database using backup controlfile until cancel
(文档在这里用:RECOVER AUTOMATIC DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL)
ORA-00279: 更改 621621 (在 03/27/2010 09:55:40 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\STUDY\ARCHIVELOG\2010_03_27\O1_MF_1
ORA-00279: 更改 621621 (在 03/27/2010 09:55:40 生成) 对于线程 1 是必需的
ORA-00289: 建议:
D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\STUDY\ARCHIVELOG\2010_03_27\O1_MF_1
_4_%U_.ARC
ORA-00280: 更改 621621 (用于线程 1) 在序列 #4 中
ORA-00280: 更改 621621 (用于线程 1) 在序列 #4 中
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
D:\oracle\product\10.2.0\oradata\study\REDO03.LOG
已应用的日志。
完成介质恢复。
SQL> alter database open
2 /
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs
2 /
数据库已更改。
完成恢复
本文转自 anranran 51CTO博客,原文链接:http://blog.51cto.com/guojuanjun/288457