首先生成控制文件的sql脚本
SQL> alter database backup controlfile to trace as '/u01/app/oracle/controlfile/control.sql'; 数据库已更改。
其实就是生成了一个控制文件的脚本,去掉注释以后这个sql脚本的内容如下:
--#1. NORESETLOGS case STARTUP NOMOUNT; CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M, GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M, GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M DATAFILE '/u01/app/oracle/oradata/orcl/system01.dbf', '/u01/app/oracle/oradata/orcl/undotbs01.dbf', '/u01/app/oracle/oradata/orcl/sysaux01.dbf', '/u01/app/oracle/oradata/orcl/users01.dbf', '/u01/app/oracle/oradata/orcl/tb1.dbf' CHARACTER SET ZHS16GBK; RECOVER DATABASE; ALTER SYSTEM ARCHIVE LOG ALL; ALTER DATABASE OPEN; ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M; --#2. RESETLOGS case STARTUP NOMOUNT; CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M, GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M, GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M DATAFILE '/u01/app/oracle/oradata/orcl/system01.dbf', '/u01/app/oracle/oradata/orcl/undotbs01.dbf', '/u01/app/oracle/oradata/orcl/sysaux01.dbf', '/u01/app/oracle/oradata/orcl/users01.dbf', '/u01/app/oracle/oradata/orcl/tb1.dbf' CHARACTER SET ZHS16GBK; RECOVER DATABASE USING BACKUP CONTROLFILE; ALTER DATABASE OPEN RESETLOGS; ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
然后删除数据库模拟控制控制文件丢失
SQL> conn /as sysdba 已连接到空闲例程。 SQL> startup ORACLE 例程已经启动。 Total System Global Area 167772160 bytes Fixed Size 1266392 bytes Variable Size 62917928 bytes Database Buffers 100663296 bytes Redo Buffers 2924544 bytes 数据库装载完毕。 数据库已经打开。 SQL> conn u1/u1 已连接。 SQL> select * from t; ID VALUE ---------- ---------- 1 a SQL> insert into t values(2,'b'); 已创建 1 行。 SQL> commit; 提交完成。 SQL> select * from t; ID VALUE ---------- ---------- 1 a 2 b SQL> ! rm -rf /u01/app/oracle/oradata/orcl/*.ctl SQL> conn /as sysdba 已连接。 SQL> shutdown abort ORACLE 例程已经关闭。
1、下面就删除控制文件用这个脚本来重建控制文件。使用noresetlogs。
SQL> conn /as sysdba 已连接到空闲例程。 SQL> startup nomount ORACLE 例程已经启动。 Total System Global Area 167772160 bytes Fixed Size 1266392 bytes Variable Size 62917928 bytes Database Buffers 100663296 bytes Redo Buffers 2924544 bytes SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG 2 MAXLOGFILES 16 3 MAXLOGMEMBERS 3 4 MAXDATAFILES 100 5 MAXINSTANCES 8 6 MAXLOGHISTORY 292 7 LOGFILE 8 GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M, 9 GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M, 10 GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M 11 DATAFILE 12 '/u01/app/oracle/oradata/orcl/system01.dbf', 13 '/u01/app/oracle/oradata/orcl/undotbs01.dbf', 14 '/u01/app/oracle/oradata/orcl/sysaux01.dbf', 15 '/u01/app/oracle/oradata/orcl/users01.dbf', 16 '/u01/app/oracle/oradata/orcl/tb1.dbf' 17 CHARACTER SET ZHS16GBK; 控制文件已创建。 SQL> select status from v$instance; STATUS ------------ MOUNTED SQL> select * from v$recover_file; FILE# ONLINE ONLINE_ ERROR CHANGE# TIME ---------- ------- ------- ----------------------------------------------------------------- ---------- -------------- 1 ONLINE ONLINE 474731 10-10? -11 2 ONLINE ONLINE 474731 10-10? -11 3 ONLINE ONLINE 474731 10-10? -11 4 ONLINE ONLINE 474731 10-10? -11 5 ONLINE ONLINE 474731 10-10? -11 SQL> alter database open; alter database open * 第 1 行出现错误: ORA-01113: ?? 1 ?????? ORA-01110: ???? 1: '/u01/app/oracle/oradata/orcl/system01.dbf' SQL> RECOVER DATABASE; 完成介质恢复。 SQL> ALTER SYSTEM ARCHIVE LOG ALL; 系统已更改。 SQL> ALTER DATABASE OPEN; 数据库已更改。 SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M; 表空间已更改。 SQL> select status from v$instance; STATUS ------------ OPEN SQL> select * from v$recover_file; 未选定行 SQL> conn u1/u1 已连接。 SQL> select * from t; ID VALUE ---------- ---------- 1 a
2、重复前面的实验环境。使用resetlogs。
SQL> conn /as sysdba 已连接到空闲例程。 SQL> startup nomount; ORACLE 例程已经启动。 Total System Global Area 167772160 bytes Fixed Size 1266392 bytes Variable Size 62917928 bytes Database Buffers 100663296 bytes Redo Buffers 2924544 bytes SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" RESETLOGS ARCHIVELOG 2 MAXLOGFILES 16 3 MAXLOGMEMBERS 3 4 MAXDATAFILES 100 5 MAXINSTANCES 8 6 MAXLOGHISTORY 292 7 LOGFILE 8 GROUP 1 '/u01/app/oracle/oradata/orcl/redo01.log' SIZE 50M, 9 GROUP 2 '/u01/app/oracle/oradata/orcl/redo02.log' SIZE 50M, 10 GROUP 3 '/u01/app/oracle/oradata/orcl/redo03.log' SIZE 50M 11 DATAFILE 12 '/u01/app/oracle/oradata/orcl/system01.dbf', 13 '/u01/app/oracle/oradata/orcl/undotbs01.dbf', 14 '/u01/app/oracle/oradata/orcl/sysaux01.dbf', 15 '/u01/app/oracle/oradata/orcl/users01.dbf', 16 '/u01/app/oracle/oradata/orcl/tb1.dbf' 17 CHARACTER SET ZHS16GBK; 控制文件已创建。 SQL> select status from v$instance; STATUS ------------ MOUNTED SQL> select * from v$recover_file; FILE# ONLINE ONLINE_ ERROR CHANGE# TIME ---------- ------- ------- ----------------------------------------------------------------- ---------- -------------- 1 ONLINE ONLINE 474731 10-10? -11 2 ONLINE ONLINE 474731 10-10? -11 3 ONLINE ONLINE 474731 10-10? -11 4 ONLINE ONLINE 474731 10-10? -11 5 ONLINE ONLINE 474731 10-10? -11 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------- 1 1 0 52428800 1 YES UNUSED 0 3 1 0 52428800 1 YES CURRENT 0 2 1 0 52428800 1 YES UNUSED 0 SQL> select member from v$logfile; MEMBER -------------------------------------------------------------------------------- /u01/app/oracle/oradata/orcl/redo03.log /u01/app/oracle/oradata/orcl/redo02.log /u01/app/oracle/oradata/orcl/redo01.log SQL> RECOVER DATABASE USING BACKUP CONTROLFILE; ORA-00279: ?? 474731 (? 10/10/2011 02:31:58 ??) ???? 1 ???? ORA-00289: ??: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_10/o1_mf_1_14_%u_.arc ORA-00280: ?? 474731 (???? 1) ??? #14 ? 指定日志: {<RET>=suggested | filename | AUTO | CANCEL} /u01/app/oracle/oradata/orcl/redo03.log ORA-00310: ???????? 12; ???? 14 ORA-00334: ????: '/u01/app/oracle/oradata/orcl/redo03.log' SQL> RECOVER DATABASE USING BACKUP CONTROLFILE; ORA-00279: ?? 474731 (? 10/10/2011 02:31:58 ??) ???? 1 ???? ORA-00289: ??: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_10/o1_mf_1_14_%u_.arc ORA-00280: ?? 474731 (???? 1) ??? #14 ? 指定日志: {<RET>=suggested | filename | AUTO | CANCEL} /u01/app/oracle/oradata/orcl/redo01.log ORA-00310: ???????? 13; ???? 14 ORA-00334: ????: '/u01/app/oracle/oradata/orcl/redo01.log' SQL> RECOVER DATABASE USING BACKUP CONTROLFILE; ORA-00279: ?? 474731 (? 10/10/2011 02:31:58 ??) ???? 1 ???? ORA-00289: ??: /u01/app/oracle/flash_recovery_area/ORCL/archivelog/2011_10_10/o1_mf_1_14_%u_.arc ORA-00280: ?? 474731 (???? 1) ??? #14 ? 指定日志: {<RET>=suggested | filename | AUTO | CANCEL} /u01/app/oracle/oradata/orcl/redo02.log 已应用的日志。 完成介质恢复。 SQL> select * from v$recover_file; 未选定行 SQL> ALTER DATABASE OPEN RESETLOGS; 数据库已更改。 SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M; 表空间已更改。 SQL> select status from v$instance; STATUS ------------ OPEN SQL> conn u1/u1 已连接。 SQL> select * from t; ID VALUE ---------- ---------- 1 a 2 b指定RESETLOGS会执行下列操作:归档当前的在线重做日志文件(如果能访问到的话),然后清空内容并将日志文件序号重置为1(如果在线重做日志文件不存在,则重建)。重置控制文件中关于在线日志文件的元数据。更新数据文件和在线重做日志文件中的RESETLOGS SCN和重置时间信息。
SQL> conn /as sysdba 已连接。 SQL> alter system switch logfile; 系统已更改。 SQL> / 系统已更改。 SQL> / 系统已更改。 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME ---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------- 1 1 4 52428800 1 NO CURRENT 474954 10-10月-11 2 1 2 52428800 1 YES INACTIVE 474948 10-10月-11 3 1 3 52428800 1 YES INACTIVE 474950 10-10月-11