在给一个生产库做灾难恢复的过程中,recover database报错
SQL> recover database;
ORA-00283: recovery session canceled due to errors
ORA-16433: The database must be opened in read/write mode.
该库无备份无归档,意外掉电,所以走到这步必须见招拆招的解决。
于是准备重建控制文件,以noresetlogs拉起数据库
结果在mount状态下,backup controlfile to trace也报错ORA-16433
于是手动创建控制文件
1.archive log list检查归档情况
2.select * from v$nls_parameters检查字符集情况
3.SQL> select name from v$datafile order by file#;
SQL> select group#, member from v$logfile;
SQL> select name, bytes from v$tempfile order by file#;
确认各种文件location.
然后使用以下模版,随便找个库trace都可以,关键是注意标点符号(尤其是logfile与datafile的最后一行,没有逗号)
CREATE CONTROLFILE REUSE DATABASE "TEST1" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/oradata/test1/redo01.log' SIZE 50M,
GROUP 2 '/oradata/test1/redo02.log' SIZE 50M,
GROUP 3 '/oradata/test1/redo03.log' SIZE 50M
DATAFILE
'/oradata/test1/system01.dbf',
'/oradata/test1/undotbs01.dbf',
'/oradata/test1/sysaux01.dbf',
'/oradata/test1/users01.dbf',
'/oradata/test1/cat_tb_1.dbf',
'/oradata/test1/cat02.dbf'
CHARACTER SET ZHS16GBK
;
控制文件成功创建,进入下一流程。
创建文件时标点不清楚会导致
ORA-00600 [kcfccfl_1] or ORA-00600 [kccccfl_1] or ORA-02236 when Creating Control File (文档 ID 1434813.1)
ORA-01163: SIZE clause indicates string (blocks), but should match header string
Cause: The size specified in bytes in the SIZE clause of the CREATE CONTROLFILE statement does not equate to the number of blocks recorded in the header.
Action: Specify the correct filename and size ( in bytes ).