日期:2014-05-16  浏览次数:20422 次

理解 using backup controlfile

        using backup controlfile 通常用于恢复由于当前控制文件丢失且原来备份的控制文件较当前发生变化的情形之下。using backup controlfile
的 recover 方式一旦使用之后,常用的recover database命令将不可再使用,且必须要使用resetlogs方式来打开数据库,下面是具体的演示描述。

 

一、演示 using backup controlfile 时的相关变化

-->查看数据库SYBO2SZ控制文件的时间信息
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/controlf/
total 29M
-rw-r----- 1 oracle oinstall 9.7M 2012-09-10 11:59 cntl3SYBO2SZ.ctl
-rw-r----- 1 oracle oinstall 9.7M 2012-09-10 11:59 cntl2SYBO2SZ.ctl
-rw-r----- 1 oracle oinstall 9.7M 2012-09-10 11:59 cntl1SYBO2SZ.ctl

-->查看系统时间
sys@SYBO2SZ> ho date
Mon Sep 10 12:00:09 CST 2012

-->查看数据库SYBO2SZ的状态,此时数据库处于关闭状态
sys@SYBO2SZ> ho ps -ef | grep pmon_SYBO2SZ
oracle     440 32067  0 12:01 pts/4    00:00:00 /bin/bash -c ps -ef | grep pmon_SYBO2SZ
oracle     442   440  0 12:01 pts/4    00:00:00 grep pmon_SYBO2SZ

sys@SYBO2SZ> startup mount;
ORACLE instance started.

Total System Global Area  599785472 bytes
Fixed Size                  2074568 bytes
Variable Size             381683768 bytes
Database Buffers          209715200 bytes
Redo Buffers                6311936 bytes
Database mounted.

-->当mount数据库后,控制文件的状态及时间信息被更新
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/controlf/
total 29M
-rw-r----- 1 oracle oinstall 9.7M 2012-09-10 12:02 cntl3SYBO2SZ.ctl
-rw-r----- 1 oracle oinstall 9.7M 2012-09-10 12:02 cntl2SYBO2SZ.ctl
-rw-r----- 1 oracle oinstall 9.7M 2012-09-10 12:02 cntl1SYBO2SZ.ctl

sys@SYBO2SZ> select instance_name,status,database_status from v$instance;

INSTANCE_NAME    STATUS       DATABASE_STATUS
---------------- ------------ -----------------
SYBO2SZ          MOUNTED      ACTIVE

-->此时数据库文件的时间并没有被更新,依旧为11:23
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/oradata/sys*
-rw-r----- 1 oracle oinstall 501M 2012-09-10 11:23 /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf
-rw-r----- 1 oracle oinstall 301M 2012-09-10 11:23 /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf

sys@SYBO2SZ> alter session set nls_date_format='yyyymmdd hh24:mi:ss';

-->Author : Robinson Cheng  -->Blog: http://blog.csdn.net/robinson_0612
-->也可以看到此时controlfile_type为current,open_resetlogs为NOT ALLOWED
sys@SYBO2SZ> SELECT controlfile_type, controlfile_sequence#, controlfile_change#,controlfile_time,open_resetlogs                  
  2   FROM v$database;

CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CONTROLFILE_TIME  OPEN_RESETL
------- --------------------- ------------------- ----------------- -----------
CURRENT                  6012             1151639 20120910 04:30:14 NOT ALLOWED

-->使用带using backup controlfile的recover 命令,出现Specify log提示
-->此时再开另一个session连接到实例,下面以idle开头的sql提示符即为另一个session
sys@SYBO2SZ> recover database using backup controlfile;
ORA-00279: change 1160803 generated at 09/10/2012 11:23:59 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_793474012_1_3.arc
ORA-00280: change 1160803 for thread 1 is in sequence #3


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
Media recovery cancelled.

    -->session2 的操作
	idle> conn / as sysdba
	Connected.
	idle> alter session set nls_date_format='yyyymmdd hh24:mi:ss';
		
	Session altered.
		
	-->下面的查询在使用recover database using backup controlfile后此时controlfile_type为BACKUP
	-->且open_resetlogs为REQUIRED,相应的sequence以及change#全部发生了变化
	idle> SELECT controlfile_type, controlfile_sequence#, controlfile_change#,controlfile_time,open_resetlogs 
	  2  FROM v$database;
		
	CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CONTROLFILE_TIME  OPEN_RESETL
	------- --------------------- ------------------- ----------------- -----------
	BACKUP                   6014             1160803 20120910 11:23:59 REQUIRED

-->上面的查询完成后,输入cancel,提示Media recovery cancelled
-->尝试使用open方式打开数据库,提示必须使用RESETLOGS or NORESETLOGS选项
sys@SYBO2SZ> alter