听说过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 --Blog : http://blog.csdn.net/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的异机数据库克隆(rman duplicate)
基于RMAN从活动数据库异机克隆(rman duplicate from active DB)
RMAN duplicate from active 时遭遇 ORA-17627 ORA-12154
Oracle 基于备份控制文件的恢复(unsing backup controlfile)