此方式和 所有控制文件损坏的恢复--noresetlogs方式恢复时的前五个步骤是一样的。
1)先备份控制文件
SQL> alter database backup controlfile to 'f:\lib\control.ctl' reuse;
数据库已更改。
2)生成跟踪文件。
SQL> alter database backup controlfile to trace;
数据库已更改。
SQL> @f:\sql\gettrace.sql---一个脚本,稍后会给出。
TRACE_FILE__NAME
--------------------------------------------------------------------------------
f:\app\yang\diag\rdbms\oracl\oracl\trace/oracl_ora_2572.trc
3)关闭数据库,模拟控制文件全部损坏。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
4)启动数据库。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 535662592 bytes
Fixed Size 1334380 bytes
Variable Size 134218644 bytes
Database Buffers 394264576 bytes
Redo Buffers 5844992 bytes
ORA-00205: ORA-00205 error in identifying controlfile, check alert log for more info
alert 文件显示:
ALTER DATABASE MOUNT
ORA-00210: cannot open the specified control file
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL03.CTL'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-00210: cannot open the specified control file
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL02.CTL'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-00210: cannot open the specified control file
ORA-00202: control file: 'F:\APP\YANG\ORADATA\ORACL\CONTROL01.CTL'
ORA-27041: unable to open file
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
5)启动到nomount状态。
SQL> startup nomount
6)执行创建控制文件的脚本
SQL> @f:\createctlreset.sql
控制文件已创建。
7)恢复数据库
SQL> recover database;
ORA-00283: 恢复会话因错误而取消
ORA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 3230396 (在 05/28/2010 20:15:05 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG
ORA-00280: 更改 3230396 (用于线程 1) 在序列 #18 中
指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: 无法打开归档日志 'F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-00308: 无法打开归档日志 'F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 3230396 (在 05/28/2010 20:15:05 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG
ORA-00280: 更改 3230396 (用于线程 1) 在序列 #18 中
指定日志: {=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF'
ORA-01112: 未启动介质恢复
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 3230396 (在 05/28/2010 20:15:05 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG
ORA-00280: 更改 3230396 (用于线程 1) 在序列 #18 中
指定日志: {=suggested | filename | AUTO | CANCEL}
f:\app\yang\oradata\oracl\redo01.log
ORA-00310: 归档日志包含序列 16; 要求序列 18
ORA-00334: 归档日志: 'F:\APP\YANG\ORADATA\ORACL\REDO01.LOG'
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 3230396 (在 05/28/2010 20:15:05 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG
ORA-00280: 更改 3230396 (用于线程 1) 在序列 #18 中
指定日志: {=suggested | filename | AUTO | CANCEL}
f:\app\yang\oradate\oracl\redo02.log
ORA-00308: 无法打开归档日志 'f:\app\yang\oradate\oracl\redo02.log'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 3) 系统找不到指定的路径。
指定日志: {=suggested | filename | AUTO | CANCEL}
f:\app\yang\oradata\oracl\redo02.log
ORA-00310: 归档日志包含序列 17; 要求序列 18
ORA-00334: 归档日志: 'F:\APP\YANG\ORADATA\ORACL\REDO02.LOG'
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01194: 文件 1 需要更多的恢复来保持一致性
ORA-01110: 数据文件 1: 'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF'
SQL> recover database using backup controlfile until cancel;
ORA-00279: 更改 3230396 (在 05/28/2010 20:15:05 生成) 对于线程 1 是必需的
ORA-00289: 建议: F:\APP\YANG\ARCHIVE2\18_1_719709206.LOG
ORA-00280: 更改 3230396 (用于线程 1) 在序列 #18 中
指定日志: {=suggested | filename | AUTO | CANCEL}
f:\app\yang\oradata\oracl\redo03.log
已应用的日志。
完成介质恢复。
SQL> select status from v$instance;
STATUS
------------
MOUNTED
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
0
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open resetlogs;
数据库已更改。
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
3231396
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
3231397
附:
通过查询跟踪文件的脚本可以查询到相关的详细信息
SQL> SELECT a.VALUE||b.symbol||c.instance_name||'_ora_'||d.spid||'.trc' TRACE_FILE_NAME
2 FROM (SELECT VALUE FROM v$parameter WHERE NAME='user_dump_dest') a,
3 (SELECT SUBSTR(VALUE,-6,1) symbol FROM v$parameter WHERE NAME='user_dump_dest') b,
4 (SELECT instance_name FROM v$instance) c,
5 (SELECT spid FROM v$session s,v$process p,v$mystat m
6 WHERE s.paddr=p.addr AND s.SID=m.SID AND m.statistic#=0) d
7 /
createctlreset.sql脚本:
CREATE CONTROLFILE REUSE DATABASE "ORACL" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'F:\APP\YANG\ORADATA\ORACL\REDO01.LOG' SIZE 50M,
GROUP 2 'F:\APP\YANG\ORADATA\ORACL\REDO02.LOG' SIZE 50M,
GROUP 3 'F:\APP\YANG\ORADATA\ORACL\REDO03.LOG' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'F:\APP\YANG\ORADATA\ORACL\SYSTEM01.DBF',
'F:\APP\YANG\ORADATA\ORACL\SYSAUX01.DBF',
'F:\APP\YANG\ORADATA\ORACL\UNDOTBS01.DBF',
'F:\APP\YANG\ORADATA\ORACL\USERS01.DBF',
'F:\APP\YANG\ORADATA\ORACL\EXAMPLE01.DBF',
'F:\APP\YANG\ORADATA\ORACL\TEST.DBF'
CHARACTER SET ZHS16GBK
;
小结:
要弄清楚resetlogs与noresetlogs的区别
norestlogs,控制文件的scn是来自当前日志的high scn,而resetlogs控制文件的scn是来自数据文件。
所有online redolog没有丢失,以noresetlogs选项打开数据库的情况下使用的。第二段则是在丢失了online redolog需要resetlogs的情况下使用。