关于using backup controlfile的理解

       首先理解recover database的过程,就是数据库以当前控制文件中记录的SCN比基准,向前跑日志直到system scn=startscn=closescn=datafilescn为止。

有这样的一种情况controlfile中所记录的system scn和startscn比datafile中scn小,就是这个controlfile是备份文件,但是数据文件是新的,所以控制文件为了与数据文件匹配一致,要将自身的scn跑到和datafilescn一致。

关闭数据库,备份控制文件

[oracle@redhat4 bdump]$ cp /u01/app/oracle/oradata/ORCL/controlfile/o1_mf_91j9gw3b_.ctl ctl.ctl

打开数据库,创建表空间和表,使数据库的SCN向前推

SQL> create tablespace tbs1 datafile '/data/orcl/test0823.dbf' size 50m;

表空间已创建。

SQL> create table lhq0823 tablespace tbs1 as select *  from dba_objects;

表已创建。

SQL> select count(*) from lhq0823  
  2  ;

  COUNT(*)
----------
     50685

关闭数据库,再启动

SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area  734003200 bytes
Fixed Size		    2023688 bytes
Variable Size		  213913336 bytes
Database Buffers	  515899392 bytes
Redo Buffers		    2166784 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
第 1 行出现错误:
ORA-01122: 数据库文件 1 验证失败
ORA-01110: 数据文件 1: '/data/orcl/system01.dbf'
ORA-01207: 文件比控制文件更新 - 旧的控制文件

查询控制文件中的SCN

SQL> select checkpoint_change# from v$database;

CHECKPOINT_CHANGE#
------------------
	 383089325

SQL> select file#,checkpoint_change#,last_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
---------- ------------------ ------------
	 1	    383089325	 383089325
	 2	    383089325	 383089325
	 3	    383089325	 383089325
	 4	    383089325	 383089325
	 5	    383089325	 383089325
	 6	    383089325	 383089325
	 7	    383089325	 383089325
	 8	    383089325	 383089325

已选择8行。

查询v$datafile_header中scn信息
SQL> select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
	 1	    383090539
	 2	    383090539
	 3	    383090539
	 4	    383090539
	 5	    383090539
	 6	    383090539
	 7	    383090539
	 8	    383090539

已选择8行。

直接recover database

SQL> recover database;
ORA-00283: 恢复会话因错误而取消 ORA-01122:
数据库文件 1 验证失败
ORA-01110: 数据文件 1: '/data/orcl/system01.dbf'
ORA-01207: 文件比控制文件更新 - 旧的控制文件

使用using backup controlfile

SQL> recover database using backup controlfile;
ORA-00279: 更改 383089325 (在 08/24/2013 12:24:08 生成) 对于线程 1 是必需的 ORA-00289:
建议:
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_08_24/o1_mf_1_1_%u_.arc
ORA-00280: 更改 383089325 (用于线程 1) 在序列 #1 中


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
输入relog

/data/orcl/redo02.log
ORA-00283: 恢复会话因错误而取消 ORA-01244:
未命名的数据文件由介质恢复添加至控制文件 ORA-01110: 数据文件
9: '/data/orcl/test0823.dbf'
test0823.dbf是在备份控制文件之后建立的,所以旧控制文件中不包括这个文件信息,在recover时会自动添加至控制文件中
SQL> recover database using backup controlfile until cancel;
ORA-00283: 恢复会话因错误而取消 ORA-01111:
数据文件 9 名称未知 - 请重命名以更正文件 ORA-01110:
数据文件 9: '/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00009'
ORA-01157: 无法标识/锁定数据文件 9 - 请参阅 DBWR 跟踪文件 ORA-01111:
数据文件 9 名称未知 - 请重命名以更正文件 ORA-01110:
数据文件 9: '/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00009'
这里自动在控制文件中建立的文件路径不对,应该是/data/orcl/test0823.dbf,所以需要rename一下

SQL> alter database rename file '/u01/app/oracle/product/10.2.0/db_1/dbs/UNNAMED00009' to '/data/orcl/test0823.dbf';

数据库已更改。

SQL> recover database using backup controlfile;
ORA-00279: 更改 383090104 (在 08/24/2013 17:14:46 生成) 对于线程 1 是必需的 ORA-00289:
建议:
/u01/app/oracle/flash_recovery_area/ORCL/archivelog/2013_08_25/o1_mf_1_1_%u_.arc
ORA-00280: 更改 383090104 (用于线程 1) 在序列 #1 中


指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
/data/orcl/redo02.log
已应用的日志。
完成介质恢复。

SQL> alter database open resetlogs;

数据库已更改。

SQL> select count(*) from lhq0823;

  COUNT(*)
----------
     50685

数据恢复正常


小结:在以下情况需要使用using backup contriolfile

          1、使用备份控制文件

          2、重建控制文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值