关于using backup controlfile的理解

来源:互联网 发布:电影票房数据分析 编辑:程序博客网 时间:2024/05/16 09:28

       首先理解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 mountORACLE 例程已经启动。Total System Global Area  734003200 bytesFixed Size    2023688 bytesVariable Size  213913336 bytesDatabase Buffers  515899392 bytesRedo 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#------------------ 383089325SQL> 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_.arcORA-00280: 更改 383089325 (用于线程 1) 在序列 #1 中指定日志: {<RET>=suggested | filename | AUTO | CANCEL}
输入relog

/data/orcl/redo02.logORA-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_.arcORA-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、重建控制文件

原创粉丝点击