听说过Oracle 控制文件,还有快照控制文件这个说法呢?没错,尽管快照控制文件很少被提及,但确实是存在,只不过在使用RMAN时这个快照控制文件被使用。回顾一下 Oracle 控制文件,我们知道控制文件是Oracle体系结构中的重要组成部分之一,记录了当前数据库的结构信息,同时也包含数据文件及日志文件的信息以及相关的状态,归档信息,也记录了系统当前SCN的值等等。那快照控制文件也就是控制文件的一个副本,本文介绍了什么是快照控制文件以及何时被使用。


1、快照控制文件

     快照控制文件是由RMAN恢复管理器在系统指定位置生成的当前控制文件的一个副本

     我们知道控制文件在整个数据库生命期中在不断的时时刻刻发生变化,RMAN备份需要依赖于控制文件或恢复目录,也就是说需要知道备份开

     始时的检查点SCN以及所有文件结构信息并且在整个备份期间这些信息需要保持一致,但又不能锁定控制文件(锁定操作无法执行检查点,切

     换日志等)。因此既要保持一致性,又不影响数据库的正常操作。快照控制文件就应运而生了。RMAN只在备份或同步操作期间对实际控制文

     件进行一个短暂的锁定,并根据其内容来生成或刷新快照控制文件。一旦该动作完成之后,RMAN将切换到使用快照控制文件进行备份及同步

     操作。从而保证备份期间控制文件,数据文件等等的一致性。

     综上所述,其主要作用是使用RMAN同步恢复目录或备份时能得到一个一致性的控制文件。


2、配置快照控制文件

a、快照控制文件位置

 快照控制文件的位置取决于不同的系统平台,如果启用了快速闪回区,缺省情况下,生成的快照控制文件并不位于闪回区

 Linux/Unix平台为: $ORACLE_HOME/dbs/snapcf_@.f

 Windows平台为: %ORACLE_HOME%\database\snapcf_@.f


b、查看快照控制文件位置

 [oracle@linux1 dbs]$ export ORACLE_SID=usbo

 [oracle@linux1 dbs]$ rman target /


 --查看快照控制文件的位置

 RMAN> show snapshot controlfile name;


 RMAN configuration parameters for database with db_unique_name USBO are:

 CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/db_1/dbs/snapcf_usbo.f'; # default


c、修改快照空文件位置

 sys@USBO> show parameter db_recov


 NAME                                 TYPE                              VALUE

 ------------------------------------ --------------------------------- ------------------------------

 db_recovery_file_dest                string                            /u03/database/usbo/fr_area

 db_recovery_file_dest_size           big integer                       3852M


 sys@USBO> ho ls /u03/database/usbo/fr_area/USBO

 archivelog


 sys@USBO> ho mkdir -p /u03/database/usbo/fr_area/USBO/snap


 --使用configure命令来配置快照控制文件的位置,如下,我们修改到使用闪回区来存放

 RMAN> configure snapshot controlfile name to '/u03/database/usbo/fr_area/USBO/snap/snapcf_usbo.f';


 new RMAN configuration parameters:

 CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u03/database/usbo/fr_area/USBO/snap/snapcf_usbo.f';

 new RMAN configuration parameters are successfully stored


 --查看修改之后快照控制文件的位置

 RMAN> show snapshot controlfile name;


 RMAN configuration parameters for database with db_unique_name USBO are:

 CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u03/database/usbo/fr_area/USBO/snap/snapcf_usbo.f';


3、演示生成快照控制文件

--下面查看新的快照控制文件位置无任何文件

sys@USBO> ho ls -hltr /u03/database/usbo/fr_area/USBO/snap

total 0


--生成控制文件快照

--在备份控制文件时会生成控制文件快照,如下

RMAN> backup current controlfile;


Starting backup at 2013/10/15 13:46:03

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=143 device type=DISK

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

including current control file in backup set

channel ORA_DISK_1: starting piece 1 at 2013/10/15 13:46:05

channel ORA_DISK_1: finished piece 1 at 2013/10/15 13:46:07

piece handle=/u03/database/usbo/fr_area/USBO/backupset/2013_10_15/o1_mf_ncnnf_TAG20131015T134604_95sonxsx_.bkp 

tag=TAG20131015T134604 comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02

Finished backup at 2013/10/15 13:46:07


--我们看以看到已经生成了一个控制文件快照时间为13:46

