理解 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 database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

-->使用resetlogs选项打开数据库,注意,此时如果使用noresetlogs选项,会重复出现上述提示
-->此时提示file1需要介质恢复
sys@SYBO2SZ> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf'

-->根据recover的提示,查看arch_793474012_1_3.arc文件,此时文件并不存在
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive/arch_793474012_1_3.arc
ls: /u02/database/SYBO2SZ/archive/arch_793474012_1_3.arc: No such file or directory

-->再次尝试恢复,依然提示需要arch_793474012_1_3.arc归档日志,此时在session2中查看状态信息
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

-->将组3的联机日志路径复制到Specify log处实现完全恢复
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log
Log applied.
Media recovery complete.

	-->session2
	-->可以看到控制文件的sequence#发生了几次变化
	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
		
	idle> /
		
	CONTROL CONTROLFILE_SEQUENCE# CONTROLFILE_CHANGE# CONTROLFILE_TIME  OPEN_RESETL
	------- --------------------- ------------------- ----------------- -----------
	BACKUP                   6015             1160803 20120910 11:23:59 REQUIRED
		
	-->查看当前联机日志信息
	idle> select * from v$logfile;

	    GROUP# STATUS  TYPE    MEMBER                                                  IS_
	---------- ------- ------- ------------------------------------------------------- ---
	         3         ONLINE  /u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log          NO
	         3         ONLINE  /u02/database/SYBO2SZ/redolog/log3bSYBO2SZ.log          NO
	         4         ONLINE  /u02/database/SYBO2SZ/redolog/log4aSYBO2SZ.log          NO
	         4         ONLINE  /u02/database/SYBO2SZ/redolog/log4bSYBO2SZ.log          NO
		
	-->此时日志组3为current状态,因此将组3的联机日志路径复制到Specify log处实现完全恢复
	idle> select * from v$log;
		
	    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
	---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -----------------
	         4          1          2   20971520          2 YES INACTIVE               1124329 20120909 09:00:49
	         3          1          3   20971520          2 NO  CURRENT                1150957 20120910 04:00:06

-->完全恢复成功后,使用open方式依旧不成功		
sys@SYBO2SZ> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

-->使用open resetlogs方式成功打开数据库
sys@SYBO2SZ> alter database open resetlogs;

Database altered.

    -->session 2
    -->此时session 2中controlfile_type已经被置为CURRENT,open_resetlogs方式也被置为NOT ALLOWED
	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
	------- --------------------- ------------------- ----------------- -----------
	CURRENT                  6073             1160878 20120910 12:09:58 NOT ALLOWED

-->查看数据文件的时间信息,此时已被更新到最新状态		
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/oradata/sys*
-rw-r----- 1 oracle oinstall 501M 2012-09-10 12:09 /u02/database/SYBO2SZ/oradata/sysSYBO2SZ.dbf
-rw-r----- 1 oracle oinstall 301M 2012-09-10 12:09 /u02/database/SYBO2SZ/oradata/sysauxSYBO2SZ.dbf

sys@SYBO2SZ> ho date
Mon Sep 10 12:10:42 CST 2012

-->相应的新的incarnation已经产生
sys@SYBO2SZ> archive log list;      
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u02/database/SYBO2SZ/archive/
Oldest online log sequence     1
Next log sequence to archive   1
Current log sequence           1

二、总结 1、using backup controlfile用于恢复备份的控制文件与当前的控制文件不一致的情形 2、一旦使用了using backup controlfile方式,控制文件的类型将由 current 转移到 backup 类型,同时open_resetlogs为required 3、一旦使用了using backup controlfile方式,后续再次使用recover database将变得无效 4、必须要使用 resetlogs 方式打开数据库,即使我们做的是完全恢复 5、注意理解演示中时间状态的更新情况。实际上来说是实例的启动过程,即:     nomount:    根据pfile 或 spfile 启动相关后台进程,分配SGA     mount:         打开控制文件,检查控制文件状态一致性,将数据库与实例关联起来     open:            根据控制文件中记录的数据文件日志文件对其进行逐一检查无误后,整个数据库置于open状态

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

Oracle 审计失败的用户登陆(Oracle audit)

       对于在线交易系统,且Oracle用户在使用缺省的profile的情形下,多用户共享相同的数据库用户及密码,任意用户输入错误密码累计达到10次以上,...

1283
来自专栏杨建荣的学习笔记

配置dg broker的问题分析及修复(r6笔记第84天)

最近从同事那儿接手了一套新环境,备库因为服务器问题已经下架,重新配了一台服务器,所以需要搭一套备库,主库已经配置好了,而且同事已经把在主库把dg broker配...

3797
来自专栏张善友的专栏

SQL Server 2012 中的 Service Broker功能的一些改进或增强

1. 可以将消息发送到多个目标服务(多播) 通过支持多个会话句柄,扩展了 SEND (Transact-SQL) 语句的语法以启用多播。 DECLARE @di...

1957
来自专栏杨建荣的学习笔记

dataguard switchover的自动化脚本实现 (r5笔记第48天)

data guard的主要功能就是作为备库来同步主库的数据变化,一般使用中物理standby使用的比较多。data guard显示威力的一个场景就是switho...

3585
来自专栏DannyHoo的专栏

开发后期在各个页面中添加友盟统计

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

3002
来自专栏我的博客

Sqlite使用说明

安装apt-get install slqite .databases List names and files of attached databases(列...

3594
来自专栏乐沙弥的世界

使用crs_profile管理RAC资源配置文件

    profile通常指配置文件,crs_profile望文生义可知,就是管理集群的配置文件。在Oraclele RAC中,所有的CRS资源存放在OCR磁盘...

763
来自专栏乐沙弥的世界

ORA-19815,ORA-19809 :limit exceeded for recovery files

    数据库重新启动的时候,收到了ORA-19815的错误。从错误的提示来看,是由于闪回区的空间被填满导致无法成功启动。这种情形我们通常考虑的是清除归档日志,...

973
来自专栏数据和云

数据恢复:隐含参数_minimum_giga_scn被废弃后如何调SCN

崔华,网名 dbsnake Oracle ACE Director,ACOUG 核心专家 在很多数据恢复的场景中,我们可能需要调节SCN,但是一个重要的隐含参数...

30210
来自专栏杨建荣的学习笔记

停止数据库没有响应的问题分析(r9笔记第51天)

昨天写了一篇停库没有响应的问题分析,其实对于我来说,还是有些不太踏实,里面有几点需要改进。 因为是测试环境,所以操作的时候就随意了一些,如果是生产环境,直接ki...

3664

扫码关注云+社区

领取腾讯云代金券