`
wsql
  • 浏览: 11774933 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Oracle 基于备份控制文件的恢复(unsing backup controlfile)

 
阅读更多

通常在当前控制文件丢失,或者当前的控制文件与需要恢复的控制文件不一致的情况下,我们需要重新创建一个控制文件或者使用 unsing
backup controlfile方式来恢复控制文件。说简单点,只要是备份的控制文件与当前的控制文件不一致进行恢复数据库,就需要使用到 unsing
backup controlfile方式,而一旦使用了该方式,则需使用resetlgos选项来打开数据库。

有关控制文件的介绍请参考: Oracle 控制文件(CONTROLFILE)

using backup controlfile 请参考:理解 using backup controlfile

一、基于备份控制文件的恢复注意事项(无论是否使用恢复目录catalog)
1、即使没有数据文件需要还原,当使用unsing backup controlfile 方式时必须结合 recover 命令
2、不论使用备份的控制文件进行时点恢复或完全恢复,必须使用 open resetlogs 方式打开数据库
3、如果联机日志不可访问,必须使用不完全恢复到联机日志文件中最早的一个SCN之前。这是因为RMAN并不备份联机日志文件
4、在恢复期间,RMAN自动搜索联机日志和没有记录在RMAN存储仓库中的归档日志以完成恢复
5、RMAN会根据初始化参数文件中归档位置以及控制文件联机日志信息自动寻找有效的归档日志和联机日志。使用unsing backup controlfile方
式时,在恢复期间,一旦归档目的地以及归档格式发生变化,或添加新的联机日志成员将收到RMAN-06054错误信息。

本文主要使用热备方式来完成演示

二、演示unsing backup controlfile的使用

1、控制文件全部丢失的情形(控制文件备份后发生变化)

-->首先使用热备脚本进行备份
sys@SYBO2SZ> get db_hot_bak.sql
  1  set feedback off heading off verify off
  2  set pagesize 0 linesize 200
  3  define dir='/u02/database/SYBO2SZ/backup/hotbak'
  4  define script='/tmp/tmphotbak.sql'
  5  spool &script
  6  select 'ho cp '||name||' &dir' from v$datafile;
  7  spool off
  8  alter database begin backup;
  9  start &script
 10  alter database end backup;
 11  alter database backup controlfile to '&dir/contlbak.ctl' reuse;
 12  create pfile='&dir/initSYBO2SZ.ora' from spfile;
 13* set feedback on heading on verify on pagesize 100
 
sys@SYBO2SZ> @db_hot_bak 

sys@SYBO2SZ> show parameter control_files

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
control_files                        string      /u02/database/SYBO2SZ/controlf
                                                 /cntl1SYBO2SZ.ctl, /u02/databa
                                                 se/SYBO2SZ/controlf/cntl2SYBO2
                                                 SZ.ctl, /u02/database/SYBO2SZ/
                                                 controlf/cntl3SYBO2SZ.ctl
                                                 
-->为数据库添加新的表空间,此时控制文件将不同于先前备份的控制文件                                                  
sys@SYBO2SZ> create tablespace tbs datafile '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf' size 10m autoextend on;

Tablespace created.

-->为数据库添加对象
sys@SYBO2SZ> create table tb_emp tablespace tbs as select * from scott.emp ;

Table created.

sys@SYBO2SZ> select count(*) from tb_emp;

  COUNT(*)
----------
        14

sys@SYBO2SZ> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         3          1        116   20971520          2 NO  CURRENT                1078066 08-SEP-12
         4          1        115   20971520          2 YES INACTIVE               1063428 08-SEP-12

sys@SYBO2SZ> select to_char(sysdate,'yyyymmdd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,
-----------------
20120908 16:30:41

-->切换日志
sys@SYBO2SZ> alter system archive log current;

System altered.

-->删除部分记录用于恢复后验证
sys@SYBO2SZ> delete from tb_emp where deptno=10;

3 rows deleted.

sys@SYBO2SZ> commit;

Commit complete.

sys@SYBO2SZ> alter system archive log current;

System altered.

sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
total 143M
-rw-r----- 1 oracle oinstall  15M 2012-09-08 16:20 arch_792094299_1_115.arc
-rw-r----- 1 oracle oinstall 236K 2012-09-08 16:30 arch_792094299_1_116.arc
-rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:32 arch_792094299_1_117.arc

-->异常关机
sys@SYBO2SZ> shutdown abort;
ORACLE instance shut down.

-->模拟所有控制文件丢失
sys@SYBO2SZ> ho rm -rf /u02/database/SYBO2SZ/controlf/*

sys@SYBO2SZ> ho ls /u02/database/SYBO2SZ/controlf/

-->启动后收到ORA-00205错误
sys@SYBO2SZ> startup 
ORACLE instance started.

Total System Global Area  599785472 bytes
Fixed Size                  2074568 bytes
Variable Size             276826168 bytes
Database Buffers          314572800 bytes
Redo Buffers                6311936 bytes
ORA-00205: error in identifying control file, check alert log for more info

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

INSTANCE_NAME    STATUS
---------------- ------------
SYBO2SZ          STARTED

sys@SYBO2SZ> select name,open_mode from v$database;
select name,open_mode from v$database
                           *
ERROR at line 1:
ORA-01507: database not mounted

-->还原控制文件
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl

sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl2SYBO2SZ.ctl

sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl3SYBO2SZ.ctl

-->mount数据库
sys@SYBO2SZ> alter database mount;

Database altered.

-->由于仅仅是丢失了控制文件,因此我们只还原控制文件
-->恢复数据库,提示需要使用BACKUP CONTROLFILE选项,因为控制文件在备份后发生了变化
sys@SYBO2SZ> recover database;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

-->提示需要实用到116归档日志
sys@SYBO2SZ> recover database using backup controlfile;
ORA-00279: change 1078785 generated at 09/08/2012 16:20:48 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc
ORA-00280: change 1078785 for thread 1 is in sequence #116

-->下面提示在介质恢复期间有未知的文件添加到控制文件,且文件id为9
-->由此可以推断文件9是记录在尾数为116的归档日志中,正好与前面查看的归档日志时间相符
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
ORA-00283: recovery session canceled due to errors
ORA-01244: unnamed datafile(s) added to control file by media recovery
ORA-01110: data file 9: '/u02/database/SYBO2SZ/oradata/tbs_tmp.dbf'

ORA-01112: media recovery not started

-->使用alter database create datafile重建数据文件
-->此处故意使用了不同于创建之前的文件名tbs.dbf,此处并没有任何影响,相对于对数据文件进行了重命名
sys@SYBO2SZ> alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf';

Database altered.

-->尝试再次恢复,需要使用为数位116的归档日志,输入auto后,尾数为116,117的不在需要
sys@SYBO2SZ> recover database using backup controlfile;
ORA-00279: change 1078817 generated at 09/08/2012 16:29:19 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc
ORA-00280: change 1078817 for thread 1 is in sequence #116


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto 
ORA-00279: change 1078886 generated at 09/08/2012 16:30:52 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_117.arc
ORA-00280: change 1078886 for thread 1 is in sequence #117
ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792094299_1_116.arc' no longer needed for this recovery


ORA-00279: change 1078922 generated at 09/08/2012 16:32:22 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc
ORA-00280: change 1078922 for thread 1 is in sequence #118
ORA-00278: log file '/u02/database/SYBO2SZ/archive/arch_792094299_1_117.arc' no longer needed for this recovery

-->提示未找尾数为118的归档日志,118本身还没有归档,因此来说此时是联机日志
ORA-00308: cannot open archived log '/u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

-->再次恢复
sys@SYBO2SZ> recover database using backup controlfile;
ORA-00279: change 1078922 generated at 09/08/2012 16:32:22 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_792094299_1_118.arc
ORA-00280: change 1078922 for thread 1 is in sequence #118

-->直接指定redo日志,介质恢复成功
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
/u02/database/SYBO2SZ/redolog/log3aSYBO2SZ.log
Log applied.
Media recovery complete.

-->下面需要使用RESETLOGS选项打开数据库
sys@SYBO2SZ> alter database open;  
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open

sys@SYBO2SZ> alter database open resetlogs;

Database altered.
--> Author : Robinson Cheng    -->Blog : http://blog.csdn.net/robinson_0612
-->验证新建对象的总记录数,正好等于删除后的记录数11条
sys@SYBO2SZ> select count(*) from tb_emp;

  COUNT(*)
----------
        11

2、删除表空间模拟控制文件变化的情形
下面的这个例子的处理方式并非最佳,此处仅仅为演示unsing backup controlfile的用法且使用了不完全恢复方式,对于单个数据文件和
表空间的丢失可以参考:RMAN 还原与恢复

sys@SYBO2SZ> archive log list;   -->看看归档情况,log sequence从1开始    
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
sys@SYBO2SZ> alter system switch logfile;

-->首先热备数据库
sys@SYBO2SZ> @db_hot_bak

-->新的incarnation 793471702已经产生,可以看到同时也产生了一个尾数为118的上一个incarnation的归档日志
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
total 54M
-rw-r----- 1 oracle oinstall 1.0K 2012-09-08 16:48 arch_792094299_1_118.arc
-rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:48 arch_792094299_1_117.arc
-rw-r----- 1 oracle oinstall  43K 2012-09-08 16:51 arch_793471702_1_1.arc

-->删除表空间以更新控制文件
sys@SYBO2SZ> drop tablespace tbs including contents and datafiles;

Tablespace dropped.

sys@SYBO2SZ> alter system switch logfile;

System altered.

-->切换日志后,新增了尾数为2的归档日志
sys@SYBO2SZ> ho ls -hltr /u02/database/SYBO2SZ/archive
total 54M
-rw-r----- 1 oracle oinstall 1.0K 2012-09-08 16:48 arch_792094299_1_118.arc
-rw-r----- 1 oracle oinstall 9.0K 2012-09-08 16:48 arch_792094299_1_117.arc
-rw-r----- 1 oracle oinstall  43K 2012-09-08 16:51 arch_793471702_1_1.arc
-rw-r----- 1 oracle oinstall  50K 2012-09-08 16:58 arch_793471702_1_2.arc

sys@SYBO2SZ> show parameter background_dump_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
background_dump_dest                 string      /u02/database/SYBO2SZ/bdump

-->从alert log file中查询表空间被删除的准确时间
sys@SYBO2SZ> ho cat -n /u02/database/SYBO2SZ/bdump/alert_SYBO2SZ.log | grep tbs.dbf
  6959  '/u02/database/SYBO2SZ/oradata/imp_tbs.dbf'
  6962  '/u02/database/SYBO2SZ/oradata/imp_tbs.dbf'...
 11014  alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf'
 11016  Completed: alter database create datafile 9 as '/u02/database/SYBO2SZ/oradata/tbs.dbf'
 11273  Deleted file /u02/database/SYBO2SZ/oradata/tbs.dbf

-->下面可以看到表空间及数据文件被删除的时间
-->同时也看到了控制文件进行了自动备份,因为RMAN配置中控制文件自动备份被置为ON
-->此处使用之前备份的控制文件来恢复测试,因此此处不考虑使用自动备份的控制文件
sys@SYBO2SZ> ho more +11270 /u02/database/SYBO2SZ/bdump/alert_SYBO2SZ.log
Sat Sep  8 16:57:56 2012
drop tablespace tbs including contents and datafiles
Sat Sep  8 16:57:58 2012
Deleted file /u02/database/SYBO2SZ/oradata/tbs.dbf
Starting control autobackup
Control autobackup written to DISK device
        handle '/u02/database/SYBO2SZ/backup/rman/20120907/SYBO2SZ_lev1_201209071410_c-209726751-20120908-05'
Completed: drop tablespace tbs including contents and datafiles

sys@SYBO2SZ> shutdown immediate;

-->还原控制文件及所有的数据文件
sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl1SYBO2SZ.ctl

sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl2SYBO2SZ.ctl

sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/contlbak.ctl /u02/database/SYBO2SZ/controlf/cntl3SYBO2SZ.ctl

sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/*.dbf /u02/database/SYBO2SZ/oradata/.

sys@SYBO2SZ> ho cp /u02/database/SYBO2SZ/backup/hotbak/undotbs* /u02/database/SYBO2SZ/undo/.

sys@SYBO2SZ> startup mount;
ORACLE instance started.

-->使用using backup controlfile选项以及设定时间点来恢复数据库
sys@SYBO2SZ> recover database until time '2012-09-08:16:57:56' using backup controlfile;
ORA-00279: change 1079138 generated at 09/08/2012 16:55:09 needed for thread 1
ORA-00289: suggestion : /u02/database/SYBO2SZ/archive/arch_793471702_1_2.arc
ORA-00280: change 1079138 for thread 1 is in sequence #2


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
auto
Log applied.
Media recovery complete.

sys@SYBO2SZ> alter database open resetlogs;

Database altered.

-->验证恢复的对象中的记录数
sys@SYBO2SZ> select count(*) from tb_emp;

  COUNT(*)
----------
        11

三、总结:
1、当控制文件全部丢失或损坏,且没有及时备份控制文件的情况下,需要使用unsing backup controlfile方式来恢复
2、使用unsing backup controlfile方式来恢复,需要使用resetlogs方式来打开数据库
3、尽可能配置RMAN备份使其自动备份控制文件

四、更多参考:

基于用管理的备份备份请参

Oracle 冷备份

Oracle 热备份

Oracle 备份恢复概念

Oracle 实例恢复

Oracle 基于用户管理恢复的处理(详细描述了介及其)

SYSTEM 表空间管理及备份恢复

SYSAUX表空间管理及恢复

RMAN的备份复与管理请参

RMAN 概述及其体系结构

RMAN 配置、监控与管理

RMAN 备份详解

RMAN 还原与恢复

RMAN catalog 的创建和使用

基于catalog 创建RMAN存储脚本

基于catalog 的RMAN 备份与恢复

RMAN 备份困惑(使用plus archivelog)

ORACLE体系结构请参

Oracle 表空间与数据文件

Oracle 密码文件

Oracle 参数文件

Oracle 联机重做日志文件(ONLINE LOG FILE)

Oracle 控制文件(CONTROLFILE)

Oracle 归档日志

Oracle 回滚(ROLLBACK)和撤销(UNDO)

Oracle 数据库实例启动关闭过程

Oracle 10g SGA 的自动化管理

Oracle 实例和Oracle数据库(Oracle体系结构)

分享到:
评论

相关推荐

    第十一章实验作业.docx

    1.备份控制文件 备份控制文件有两种方式,即二进制文件形式和脚本文件形式。本练习将分别备份控制文件为二进制文件和脚本文件。 (1)以二进制文件形式备份控制文件 Alter database backup controlfile to ‘c:\...

    oracle冷备份恢复和oracle异机恢复使用方法

    所有数据文件、所有控制文件、所有联机REDO LOG 文件3、冷备份的步骤①正常关闭要备份的实例(instance)②拷贝所有重要文件到备份目录下③完成备份后启动数据库4、用冷备份进行数据库恢复无归档模式:将备份文件...

    Oracle9i灾难恢复详细步骤 pdf

    编写本篇文档的目的是当Oracle9i 数据库出现灾难时怎样使用有效备份来进行数据库的不完全恢复。 二、本文档适合情况 1. 服务器崩溃,例如所有硬盘损坏、存储损坏,造成数据库崩溃,丢失所有数据 2. 有 datafile、...

    blackflagking#Notes-Databases#Oracle备份恢复之recover database的四条语句区别

    与recover database using backup controlfile until cancel效果一样Oracle会以当前controlfile

    系统及数据库备份.doc

    备份策略 1 OS系统文件和操作系统备份 以下是系统文件的备份策略: 以下是操作系统的备份策略: 2 数据库归档日志和控制文件备份 以下是归档日志和控制文件备份策略: 3 数据库数据文件备份 以下是数据文件备份策略...

    oracle10g-rman备份与恢复

    情况介绍,数据库崩溃,只剩下磁带上的通过rman 的全备份,有controlfile和spfile都在rman备份中。 通过重新安装一个同名的SID之后再进行恢复。

    RMAN测试演练即讲解

    (2) 手动备份控制文件 backup current controlfile; (3) 列出备份过的controlfile list backup of controlfile; 有14、15、16三个备份集里面有,那么肯定有过期的了,再验证下 report obsolete; 14和15作为...

    最全的oracle常用命令大全.txt

    执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置, 但此时不对数据文件和日志文件进行校验检查。 3、startup open dbname 先执行“nomount”,然后执行“mount”,再打开包括Redo log文件...

    oracle数据库冷备份的方法

    冷备份通常要备份以下文件:所有数据文件所有控制文件所有联机重做日志初始化参数文件initsid.ora(可选)先执行以下SQL语句查看所有需要备份的文件: 代码如下: SVRMGR&gt; select * from v$datafile;SVRMGR&gt; select *...

    RAC+RMAN单实例的恢复

    1)拷贝源数据库的备份... 然后根据备份恢复pfile文件(此文档使用此方法)。 4)恢复备份中的controlfile到目标库,并使库至mount状态。 5)恢复数据,更改数据文件,临时文件,日志文件的路径。 6)恢复数据库。

    成功恢复无备份RAC环境数据库

    昨天,一兄弟电话求助,有一套医院HIS数据库无法启动,RAC环境,无备份,尝试过重建控制文件操作,但失败。  远程连接后,情况如下:  1.两节点RAC,Oracle11.2.0.1版本,Linux操作系统  2.recover database时...

    oracle数据库rman备份计划及恢复

    1.rman完全恢复的前提条件:历史的datafile,controlfile和spfile备份,加上完整的archivelog和完好的redolog。  2.rman备份脚本:  a.RMAN0级备份命令:  run{  allocatechannelc1typedisk;  ...

    Oracle 11g For Dummies.pdf

    How to assess potential threats to your database, configure Oracle Recovery Manager, and set up backup and recovery procedures When to use online, offline, controlfile, and archivelog backups ...

    oracle归档日志步骤+RMAN步骤

    oracle归档日志步骤+RMAN步骤 . set ORACLE_SID=EKP sqlplus /nolog conn / as sysdba SQL&gt; archive log list;... 启动控制文件自动备份 configure retention policy to redundancy 4; 备份策略,4个版本

    oracle OCM 12c考试经验分享和题目分析

    第一次是datawarehouse时在被破坏的实例prod4中创建dblink,删除全部controlfile(prod4),需要找一下控制文件的自动备份集并恢复 第二次是dataguard搭建之前会让在pdbprod1中创建同义词,pdbprod1 的system文件被...

    Oracle数据库中的控制文件管理以及常用参数设置

    一、控制文件 作用: 二进制文件 记录了数据库当前实例的结构和行为,数据文件日志文件的信息,维护数据库一致性 ... v$controlfile —- 列出实例的所有控制文件的名字和状态 v$parameter —- 列出所有参数

    Oracle数据库的十种重新启动步骤

    在独占的系统用户下,备份控制文件: SQL&gt;alter database backup controlfile to trace; 4. 在独占的系统用户下,手工切换重作日志文件,确保当前已修改过的数据存入文件: SQL&gt;alter system switch logfile; 5. 在...

    Oracle数据库.pdf

    使用数据字典v$controlfile,查看当前数据库的控制文件的名称与路 径,具体如下: SQL&gt; COLUMN name FORMAT A50; SQL&gt; SELECT name FROM v$controlfile; 通过SHOW PARAMETER语句可以查看块的默认大小信息 SQL&gt; SHOW...

    oracle数据库备份

     数据文件、控制文件、日志文件查看如下:  select file#, status, enabled, name from V$datafile;–查看数据文件  select * from v$controlfile;–控制文件  select * from v$logfile;–日志文件  2....

    Oracle归档日志删除

    在oracle的OEM管理器中有可视化的日志展现出,当我们手工清除 archive目录下的文件后,这些记录并没有被我们从controlfile中清除掉,也就是oracle并不知道这些文件已经不存在了!这时候我们要做手工的清除的话,下面...

Global site tag (gtag.js) - Google Analytics