重建控制文件的方法
參考原文:
 How to Recreate a Controlfile (Doc ID 735106.1)
适用于:
 Oracle Database - Enterprise Edition - Version 9.0.1.0 and later
 Information in this document applies to any platform. 
 解决方式:
警告:
 仅仅有遇到下列场景时,你才应该recreate 你的控制文件
1.全部的当前的控制文件copies 已经丢失 或者 都已经损坏(corrupted)
 2.你正在restore一个backup,在此backup中控制文件已经损坏 或者丢失(missing)
 3.你须要在控制文件里改变一个hard limit 的数据库參数(database parameter)
 4.假设你正在move 你的database 到一个server上,而且files位于不同的location上。
 5. oracle 技术支持人员建议你重建控制文件。
 第一种情况:在已经存在的db中(而且该db是mount or  open状态)建立一个新的controlfile
首先。必须生成一个控制文件的ascii dump文件
 SQL> alter database backup controlfile to trace;
该trace文件被生成在udump文件夹下:
 SQL> show parameter user_dump_dest 
NAME            TYPE         VALUE 
 --------------  ------       ------------------------------------------------ 
 user_dump_dest  string       /oracle/product/11.1.0/db_1/diag/rdbms/V11/trace
到/oracle/product/11.1.0/db_1/diag/rdbms/V11/trace文件夹下。依照时间排序:
 % cd /oracle/product/11.1.0/db_1/diag/rdbms/V11/trace
 % ls -ltr
一旦定位到该文件。该文件会与一般的trace file一样显演示样例如以下:
 Trace file /oracle/product/11.1.0/db_1/diag/rdbms/V11/trace/V11_ora_31225.trc 
 Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production 
 With the Partitioning, OLAP, Data Mining and Real Application Testing options 
 ORACLE_HOME = /oracle/product/11.1.0/db_1 
 你感兴趣的是 包含 控制文件创建脚本的那一段。
 改动trace file 并用改动后的脚本来建立控制文件
CREATE CONTROLFILE REUSE DATABASE "V11" NORESETLOGS ARCHIVELOG  
 MAXLOGFILES 16  
 MAXLOGMEMBERS 3  
 MAXDATAFILES 100  
 MAXINSTANCES 8  
 MAXLOGHISTORY 292  
 LOGFILE  
 GROUP 1 '/oradata/V11/redo01.log' SIZE 50M,  
 GROUP 2 '/oradata/V11/redo02.log' SIZE 50M,  
 GROUP 3 '/oradata/V11/redo03.log' SIZE 50M  
 DATAFILE  
 '/oradata/V11/system01.dbf',  
 '/oradata/V11/sysaux01.dbf',  
 '/oradata/V11/undotbs01.dbf', 
 '/oradata/V11/user01.dbf'  
 CHARACTER SET WE8MSWIN1252  
 ;
--->请特别注意:CHARACTER SET WE8MSWIN1252 能够由 alert_sid.log中得到。
ALTER TABLESPACE TEMP_TEST ADD TEMPFILE '/oradata/V11/temp01.dbf' reuse;
"CREATE CONTROLFILE"之前的不论什么东西请删掉。
 CHARACTER SET之后的不论什么东西请删掉。一定要保留那个分号
 在上面的样例中,我们选择了NORESETLOGS 选项,而且该db执行于archivelog模式下。
 请务必保证使用shutdown immediate选项来关闭数据库。然后启动到nomount状态下:
  SQL> shutdown immediate;
  SQL> startup nomount; 
  SQL>@control.sql
  
 注意:当重建控制文件完成后,务必保证加入已经存在temp file:
 alter tablespace temp_ts add tempfile '?
/oradata/V11/temp01.dbf'?
 reuse;
 控制文件一旦被创建,db 被自己主动带入到mounted 状态。
假设你使用了resetlogs打开了database,请尽快做一个backup
另外一种情况:该db无法到mount 状态
 1.要么restore 控制文件,
 2.要么有一个重建控制文件的脚本,例如以下是一个样例:
CREATE CONTROLFILE REUSE DATABASE "DBNAME" NORESETLOGS ARCHIVELOG
 Follow the format listing:
 - Location of redo logs.
 - Location of datafiles
 - Specifying the characterset.
Once you have listed all files correctly you are ready to recreate your controlfile
 SQL> startup nomount; 
 SQL>@control.sql