1.查看数据文件和重做日志文件
在创建新控制文件时,首先需要了解数据文件和重做日志文件。如果数据库无法打开,就无法通过查询数据字典来获取数据文件和日志文件信息,唯一的办法就是查看警告日志文件。如果数据库可以打开,则
SQL>select member from v$logfile;
SQL>select name from v$datafile;
3.备份文件,用户需要备份所有数据文件和重做日志文件,因为在使用create controfile时,操作不当则可能损坏数据文件和日志文件。
4.启动数据库实例,但不加载数据库,因为加载数据库时会打开控制文件。
SQL>startup nomount;
5.创建新的控制文件
可通过以下方式获得创建语句。alter database backup to trace;备份控制文件为可读文本,即创建语句。存放目录通过show parameter user_dump_dest;获取。
也可自己写,如下:
create controlfile
reuse database "orcl"
logfile
group 1 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG',
group 2 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG',
group 3 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG'
datafile
'E:\APP\ADMINISTRATOR\ORADATA\ORADATA\ORCL\SYSTEM01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORADATA\ORCL\SYSAUX01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORADATA\ORCL\UNDOTBS01.DBF',
'E:\APP\ADMINISTRATOR\ORADATA\ORADATA\ORCL\USERS01.DBF'
maxlogfiles 50
maxlogmembers 3
maxinstances 6
maxdatafiles 200
noresetlogs
noarchivelog;
noresetlogs选项表示仍然使用原来的重做日志文件。setlogfiles则表示不使用。
logfile选项用于指定原数据库重做日志的组号、大小以及对应的日志成员。
datafile用于指定数据库原有的数据文件。
maxlogfiles指最大的重做日志文件数。
maxlogmembers指最大的重做日志组成员。
maxinstances指最大实例数。
maxdatafiles指最大数据文件数。
6.通过编辑spfile初始化参数control_files,使其指向新建的控制文件
alter system set control_files=
'E:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL',
'E:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL02.CTL'
scope=spfile;
7.打开数据库
alter database open;
如果在创建控制文件时使用了resetlogs,则参考一下代码
alter database openresetlogs;