sys@USBO> ho ls -hltr /u03/database/usbo/fr_area/USBO/snap

total 9.4M

-rw-r----- 1 oracle asmadmin 9.4M Oct 15 13:46 snapcf_usbo.f


--下面我们来备份系统表空间,注意,备份系统表空间时,或者数据库发生结构性变化且开启了控制文件自动备份

--则在备份时即使不指定备份控制文件,控制文件仍然会被自动备份,如下

RMAN> backup tablespace system tag=system_tbs_bak;


Starting backup at 2013/10/15 13:51:30

using channel ORA_DISK_1

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00001 name=/u03/database/usbo/oradata/system01.dbf

channel ORA_DISK_1: starting piece 1 at 2013/10/15 13:51:30

channel ORA_DISK_1: finished piece 1 at 2013/10/15 13:52:25

piece handle=/u03/database/usbo/fr_area/USBO/backupset/2013_10_15/o1_mf_nnndf_SYSTEM_TBS_BAK_95soz2l6_.bkp 

tag=SYSTEM_TBS_BAK comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:55

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

including current control file in backup set

including current SPFILE in backup set

channel ORA_DISK_1: starting piece 1 at 2013/10/15 13:52:29

channel ORA_DISK_1: finished piece 1 at 2013/10/15 13:52:30

piece handle=/u03/database/usbo/fr_area/USBO/backupset/2013_10_15/o1_mf_ncsnf_SYSTEM_TBS_BAK_95sp0x7s_.bkp 

tag=SYSTEM_TBS_BAK comment=NONE   --这个备份集就包含了控制文件与spfile文件的自动备份

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01

Finished backup at 2013/10/15 13:52:30


--检查快照控制文件是否被更新,此时文件的时间发生了变化为13:52,如下

sys@USBO> ho ls -hltr /u03/database/usbo/fr_area/USBO/snap

total 9.4M

-rw-r----- 1 oracle asmadmin 9.4M Oct 15 13:52 snapcf_usbo.f


--下面我们来做一个全备,且在全备期间添加一个新的表空间以观察快照控制文件

RMAN> backup database tag=full_bak;


Starting backup at 2013/10/15 14:02:01   --->全备启动时间为14:02:01

using channel ORA_DISK_1

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

input datafile file number=00001 name=/u03/database/usbo/oradata/system01.dbf

input datafile file number=00002 name=/u03/database/usbo/oradata/sysaux01.dbf

input datafile file number=00003 name=/u03/database/usbo/oradata/undotbs01.dbf

input datafile file number=00004 name=/u03/database/usbo/oradata/users01.dbf

channel ORA_DISK_1: starting piece 1 at 2013/10/15 14:02:01

channel ORA_DISK_1: finished piece 1 at 2013/10/15 14:03:56

piece handle=/u03/database/usbo/fr_area/USBO/backupset/2013_10_15/o1_mf_nnndf_FULL_BAK_95splt2p_.bkp tag=FULL_BAK comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:01:55

channel ORA_DISK_1: starting full datafile backup set

channel ORA_DISK_1: specifying datafile(s) in backup set

including current control file in backup set

including current SPFILE in backup set

channel ORA_DISK_1: starting piece 1 at 2013/10/15 14:04:00

channel ORA_DISK_1: finished piece 1 at 2013/10/15 14:04:02

piece handle=/u03/database/usbo/fr_area/USBO/backupset/2013_10_15/o1_mf_ncsnf_FULL_BAK_95sppjj9_.bkp tag=FULL_BAK comment=NONE

channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02

Finished backup at 2013/10/15 14:04:02


--我们开启另外一个session,此时时间为14:02:08,我们来添加一个表空间

14:02:08 sys@USBO> create tablespace tbs_test datafile '/u03/database/usbo/oradata/tbs_test.dbf' size 5m;


Tablespace created.


14:02:54 sys@USBO> 


--Author : Leshami



--查看控制文件中,新添加的表空间信息已经被追加到控制文件

14:06:05 sys@USBO> ho strings /u03/database/usbo/oradata/control01.ctl | grep tbs_test

/u03/database/usbo/oradata/tbs_test.dbf


--同时新添加的表空间信息同样被追到了快照控制文件

14:07:19 sys@USBO> ho ls -hltr /u03/database/usbo/fr_area/USBO/snap/snapcf_usbo.f

