DB2の増分バックアップ・差分バックアップ
バックアップの際にDB全体を対象とするのではなく、前回のバックアップ取得時から変更された部分だけを対象とすることで、バックアップファイルを小さくし、所要時間を短縮することができます。
変更された部分のみバックアップする方法としてDB2は増分バックアップと差分バックアップの2種類の方式を提供していますが、マニュアルではそれぞれの違いが以下のように説明されています。
-
増分 (Incremental Backup)
- 増分バックアップ・イメージは、最新の正常実行された全バックアップ操作の後に変更された、 すべてのデータベース・データのコピーです。 これは累積バックアップ・イメージともいいます。 増分バックアップを取るたびに、その前の増分バックアップ・イメージの内容が含まれるからです。 増分バックアップ・イメージの先行処理イメージは、 常に同じオブジェクトの最新の正常実行された全バックアップになります。
-
差分 (Delta Backup)
- 差分、または増分差分のバックアップ・イメージは、 当該表スペースの正常実行された最終バックアップ (全、増分、 または差分) の後に変更されたすべてのデータベース・データのコピーです。 これは差分または非累積バックアップ・イメージともいいます。 差分バックアップ・イメージの先行処理イメージは、 その差分バックアップ・イメージ中の個々の表スペースのコピーを含む、 正常実行された最新バックアップになります。
これを読むと、DB2の増分バックアップ・差分バックアップは、一般的な呼び方と意味するところが逆になっていることが分かります。英語のDelta BackupというのもDB2独特の名称です。
使用方法
DB構成パラメータの変更
増分バックアップ・差分バックアップを実行するには、事前にDB構成パラメータTRACKMOD
をON
にしておく必要があります。デフォルトはOFF
になっています。TRACKMODの変更を反映するにはDBを再起動する必要があります。
db2 => update db cfg using trackmod on
DB20000I UPDATE DATABASE CONFIGURATION コマンドが正常に完了しました。
SQL1363W 即時変更のためにサブミットされた 1
つ以上のパラメーターが動的に変更されませんでした。
これらの構成パラメーターの場合、構成パラメーターの変更が有効になる前に、データベ
ースをシャットダウンして再アクティブ化する必要があります。
db2 => connect reset
DB20000I SQL コマンドが正常に完了しました。
db2 => deactivate db sample
DB20000I DEACTIVATE DATABASE コマンドが正常に完了しました。
db2 => connect to sample
データベース接続情報
データベース・サーバー = DB2/NT64 11.1.2.2
SQL 許可 ID = SVC34
ローカル・データベース別名 = SAMPLE
db2 => get db cfg
データベースのデータベース構成
-- 省略
トラック変更ページ (TRACKMOD) = YES
-- 省略
増分バックアップ
BACKUP DB
コマンドにオプションINCREMENTAL
を指定します。
BACKUP DB dbname INCREMENTAL TO dir
差分バックアップ
BACKUP DB
コマンドにオプションINCREMENTAL DELTA
を指定します。
BACKUP DB dbname INCREMENTAL DELTA TO dir
リストア
リストアコマンドにオプションINCREMENTAL AUTO
を指定すると、datetimeで識別される増分バックアップ・差分バックアップイメージをリストアするために必要な全てのバックアップイメージが、適切な順序で自動的にリストアされます。
RESTORE DB dbname INCREMENTAL AUTO FROM dir TAKEN AT datetime
試してみた
シナリオ
フルバックアップ、増分バックアップ、差分バックアップを1つずつ取得します。その後、削除されたデータを差分バックアップから復旧してみます。
SAMPLEデータベースを使用していますが、事前にアーカイブロギング方式にしてあります。
手順と実行結果
フルバックアップ取得
増分バックアップ・差分バックアップを実行するため、一度フルバックアップをとっておきます。
db2 => backup db sample online to C:\DB2\bkup\test
バックアップは成功しました。 このバックアップ・イメージのタイム・スタンプは
20180225012324 です。
更新1回目 & 増分バックアップ
DBに対する更新処理としてテーブルを1つ作成し、増分バックアップを取得します。
db2 => connect to sample
データベース接続情報
データベース・サーバー = DB2/NT64 11.1.2.2
SQL 許可 ID = SVC34
ローカル・データベース別名 = SAMPLE
db2 => create table test(id int)
DB20000I SQL コマンドが正常に完了しました。
db2 => backup db sample online incremental to C:\DB2\bkup\test
バックアップは成功しました。 このバックアップ・イメージのタイム・スタンプは
20180225012453 です。
更新2回目 & 差分バックアップ
先ほど作成したtestテーブルにレコードをINSERTし、差分バックアップを取得します。
db2 => connect to sample
データベース接続情報
データベース・サーバー = DB2/NT64 11.1.2.2
SQL 許可 ID = SVC34
ローカル・データベース別名 = SAMPLE
db2 => insert into test values(999)
DB20000I SQL コマンドが正常に完了しました。
db2 => select * from test
ID
-----------
999
1 レコードが選択されました。
db2 => backup db sample online incremental delta to C:\DB2\bkup\test
バックアップは成功しました。 このバックアップ・イメージのタイム・スタンプは
20180225012521 です。
バックアップの確認
バックアップファイルのサイズが フル > 増分 > 差分 となっていることが分かります。
db2 => !dir C:\DB2\bkup\test
ドライブ C のボリューム ラベルは Windows です
ボリューム シリアル番号は 4A74-5036 です
C:\DB2\bkup\test のディレクトリ
2018/02/25 01:25 <DIR> .
2018/02/25 01:25 <DIR> ..
2018/02/25 01:23 176,390,144 SAMPLE.0.DB2.DBPART000.20180225012324.001
2018/02/25 01:24 99,233,792 SAMPLE.0.DB2.DBPART000.20180225012453.001
2018/02/25 01:25 11,055,104 SAMPLE.0.DB2.DBPART000.20180225012521.001
3 個のファイル 286,679,040 バイト
2 個のディレクトリ 30,853,083,136 バイトの空き領域
db2 => list history backup since 201802250123 for sample
sample の履歴ファイルのリスト
突き合わせファイル項目数 = 3
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
-- --- ------------------ ---- --- ------------ ------------ --------------
B D 20180225012324001 N D S0000001.LOG S0000001.LOG
----------------------------------------------------------------------------
4 個の表スペースを含みます:
00001 SYSCATSPACE
00002 USERSPACE1
00003 IBMDB2SAMPLEREL
00004 IBMDB2SAMPLEXML
----------------------------------------------------------------------------
Comment: DB2 BACKUP SAMPLE ONLINE
開始時刻: 20180225012324
終了時刻: 20180225012329
状況: A
----------------------------------------------------------------------------
EID: 10 ロケーション: C:\DB2\bkup\test
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
-- --- ------------------ ---- --- ------------ ------------ --------------
B D 20180225012453001 O D S0000004.LOG S0000004.LOG
----------------------------------------------------------------------------
4 個の表スペースを含みます:
00001 SYSCATSPACE
00002 USERSPACE1
00003 IBMDB2SAMPLEREL
00004 IBMDB2SAMPLEXML
----------------------------------------------------------------------------
Comment: DB2 BACKUP SAMPLE ONLINE
開始時刻: 20180225012453
終了時刻: 20180225012456
状況: A
----------------------------------------------------------------------------
EID: 14 ロケーション: C:\DB2\bkup\test
Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log Backup ID
-- --- ------------------ ---- --- ------------ ------------ --------------
B D 20180225012521001 E D S0000007.LOG S0000007.LOG
----------------------------------------------------------------------------
4 個の表スペースを含みます:
00001 SYSCATSPACE
00002 USERSPACE1
00003 IBMDB2SAMPLEREL
00004 IBMDB2SAMPLEXML
----------------------------------------------------------------------------
Comment: DB2 BACKUP SAMPLE ONLINE
開始時刻: 20180225012521
終了時刻: 20180225012522
状況: A
----------------------------------------------------------------------------
EID: 18 ロケーション: C:\DB2\bkup\test
LIST HISTORYコマンドでは、TYPEからバックアップの種類が識別できます。
TYPE | バックアップおよびリストア操作タイプ |
---|---|
D | デルタ・オフライン |
E | デルタ・オンライン |
F | オフライン |
I | 増分オフライン |
M | Merged |
N | オンライン |
O | 増分オンライン |
R | 再ビルド |
障害の発生
新人のS君が誤ってtestテーブルのデータをDELETEしてしまいました。
db2 => connect to sample
データベース接続情報
データベース・サーバー = DB2/NT64 11.1.2.2
SQL 許可 ID = SVC34
ローカル・データベース別名 = SAMPLE
db2 => delete from test
DB20000I SQL コマンドが正常に完了しました。
db2 => select * from test
ID
-----------
0 レコードが選択されました。
リストア
testテーブルのデータを復旧するため、最後に取得した差分バックアップをリストアします。
db2 => restore db sample incremental auto from C:\DB2\bkup\test taken at 20180225012521
SQL2539W リストアするバックアップ・イメージに指定された名前がターゲット・データ
ベースの名前と同じになっています。
バックアップ・イメージ・データベースと同じ既存データベースをリストアすると、現行
のデータベースがバックアップ・バージョンによって上書きされます。
続けますか。 (y/n) y
DB20000I RESTORE DATABASE コマンドが正常に完了しました。
db2 => rollforward db sample to end of backup and complete
ロールフォワード状況
入力データベース別名 = sample
状況を返したメンバーの数 = 1
メンバー ID = 0
ロールフォワード状況 = 非ペンディング
次に読み込むログ・ファイル =
処理したログ・ファイル = S0000007.LOG - S0000008.LOG
最後にコミットしたトランザクション = 2018-02-24-16.25.20.000000 UTC
DB20000I ROLLFORWARD コマンドが正常に完了しました。
RESTOREコマンドの結果には表示されていませんが、適用されるバックアップイメージの順序は以下のようにdb2ckrstコマンドで確認できます。
db2 => !db2ckrst -d sample -t 20180225012521
Suggested restore order of images using timestamp 20180225012521 for
database sample.
====================================================================
restore db sample incremental taken at 20180225012521
restore db sample incremental taken at 20180225012324
restore db sample incremental taken at 20180225012453
restore db sample incremental taken at 20180225012521
====================================================================
復旧の確認
無事データを復旧できました。
db2 => connect to sample
データベース接続情報
データベース・サーバー = DB2/NT64 11.1.2.2
SQL 許可 ID = SVC34
ローカル・データベース別名 = SAMPLE
db2 => select * from test
ID
-----------
999
1 レコードが選択されました。
参考資料
- atmarkIT
- 差分バックアップと増分バックアップの違い ※繰り返しになるが、DB2では両者の意味が逆転している
- IBM Knowledge Center
- DB2 for Linux UNIX and Windows 11.1.0