ブロックチェンジトラッキングとは
Oracleデータベースにおけるブロックチェンジトラッキング(Block Change Tracking 以下、BCT)とは、RMANにおける高速増分バックアップの際に使用される機能のことである。
そもそもRMANの増分バックアップには「差分増分バックアップ」と「累積増分バックアップ」の2種類がある。
差分増分バックアップは前回バックアップから更新があった部分(ブロック)のみをバックアップ対象とする。
一方で累積増分バックアップは、初回の全体バックアップ取得以降のすべての更新箇所をバックアップ対象とする。
この「差分増分バックアップ」で用いることが出来る機能が「高速増分バックアップ」である。
※おそらく正式には「高速(差分)増分バックアップ」
通常の差分増分バックアップの場合、バックアップ時に全データブロックを確認しにいき、更新のフラグが立っているブロックをバックアップ対象とする。
データサイズがそこまで大きくないDBであればこの作業は大して負荷にならないが、データサイズが大きければ大きいほど全データブロックへ更新があるか・ないか確認する作業に時間が掛かってしまう。
一方で高速増分バックアップの機能をオンにしておくと、更新が掛かった箇所をブロックチェンジトラッキングファイル(BCTファイル)に記録するため、バックアップ時はそのファイルを確認することでバックアップ対象のブロックを知ることが出来る。
つまりデータブロックを全舐めして「更新箇所はどこだろう」と探してからバックアップする必要が無くなる。
この更新ブロックを記録しておく機能がBCTである。
正式なメカニズムはおそらくこう
(1)DBへ更新
(2)bct_public_dba_buffer(BCTバッファ)というラージプール上の領域に更新箇所の情報が格納
(3)CTWRプロセスがBCTバッファ上の情報をBCTファイルへ書き込み※
※(3)のBCTファイルへの書き込み契機はおそらくチェックポイント
ちなみにBCTファイルにどれだけの世代数の更新を記録しておくか、設定できる隠しパラメタ(_bct_bitmaps_per_file)があるが、これは変更しないことが推奨。
(補足:増分更新バックアップの場合。累積増分バックアップの場合は残しておきたい世代数を設定しておくのが良いと思う。何にせよ隠しパラメタなのでOracleのサポートに方針を聞くべき。)
デフォルトは8(世代)だが、仮に0などに設定しておくと際限なく記録されていくのでBCTファイルのサイズが肥大化していく。
単純にストレージを食うのもあるが(と言っても大したサイズにはならないと思うが)、バックアップ時にBCTファイルを確認する作業にも時間が掛かってしまうのでお勧めできない。