1. 程式人生 > >Oracle 快照控制檔案(snapshot control file)

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

  聽說過Oracle 控制檔案,還有快照控制檔案這個說法呢?沒錯,儘管快照控制檔案很少被提及,但確實是存在,只不過在使用RMAN時這個快照控制檔案被使用。回顧一下 Oracle 控制檔案,我們知道控制檔案是Oracle體系結構中的重要組成部分之一,記錄了當前資料庫的結構資訊,同時也包含資料檔案及日誌檔案的資訊以及相關的狀態,歸檔資訊,也記錄了系統當前SCN的值等等。那快照控制檔案也就是控制檔案的一個副本,本文介紹了什麼是快照控制檔案以及何時被使用。

 

1、快照控制檔案
     快照控制檔案是由RMAN恢復管理器在系統指定位置生成的當前控制檔案的一個副本
     我們知道控制檔案在整個資料庫生命期中在不斷的時時刻刻發生變化,RMAN備份需要依賴於控制檔案或恢復目錄,也就是說需要知道備份開
     始時的檢查點SCN以及所有檔案結構資訊並且在整個備份期間這些資訊需要保持一致,但又不能鎖定控制檔案(鎖定操作無法執行檢查點,切
     換日誌等)。因此既要保持一致性,又不影響資料庫的正常操作。快照控制檔案就應運而生了。RMAN只在備份或同步操作期間對實際控制文
     件進行一個短暫的鎖定,並根據其內容來生成或重新整理快照控制檔案。一旦該動作完成之後,RMAN將切換到使用快照控制檔案進行備份及同步
     操作。從而保證備份期間控制檔案,資料檔案等等的一致性。
     綜上所述,其主要作用是使用RMAN同步恢復目錄或備份時能得到一個一致性的控制檔案。

 

2、配置快照控制檔案

a、快照控制檔案位置
 快照控制檔案的位置取決於不同的系統平臺,如果啟用了快速閃回區,預設情況下,生成的快照控制檔案並不位於閃回區
 Linux/Unix平臺為: $ORACLE_HOME/dbs/[email protected]
 Windows平臺為: %ORACLE_HOME%\database\[email protected]
 
b、檢視快照控制檔案位置
 [[email protected] dbs]$ export ORACLE_SID=usbo
 [

[email protected] 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、修改快照空檔案位置
 
[email protected]
> 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
 
 [email protected]> ho ls /u03/database/usbo/fr_area/USBO
 archivelog
 
 [email protected]> 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、演示生成快照控制檔案

--下面檢視新的快照控制檔案位置無任何檔案
[email protected]> 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
[email protected]> 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,如下
[email protected]> 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 [email protected]> create tablespace tbs_test datafile '/u03/database/usbo/oradata/tbs_test.dbf' size 5m;
 
Tablespace created.
 
14:02:54 [email protected]
 
--Author : Leshami
--Blog   : http://blog.csdn.net/leshami
 
--檢視控制檔案中,新新增的表空間資訊已經被追加到控制檔案
14:06:05 [email protected]> ho strings /u03/database/usbo/oradata/control01.ctl | grep tbs_test
/u03/database/usbo/oradata/tbs_test.dbf
 
--同時新新增的表空間資訊同樣被追到了快照控制檔案
14:07:19 [email protected]> 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 [email protected]> 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 [email protected]> 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 [email protected]> 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 [email protected]> 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 
來源:CSDN 
原文:https://blog.csdn.net/leshami/article/details/12754339 
版權宣告:本文為博主原創文章,轉載請附上博文連結!