所有控制檔案損壞,或者人為的删除了所有的控制檔案,通過控制檔案的複制已經不能解決問題,這個時候需要重建立立控制檔案。同時注意,alter database backup control file to trace可以産生一個控制檔案的文本備份。
1)先備份控制檔案
SQL> alter database backup controlfile to 'f:\lib\control.ctl' reuse;
資料庫已更改。
2)生成跟蹤檔案。
SQL> alter database backup controlfile to trace;
SQL> @f:\sql\gettrace.sql---一個腳本,稍後會給出。
TRACE_FILE__NAME
--------------------------------------------------------------------------------
f:\app\yang\diag\rdbms\oracl\oracl\trace/oracl_ora_2572.trc
3)關閉資料庫,模拟控制檔案全部損壞。
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
4)啟動資料庫。
SQL> startup
ORACLE 例程已經啟動。
Total System Global Area 535662592 bytes
Fixed Size 1334380 bytes
Variable Size 134218644 bytes
Database Buffers 394264576 bytes
Redo Buffers 5844992 bytes
ORA-00205: ORA-00205 error in identifying controlfile, check alert log for more info
alert 檔案顯示:
ALTER DATABASE MOUNT
ORA-00210: cannot open the specified control file
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL03.CTL'
ORA-27041: unable to open file
OSD-04002: 無法打開檔案
O/S-Error: (OS 2) 系統找不到指定的檔案。
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL'
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL'
5)啟動到nomount狀态。
SQL> startup nomount
SQL> @f:\createctlnoreset.sql
控制檔案已建立。
6)打開資料庫
SQL> alter database open ;
至此 , 成功恢複控制檔案。
附:createctlnoreset.sql腳本 将跟蹤檔案的注釋去掉即可。不過跟蹤檔案生成兩個腳本一個是resetlogs方式的,另一個是noresetlogs方式的。
CREATE CONTROLFILE REUSE DATABASE "ORACL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'F:\APP\YANG\ORADATA\ORACL\REDO01.LOG' SIZE 50M,
GROUP 2 'F:\APP\YANG\ORADATA\ORACL\REDO02.LOG' SIZE 50M,
GROUP 3 'F:\APP\YANG\ORADATA\ORACL\REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF',
'F:\APP\YANG\ORADATA\ORACL\SYSAUX01.DBF',
'F:\APP\YANG\ORADATA\ORACL\UNDOTBS01.DBF',
'F:\APP\YANG\ORADATA\ORACL\USERS01.DBF',
'F:\APP\YANG\ORADATA\ORACL\EXAMPLE01.DBF',
'F:\APP\YANG\ORADATA\ORACL\TEST.DBF'
CHARACTER SET ZHS16GBK ;
recover database
alter system archive log all ;
alter database open ;