-rw-r----- 1 oracle asmadmin 9.4M Oct 15 14:04 /u03/database/usbo/fr_area/USBO/snap/snapcf_usbo.f


14:07:05 sys@USBO> ho strings /u03/database/usbo/fr_area/USBO/snap/snapcf_usbo.f | grep tbs_test

/u03/database/usbo/oradata/tbs_test.dbf


--对于备份期间控制文件的自动备份呢?

--下面的检查结果表明,自动备份的控制文件中也存在新表空间的信息

14:10:49 sys@USBO> ho strings /u03/database/usbo/fr_area/USBO/backupset/2013_10_15/o1_mf_ncsnf_FULL_BAK_95sppjj9_.bkp | grep tbs_test

/u03/database/usbo/oradata/tbs_test.dbf


--查看数据字典信息,表空间已经被添加

14:10:52 sys@USBO> select file#,name from v$datafile;


     FILE# NAME

---------- ------------------------------------------------------------

         1 /u03/database/usbo/oradata/system01.dbf

         2 /u03/database/usbo/oradata/sysaux01.dbf

         3 /u03/database/usbo/oradata/undotbs01.dbf

         4 /u03/database/usbo/oradata/users01.dbf

         5 /u03/database/usbo/oradata/tbs_test.dbf


--从上面的测试可知,

--a、RMAN 开始备份,Oracle检查控制文件与快照控制文件是否一致(如果不存在,从控制文件提取信息创建),不一致则刷新快照控制文件。

--b、RMAN从快照控制文件读取信息进行备份,此时快照控制文件并不包含新的表空间,因此备份集中没有tbs_test.dbf

--c、备份完成后进行了控制文件与spfile文件自动备份

--d、刷新了快照控制文件

--e、所以上面的检测中控制文件,快照控制文件,备份的控制文件中都包含新表空间的信息。但却没有备份,因为表空间在备份开始后被添加。


--删除演示的表空间   

14:16:07 sys@USBO> drop tablespace tbs_test including contents and datafiles;


Tablespace dropped.


--将快照控制文件位置调整到缺省路径

RMAN> configure snapshot controlfile name clear;


old RMAN configuration parameters:

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u03/database/usbo/fr_area/USBO/snap/snapcf_usbo.f';

RMAN configuration parameters are successfully reset to default value


RMAN> show snapshot controlfile name;


RMAN configuration parameters for database with db_unique_name USBO are:

CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/db_1/dbs/snapcf_usbo.f'; # default




相关参考

    中小型数据库 RMAN CATALOG 备份恢复方案(一)

    中小型数据库 RMAN CATALOG 备份恢复方案(二)

    中小型数据库 RMAN CATALOG 备份恢复方案(三)

    基于RMAN实现坏块介质恢复(blockrecover)

    用 DBMS_REPAIR 修复坏块

    RMAN 数据库克隆文件位置转换方法

    基于RMAN的异机数据库克隆(rman duplicate)

    基于 RMAN 的同机数据库克隆

    基于用户管理的同机数据库克隆

    基于RMAN从活动数据库异机克隆(rman duplicate from active DB)

    RMAN duplicate from active 时遭遇 ORA-17627 ORA-12154

    Oracle 冷备份

    Oracle 热备份

    Oracle 备份恢复概念

    Oracle 实例恢复

    Oracle 基于用户管理恢复的处理

    SYSTEM 表空间管理及备份恢复

    SYSAUX表空间管理及恢复

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

    RMAN 概述及其体系结构

    RMAN 配置、监控与管理

    RMAN 备份详解

    RMAN 还原与恢复

    RMAN catalog 的创建和使用

    基于catalog 创建RMAN存储脚本

    基于catalog 的RMAN 备份与恢复

    RMAN 备份路径困惑

    自定义 RMAN 显示的日期时间格式

    只读表空间的备份与恢复

    Oracle 基于用户管理的不完全恢复

    理解 using backup controlfile

    使用RMAN实现异机备份恢复(WIN平台)

    使用RMAN迁移文件系统数据库到ASM

    基于Linux下 Oracle 备份策略(RMAN)

    Linux 下RMAN备份shell脚本

    使用RMAN迁移数据库到异机

    RMAN 提示符下执行SQL语句

    Oracle 基于 RMAN 的不完全恢复(incomplete recovery by RMAN)

    rman 还原归档日志(restore archivelog)

--------------------- 

作者:Leshami 

版权声明:本文为博主原创文章,转载请附上博文链接!