Oracle快照控制檔案(snapshot control file)

ysjxjf發表於2014-08-06

from  :

Oracle快照控制檔案(snapshot control file)
 
      聽說過Oracle 控制檔案,還有快照控制檔案這個說法呢?沒錯,儘管快照控制檔案很少被提及,但確實是存在,只不過在使用RMAN時這個快照控制檔案被使用。回顧一下 Oracle 控制檔案,我們知道控制檔案是Oracle體系結構中的重要組成部分之一,記錄了當前的結構資訊,同時也包含資料檔案及日誌檔案的資訊以及相關的狀態,歸檔資訊,也記錄了系統當前SCN的值等等。那快照控制檔案也就是控制檔案的一個副本,本文介紹了什麼是快照控制檔案以及何時被使用。
 
1、快照控制檔案
     快照控制檔案是由RMAN恢復管理器在系統指定位置生成的當前控制檔案的一個副本
     我們知道控制檔案在整個資料庫生命期中在不斷的時時刻刻發生變化,RMAN備份需要依賴於控制檔案或恢復目錄,也就是說需要知道備份開
     始時的檢查點SCN以及所有檔案結構資訊並且在整個備份期間這些資訊需要保持一致,但又不能鎖定控制檔案(鎖定操作無法執行檢查點,切
     換日誌等)。因此既要保持一致性,又不影響資料庫的正常操作。快照控制檔案就應運而生了。RMAN只在備份或同步操作期間對實際控制文
     件進行一個短暫的鎖定,並根據其內容來生成或重新整理快照控制檔案。一旦該動作完成之後,RMAN將切換到使用快照控制檔案進行備份及同步
     操作。從而保證備份期間控制檔案,資料檔案等等的一致性。
     綜上所述,其主要作用是使用RMAN同步恢復目錄或備份時能得到一個一致性的控制檔案。
 
2、配置快照控制檔案
[sql] 
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、演示生成快照控制檔案
[sql] 
--下面檢視新的快照控制檔案位置無任何檔案  
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   ---&gt全備啟動時間為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 開始備份,檢查控制檔案與快照控制檔案是否一致(如果不存在,從控制檔案提取資訊建立),不一致則重新整理快照控制檔案。  
--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 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66634/viewspace-1246493/,如需轉載,請註明出處,否則將追究法律責任。

相關文章