ORACLE_FileManage_Rebuild the controlfile
1. Backup the controlfile in the MOUNT or OPEN:
#dd if=/dev/vx/dsk/dgtest/rlv_controlfile of=/dev/vx/dsk/dgtest/rlv_bakcontrolfile
#su - oracle
$sqlplus ‘/ as sysdba’
SQL> alter session settracefile_identifier='trace_controlfile';
SQL>alter database backup controlfile to trace;
2. Find out the recent trace file:
$ORACLE_BASE/diag/rdbms/db_name/instance_name/trace
# ls -lt|grep trace_controlfile
3. Create the script that rebuild thecontrolfile, named New_create_controlfile.sh:
Find out the statement like this from the recenttrace file:
CREATE CONTROLFILE REUSEDATABASE "INOMC" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 200
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/dev/vx/dsk/dgtest/redo1_1' SIZE 50M,
GROUP 2 '/dev/vx/dsk/dgtest/redo2_1' SIZE 50M,
GROUP 3 '/dev/vx/dsk/dgtest/redo3_1' SIZE 50M,
GROUP 4 '/dev/vx/dsk/dgtest/redo4_1' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/dev/vx/dsk/dgtest/system',
'/dev/vx/dsk/dgtest/sysaux',
'/dev/vx/dsk/dgtest/undotbs1',
'/dev/vx/dsk/dgtest/users'
CHARACTER SET ZHS16GBK
;
Attention: If the controlfile still exists, so,need to use “reuse”, otherwise, use “set”.
And then:
# chown oracle:oinstall New_create_controlfile.sh
# chmod 755 New_create_controlfile.sh
4. Rebuild the controlfile:
$sqlplus ‘/ as sysdba’
SQL>shutdown immediate;
SQL> startup nomount;
SQL>@New_create_controlfile.sh
5. Try to open database:
SQL>recover database;
SQL>alter database open;
6. Add the temporary tempfile according to thebackup controlfile trace file:
SQL>alter tablespace temp add tempfile '/dev/vx/dsk/dgtest/tempfile01' size 2000M;
--- Please add a temfile one time, otherwise, willshow error, is related with a ORACLE bug.