如果只读表空间存放在只读物理设置上,那么使用备份的控制文件恢复时可能会报错。解决这个问题的另一种方法就是重建控制文件的方法。
恢复过程还是利用第一篇文章中的备份进行恢复:
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
数据库已更改。
最好的重建控制文件的方法是利用USERS表空间变成只读状态后,通过ALTER DATABASE BACKUP CONTROLFILE TO TRACE命令生成的重建脚本来进行创建。如果没有这种备份的脚本,则需要注意,在手工创建控制文件的时候,不要在数据文件列表中列出只读表空间。
SQL> CONN /@TEST AS SYSDBA
已连接。
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> HOST COPY F:ORACLEBACKUPTEST20060418*.DBF F:ORACLEORADATATEST
SQL> STARTUP NOMOUNT
ORACLE 例程已经启动。
Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE TEST NORESETLOGS ARCHIVELOG
2 MAXLOGFILES 50
3 MAXLOGMEMBERS 5
4 MAXDATAFILES 100
5 MAXINSTANCES 1
6 MAXLOGHISTORY 680
7 LOGFILE
8 GROUP 1 'F:ORACLEORADATATESTREDO01.LOG' SIZE 100M,
9 GROUP 2 'F:ORACLEORADATATESTREDO02.LOG' SIZE 100M,
10 GROUP 3 'F:ORACLEORADATATESTREDO03.LOG' SIZE 100M
11 DATAFILE
12 'F:ORACLEORADATATESTSYSTEM01.DBF',
13 'F:ORACLEORADATATESTUNDOTBS01.DBF',
14 'F:ORACLEORADATATESTINDX01.DBF',
15 'F:ORACLEORADATATESTTOOLS01.DBF',
16 'F:ORACLEORADATATESTYANGTK01.DBF'
17 CHARACTER SET ZHS16GBK
18 ;
控制文件已创建
SQL> RECOVER DATABASE;
ORA-00279: ?? 48182403 (? 04/19/2006 03:15:21 ??) ???? 1 ????
ORA-00289: ??: F:ORACLEORADATATESTARCHIVEARC00001.001
ORA-00280: ?? 48182403 ???? 1 ???? # 1 ???
指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: ?? 48182777 (? 04/19/2006 03:22:33 ??) ???? 1 ????
ORA-00289: ??: F:ORACLEORADATATESTARCHIVEARC00002.001
ORA-00280: ?? 48182777 ???? 1 ???? # 2 ???
ORA-00278: ??????????? 'F:ORACLEORADATATESTARCHIVEARC00001.001'
ORA-00279: ?? 48182803 (? 04/19/2006 03:22:35 ??) ???? 1 ????
ORA-00289: ??: F:ORACLEORADATATESTARCHIVEARC00003.001
ORA-00280: ?? 48182803 ???? 1 ???? # 3 ???
ORA-00278: ??????????? 'F:ORACLEORADATATESTARCHIVEARC00002.001'
已应用的日志。
完成介质恢复。
SQL> ALTER SYSTEM ARCHIVE LOG ALL;
系统已更改。
SQL> ALTER DATABASE OPEN;
数据库已更改。
IXDBA.NET技术社区SQL> ALTER DATABASE RENAME FILE 'MISSING00005' TO
2 'F:ORACLEORADATATESTUSERS01.DBF';
数据库已更改。
SQL> ALTER TABLESPACE USERS ONLINE;
表空间已更改。
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'F:ORACLEORADATATESTTEMP01.DBF' SIZE 100M REUSE;
表空间已更改。
至此,恢复操作已经完成。主要在恢复操作完成后,需要重新命名只读表空间,并将其ONLINE。
这种恢复只读表空间的操作也比较简单。