一般Oracle在建立时,至少会设置两个控制文件。因此,如果仅仅损坏一个控制文件是很容易恢复的。
控制文件损坏,Oracle会自动关闭,这时用多个控制文件中没有受损的控制文件来进行恢复就可以了。这里控制文件的损坏仍然是通过ULTRAEDIT的修改造成的。
SQL> ALTER SYSTEM CHECKPOINT;
ALTER SYSTEM CHECKPOINT
*
ERROR 位于第 1 行:
ORA-03113: 通信通道的文件结束
SQL> CONN YANGTK/YANGTK@TEST
ERROR:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
SQL> CONN /@TEST AS SYSDBA
已连接到空闲例程。
SQL> HOST COPY F:ORACLEORADATATESTCONTROL01.CTL F:ORACLEORADATATESTCONTROL03.CTL
SQL> STARTUP
ORACLE 例程已经启动。
Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
如果受损控制文件原来的存放位置已经不可用,则需要修改初始化参数文件来指向新的位置。
SQL> ALTER SYSTEM CHECKPOINT;
ALTER SYSTEM CHECKPOINT
*
ERROR 位于第 1 行:
ORA-03113: 通信通道的文件结束
SQL> CONN /@TEST AS SYSDBA
已连接到空闲例程。
SQL> CREATE PFILE='F:ORACLEADMINTESTPFILEINITTEST.ORA' FROM SPFILE;
文件已创建。
修改初始化参数中CONTROL_FILE的值为*.control_files='F:oracleoradatatestCONTROL01.CTL','F:oracleoradatatestCONTROL02.CTL','F:oracleoradatatestCONTROL04.CTL'
然后将未受损控制文件拷贝到新的位置:
SQL> HOST EDIT F:ORACLEADMINTESTPFILEINITTEST.ORA
SQL> HOST EDIT F:ORACLEADMINTESTPFILEINITTEST.ORA
SQL> HOST COPY F:ORACLEORADATATESTCONTROL01.CTL F:ORACLEORADATATESTCONTROL04.CTL
SQL> STARTUP PFILE=F:ORACLEADMINTESTPFILEINITTEST.ORA
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 SPFILE FROM PFILE='F:ORACLEADMINTESTPFILEINITTEST.ORA';
文件已创建。
SQL> SHUTDOWN IMMEDIATE
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> STARTUP
ORACLE 例程已经启动。
Total System Global Area 76619308 bytes
Fixed Size 454188 bytes
Variable Size 50331648 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。