控制文件全部丢失的情况下,根据联机重做日志文件是否可用和数据文件是否是最新的可以分为四种不同情况,这篇文章描述的是,数据文件是最新的,但是联机重做日志不可用的情况。
由于联机重做日志不可用,因此无法利用备份的控制文件进行恢复,而只能通过重建控制文件的方法。
如果利用归档的控制文件进行恢复,会发现在应用所有归档的重做日志之后,数据库仍然无法正常打开,数据库仍然需要联机日志进行恢复。因此,这种情况必须通过重建控制文件来完成。
SQL> CONN /@TEST AS SYSDBA
已连接。
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> HOST DEL F:ORACLEORADATATEST*.CTL
SQL> HOST DEL F:ORACLEORADATATEST*.LOG
上面模拟了数据库正常关闭,丢失全部控制文件和全部日志文件的情况。
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" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 50
4 MAXLOGMEMBERS 5
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 680
8 LOGFILE
9 GROUP 1 'F:ORACLEORADATATESTREDO01.LOG' SIZE 100M,
10 GROUP 2 'F:ORACLEORADATATESTREDO02.LOG' SIZE 100M,
11 GROUP 3 'F:ORACLEORADATATESTREDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'F:ORACLEORADATATESTSYSTEM01.DBF',
15 'F:ORACLEORADATATESTUNDOTBS01.DBF',
16 'F:ORACLEORADATATESTINDX01.DBF',
17 'F:ORACLEORADATATESTTOOLS01.DBF',
18 'F:ORACLEORADATATESTUSERS01.DBF',
19 'F:ORACLEORADATATESTYANGTK01.DBF'
20 CHARACTER SET ZHS16GBK
21 ;
控制文件已创建
SQL> ALTER DATABASE OPEN RESETLOGS;
数据库已更改。
可以利用以前备份到trace文件的重建控制文件脚本进行恢复,如果没有trace文件,则只能自己根据数据文件和重做日志文件的位置手工编辑重建控制文件的脚本。
重建控制文件后使用RESETLOGS方式打开即可。
最后将TEMP数据文件添加上。
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'F:ORACLEORADATATESTTEMP01.DBF'
2 SIZE 41943040 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
表空间已更改。
恢复结束,这时需要马上进行备份。
注意,这种情况的恢复要求数据库必须是正常关闭。如果数据库是以ABORT方式关闭,则需要进行数据库的不完全恢复。
www.ixdba.net