SQL> alter database backup controlfile to trace;
Database altered.
SQL> select spid from v$process where addr=(select paddr from v$session where sid=(select distinct sid from v$mystat));
SPID
------------
17290
SQL> show parameter user_dump_dest
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string /home/oracle/oracle10g/admin/o
dd/udump
[oracle@odd udump]$ ll
总计 44
-rw-r----- 1 oracle oinstall 612 11-13 11:42 odd_ora_17150.trc
-rw-r----- 1 oracle oinstall 669 11-13 11:42 odd_ora_17171.trc
-rw-r----- 1 oracle oinstall 797 11-13 11:43 odd_ora_17172.trc
-rw-r----- 1 oracle oinstall 612 11-13 11:43 odd_ora_17202.trc
-rw-r----- 1 oracle oinstall 797 11-13 11:43 odd_ora_17223.trc
-rw-r----- 1 oracle oinstall 612 11-13 11:44 odd_ora_17226.trc
-rw-r----- 1 oracle oinstall 2171 11-13 11:46 odd_ora_17247.trc
-rw-r----- 1 oracle oinstall 612 11-13 11:46 odd_ora_17268.trc
-rw-r----- 1 oracle oinstall 669 11-13 11:46 odd_ora_17289.trc
-rw-r----- 1 oracle oinstall 6554 11-13 12:10 odd_ora_17290.trc
查看生成的文件,重建控制文件有两种方式的创建脚本:NORESETLOGS 、 RESETLOGS ,
redolog可用时用NORESETLOGS 脚本,redolog不能用时用RESETLOGS 脚本。
[oracle@odd udump]$ cat odd_ora_17290.trc 截取片段
。。。
-- Below are two sets of SQL statements, each of which creates a new
-- control file and uses it to open the database. The first set opens
-- the database with the NORESETLOGS option and should be used only if
-- the current versions of all online logs are available. The second
-- set opens the database with the RESETLOGS option and should be used
-- if online logs are unavailable.
-- The appropriate set of statements can be copied from the trace into
-- a script. file, edited as necessary, and executed when there is a
-- need to re-create the control file.
。。。
-- Set #1. NORESETLOGS case
CREATE CONTROLFILE REUSE DATABASE "ODD" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/home/oracle/oracle10g/oradata/odd/redo01.log' SIZE 50M,
GROUP 2 '/home/oracle/oracle10g/oradata/odd/redo02.log' SIZE 50M,
GROUP 3 '/home/oracle/oracle10g/oradata/odd/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/home/oracle/oracle10g/oradata/odd/system01.dbf',
'/home/oracle/oracle10g/oradata/odd/undotbs01.dbf',
'/home/oracle/oracle10g/oradata/odd/sysaux01.dbf',
'/home/oracle/oracle10g/oradata/odd/users.dbf',
'/home/oracle/oracle10g/oradata/odd/tbs1.dbf',
'/home/oracle/oracle10g/oradata/odd/tbs2.dbf',
'/home/oracle/oracle10g/oradata/odd/tbs3.dbf'
CHARACTER SET ZHS16GBK
;
-- Set #2. RESETLOGS case
CREATE CONTROLFILE REUSE DATABASE "ODD" RESETLOGS NOARCHIVELOG
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/home/oracle/oracle10g/oradata/odd/redo01.log' SIZE 50M,
GROUP 2 '/home/oracle/oracle10g/oradata/odd/redo02.log' SIZE 50M,
GROUP 3 '/home/oracle/oracle10g/oradata/odd/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/home/oracle/oracle10g/oradata/odd/system01.dbf',
'/home/oracle/oracle10g/oradata/odd/undotbs01.dbf',
'/home/oracle/oracle10g/oradata/odd/sysaux01.dbf',
'/home/oracle/oracle10g/oradata/odd/users.dbf',
'/home/oracle/oracle10g/oradata/odd/tbs1.dbf',
'/home/oracle/oracle10g/oradata/odd/tbs2.dbf',
'/home/oracle/oracle10g/oradata/odd/tbs3.dbf'
CHARACTER SET ZHS16GBK
;
关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
删掉控制文件
[oracle@odd odd]$ ls
control01.ctl redo01.log redo03.log system01.dbf tbs2.dbf temp01.dbf users.dbf
control02.ctl redo02.log sysaux01.dbf tbs1.dbf tbs3.dbf undotbs01.dbf
[oracle@odd odd]$ mv control0* ~/
[oracle@odd odd]$ ls
redo01.log redo02.log redo03.log sysaux01.dbf system01.dbf tbs1.dbf tbs2.dbf tbs3.dbf temp01.dbf undotbs01.dbf users.dbf
启动oracle,报错
SQL> startup
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1219160 bytes
Variable Size 96470440 bytes
Database Buffers 213909504 bytes
Redo Buffers 2973696 bytes
ORA-00205: error in identifying control file, check alert log for more info
看看alert.log报错有如下:
ALTER DATABASE MOUNT
Tue Nov 13 12:21:34 2012
ORA-00202: control file: '/home/oracle/oracle10g/oradata/odd/control01.ctl'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
Tue Nov 13 12:21:34 2012
ORA-205 signalled during: ALTER DATABASE MOUNT...
关闭数据库,启动到nomount状态
SQL> shutdown immediate
ORA-01507: database not mounted
ORACLE instance shut down.
SQL> startup nomount
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1219160 bytes
Variable Size 96470440 bytes
Database Buffers 213909504 bytes
Redo Buffers 2973696 bytes
执行 NORESETLOGS 方式的创建脚本
SQL> CREATE CONTROLFILE REUSE DATABASE "ODD" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/home/oracle/oracle10g/oradata/odd/redo01.log' SIZE 50M,
GROUP 2 '/home/oracle/oracle10g/oradata/odd/redo02.log' SIZE 50M,
GROUP 3 '/home/oracle/oracle10g/oradata/odd/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/home/oracle/oracle10g/oradata/odd/system01.dbf',
'/home/oracle/oracle10g/oradata/odd/undotbs01.dbf',
'/home/oracle/oracle10g/oradata/odd/sysaux01.dbf',
'/home/oracle/oracle10g/oradata/odd/users.dbf',
'/home/oracle/oracle10g/oradata/odd/tbs1.dbf',
'/home/oracle/oracle10g/oradata/odd/tbs2.dbf',
'/home/oracle/oracle10g/oradata/odd/tbs3.dbf'
CHARACTER SET ZHS16GBK
;
SQL>
Control file created.
控制文件创建成功,查看次数数据库的打开模式为mounted
SQL> select open_mode from v$database;
OPEN_MODE
----------
MOUNTED
将数据库切换为打开状态,并查看生成的控制文件。
SQL> alter database open;
Database altered.
SQL> select open_mode from v$database;
OPEN_MODE
----------
READ WRITE
SQL> !ls /home/oracle/oracle10g/oradata/odd
control01.ctl redo01.log redo03.log system01.dbf tbs2.dbf temp01.dbf users.dbf
control02.ctl redo02.log sysaux01.dbf tbs1.dbf tbs3.dbf undotbs01.dbf
至此数据库已恢复完毕!
