淺談Blocking Changing Tracking檔案

realkid4發表於2012-07-17

 

Oracle備份還原(Backup & Recovery)是作為資料庫管理DBA最重要的工作之一,也是基本功之一。Oracle作為一款目前最成功的商用資料庫軟體系統,為使用者提供了多種型別的資料備份還原解決方案,以適應不同的場景需求。

 

簡單的說,Oracle備份還原方案主要包括兩個大型別:使用者管理(User-Managed)和系統管理(System-Managed)。我們配合不同的歸檔模式,可以實現完全備份還原和非完全備份還原。

 

在備份還原問題上,沒有一個統一要做到什麼的標準。我們在確定一個系統的備份策略時,主要是依據三個標準:

 

ü  最大容忍資料損失。系統使用者能夠最大容忍多長時間的資料丟失;

ü  最大資料儲存時間。系統使用者要求恢復最遠的資料版本,也就是備份儲存多長時間;

ü  備份時是否允許停機。在目前7×24廣泛的情況下,是否允許冷備是一個重要的需求方面;

 

對資料進行備份的時候,我們通常會採用增量Incremental的備份策略。在Oracle中,增量備份是依據Level進行配置的。Level 0實際上就是表示進行全庫備份,而Level 1就是表示增量備份,與上次的備份版本進行對比,將變化的資料塊進行備份。

 

Level 1備份又分為cumulativedifferential兩種型別。兩者的差別在於尋找對比基線的不同策略。Cumulative方式是尋找距上次全庫備份的block change差異,而Differential是尋找上次備份(可能是Incremental)的差異。

 

在本篇中,筆者主要介紹一下Oracle 進行差異備份時候的最佳化策略。

 

110g最佳化策略——Blocking Changing Tracking

 

我們從微觀角度看問題,Incremental Backup是存在一些思考的問題的。當我們進行了一次全庫備份(例如 Incremental Level 0),再次進行incremental level 1增量備份的時候,Oracle需要獲取到距離上次備份的所有資料表變化塊。

 

Blocking Changing Tracking特性之前,Oracle是透過檢索所有資料檔案資料塊的方法來進行變化資料塊的定位。具體來說,就是透過三個SCN來進行定位,分別為Checkpoint SCNIncremental start SCNBlock SCN

 

當我們的資料庫容量很大的時候,檢查資料檔案變化資料塊是一個任務很重的工作。出於效能最佳化的考慮,Oracle 10g引入了Blocking Changing Tracking機制。

 

Blocking Changing Tracking機制是Oracle為了Incremental Backup而引入的一種記錄策略。當資料庫啟用了Blocking Changing Tracking啟用之後,Oracle會在指定的目錄上生成一個檔案,以Bit Map點陣圖方式記錄資料塊的變化。當進行Incremental Backup的時候,Oracle就直接訪問這個檔案,獲取變化資料塊的資訊。這樣,就可以直接訪問到資料塊進行收集。

 

預設情況下,Blocking Changing Tracking特性是不會啟用的。下面,我們演示一下如何啟用和配置Blocking Changing Tracking特性。

 

 

2Blocking Changing Tracking配置

 

我們選擇Oracle 11g進行實驗。

 

 

SQL> conn / as sysdba

Connected.

SQL> select * from v$version;

 

BANNER

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

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

 

 

預設情況下,Blocking Changing Tracking會生成對應的Tracking File檔案。在10g之後,Tracking File的儲存是可以使用OMFOracle-Managed File)特性的,也就是說,我們可以不設定Tracking檔案的目錄名稱資訊。

 

當然,使用OMF的前提是進行db_create_file_dest的引數配置。

 

 

SQL> show parameter db_create;

 

NAME                                 TYPE        VALUE

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

db_create_file_dest                  string      /u01/app/oradata

db_create_online_log_dest_1          string

db_create_online_log_dest_2          string

