这种情况解决方法很简单,只要把多路复用的控制文件拷贝到相应路径就行了。
案例二:所有控制文件都丢失(用trace中的SQL创建)在做这个实验前先生成一个trace文件
alter database backup controlfileto trace as'/backup/siqianctl.trc';
1.先关闭数据库
shutdown immediate
2.删除所有控制文件
之前可以用show parameter control_files来看下控制文件在哪些路径下
[Oracle@siqian siqian11g]$ rm-f control0*
3.起库出错
startup
ORA-00205: errorin identifying controlfile,check alert logfor more info
4.利用trace来创建控制文件
CREATE CONTROLFILE REUSE DATABASE"SIQIAN11" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/oradata/siqian11g/redo01.log' SIZE 50M,
GROUP 2 '/u01/oradata/siqian11g/redo02.log' SIZE 50M,
GROUP 3 '/u01/oradata/siqian11g/redo03.log' SIZE 50M
DATAFILE
'/u01/oradata/siqian11g/system01.dbf',
'/u01/oradata/siqian11g/sysaux01.dbf',
'/u01/oradata/siqian11g/undotbs1.dbf',
'/u01/oradata/siqian11g/users01.dbf',
'/u01/oradata/siqian11g/example01.dbf',
'/u01/oradata/siqian11g/test01.dbf'
CHARACTER SET WE8MSWIN1252
;
5.打开数据库
alter database open;
案例三:用trace里的SQL创建的控制文件但此时的创建的控制文件是老的现在我再创建一个表空间,使控制文件发生变化,一会重建时会缺少那个表空间的数据文件。
1.创建表空间
create tablespace new_ts datafile'/u01/oradata/siqian11g/new_ts01.dbf' size10m;
2.关闭数据库
shutdown immediate
3.删除所有控制文件
[oracle@siqian siqian11g]$ rm-f control0*
4.打开数据库
startup
ORA-00205: errorin identifying controlfile,check alert logfor more info
5.利用trace创建控制文件
CREATE CONTROLFILE REUSE DATABASE"SIQIAN11" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/u01/oradata/siqian11g/redo01.log' SIZE 50M,
GROUP 2 '/u01/oradata/siqian11g/redo02.log' SIZE 50M,
GROUP 3 '/u01/oradata/siqian11g/redo03.log' SIZE 50M
DATAFILE
'/u01/oradata/siqian11g/system01.dbf',
'/u01/oradata/siqian11g/sysaux01.dbf',
'/u01/oradata/siqian11g/undotbs1.dbf',
'/u01/oradata/siqian11g/users01.dbf',
'/u01/oradata/siqian11g/example01.dbf',
'/u01/oradata/siqian11g/test01.dbf'
CHARACTER SET WE8MSWIN1252
;
6.打开数据库
alter database open;
7.查看dba_data_files数据字典
sys@SIQIAN11>selectfile_name,tablespace_namefrom dba_data_files;
FILE_NAME TABLESPACE_NAME
--------------------------------------------------------------------------------
/u01/oradata/siqian11g/test01.dbf TEST
/u01/oradata/siqian11g/example01.dbf EXAMPLE
/u01/oradata/siqian11g/users01.dbf USERS
/u01/oradata/siqian11g/undotbs1.dbf UNDOTBS1
/u01/oradata/siqian11g/sysaux01.dbf SYSAUX
/u01/oradata/siqian11g/system01.dbf SYSTEM
/u01/oracle/dbs/MISSING00007 NEW_TS
7 rows selected.
发现有个数据文件是‘/u01/oracle/dbs/MISSING00007’,其实出现这种情况是因为控制文件中没有这个表空间的数据文件的记录。
8.关闭数据库并启动到mount
shutdown immediate
startup mount
9.将控制文件中的数据文件名重命名
alter database rename file'/u01/oracle/dbs/MISSING00007' to'/u01/oradata/siqian11g/new_ts01.dbf';
10.打开数据库
alter database open;
11.恢复数据文件
recover datafile 7;