根据已有数据库创建新的控制文件
#数据库必须是mounted或open状态
sql> alter database backup controlfile to trace;
可以使用以下快捷方式找到对应的trace文件
sql> alter database backup controlfile to trace; sql> oradebug setmypid; sql> oradebug tracefile_name;
从trace文件中要找出以下内容,保存到脚本controlfile.sql:
CREATE CONTROLFILE REUSE DATABASE "DB11" NORESETLOGS NOARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u01/app/oracle/oradata/db11/redo01.log' SIZE 50M BLOCKSIZE 512, GROUP 2 '/u01/app/oracle/oradata/db11/redo02.log' SIZE 50M BLOCKSIZE 512, GROUP 3 '/u01/app/oracle/oradata/db11/redo03.log' SIZE 50M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/u01/app/oracle/oradata/db11/system01.dbf', '/u01/app/oracle/oradata/db11/sysaux01.dbf', '/u01/app/oracle/oradata/db11/undotbs01.dbf', '/u01/app/oracle/oradata/db11/users01.dbf', '/u01/app/oracle/oradata/db11/example01.dbf', '/u01/app/oracle/oradata/db11/test01.dbf' CHARACTER SET AL32UTF8 ;
正式创建控制文件
sql> shutdown immediate sql> startup nomount sql> @controlfile.sql #创建完成后,数据库会自动到mounted状态
#创建控制文件后,记得添加临时文件
sql> alter tablespace temp add tempfile '/u01/app/oracle/oradata/db11/temp01.db' reuse;
如果是以resetlogs打开数据库,建议尽快做一个数据库备份。
如果数据库已经无法mount,比如需要还原数据库时,则需要手工写创建脚本了。
脚本必须以:
create controlfile reuse database "dbname" noresetlogs archivelog
开始。
其它步骤类似。