(篇幅原因,省略部分內容……

 

 

如果我們不指定檔名(也是Oracle推薦的方式),就會在db_create_file_dest目錄下進行資料檔案自動建立。

 

 

SQL> alter database enable block change tracking;

Database altered.

 

 

此時,我們在檔案系統上可以看到對應的內容。

 

 

[oracle@bsplinux ~]$ cd /u01/app/oradata/

[oracle@bsplinux oradata]$ ls -l

total 8

drwxr-x--- 6 oracle oinstall 4096 Jul 17 23:36 ORA11G

[oracle@bsplinux oradata]$ cd ORA11G/

[oracle@bsplinux ORA11G]$ ls -l

total 28

drwxr-x--- 2 oracle oinstall 4096 Jul 17 23:36 changetracking

drwxr-x--- 2 oracle oinstall 4096 May 22 19:41 controlfile

drwxr-x--- 2 oracle oinstall 4096 Jul  3 03:34 datafile

drwxr-x--- 2 oracle oinstall 4096 May 22 19:42 onlinelog

 

[oracle@bsplinux ORA11G]$ cd changetracking/

[oracle@bsplinux changetracking]$ ls -l

total 11348

-rw-r----- 1 oracle oinstall 11600384 Jul 17 23:38 o1_mf_80c1nvn8_.chg

 

 

在資料庫層面上,我們可以透過檢視v$block_change_tracking來檢查。

 

 

SQL> select status, filename from v$block_change_tracking;

 

STATUS     FILENAME

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

ENABLED    /u01/app/oradata/ORA11G/changetracking/o1_mf_80c1nvn8_.chg

 

 

此時,我們就開啟了block changing tracking元件方法。關閉該特性,也有相應的方法。

 

 

SQL> alter database disable block change tracking;

Database altered.

 

 

SQL> select status, filename from v$block_change_tracking;

STATUS     FILENAME

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

DISABLED   

 

 

 

3、命名block changing tracking檔案

 

除了使用OMF,我們也是可以命名使用Tracking檔案的。下面我們開啟該功能。

 

 

SQL> alter database enable block change tracking using file '/u01/app/oradata/ORA11G/test.chg' reuse;

Database altered.

 

SQL> select status, filename from v$block_change_tracking;

STATUS     FILENAME

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

ENABLED    /u01/app/oradata/ORA11G/test.chg

 

 

我們也可以進行重新命名檔案,不過這個操作是要進行重啟資料庫進入mount狀態。

 

 

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

 

Total System Global Area  422670336 bytes

Fixed Size                  1336960 bytes

Variable Size             356518272 bytes

Database Buffers           58720256 bytes

Redo Buffers                6094848 bytes

Database mounted.

SQL> alter database rename file '/u01/app/oradata/ORA11G/test.chg' to '/u01/app/oradata/ORA11G/changetracking/o1_mf_80c1nvn8_.chg';

 

Database altered.

 

 

此時,我們可以啟動系統。

 

 

SQL> alter database open;

Database altered.

 

SQL> select status, filename from v$block_change_tracking;

STATUS     FILENAME

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

ENABLED    /u01/app/oradata/ORA11G/changetracking/o1_mf_80c1nvn8_.chg

 

 

 

4block changing tracking檔案大小

 

最後我們一起討論一下Tracking檔案的大小問題。我們在開啟Tracking功能的時候,是不能夠指定Tracking檔案的大小的。該檔案的大小是由資料庫體積大小來決定的。隨著Oracle資料庫體積的增加、減少,該檔案也會自動的進行變化。

 

Oracle中,我們可以從v$block_change_tracking中檢視到該檔案的大小資訊。在MOS上,我們查到了對應的計算公式:

 

 

= * (# of old backups + 2) * (size of db/250000)

 

 

一般情況下,我們有一個經驗對應比例1/30000。也就是1TB的資料,對應Tracking File30MB左右。

 

5、結論

 

Oracle備份還原是我們研究的一個重要方面。正式生產環境下,備份還原策略都是一個綜合性多種策略共同使用的過程。Incremental Backup在應對海量資料備份場景,有著很強的優勢。Block Changing TrackingOracle 10g的一個重要最佳化策略,值得我們研究學習。

 

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

相關文章