1. はじめに
Db2 における データベースの オフライン・バックアップ、オンライン・バックアップ、および リストア の手順をまとめます。
2. 準備
バックアップ,リストアの手順を確認するにあたって、
Db2環境を準備し、必要なオブジェクト(データベース, テーブル)を作成します。
2-1. Db2環境準備
Db2環境を準備します。
Db2の導入方法については、以下リンク先の記事に記載しています。
・Qiita: 【備忘録】Db2 インストール手順まとめ(Linux)
https://qiita.com/Haruka-Ogawa/items/9576399209b32f3016ea
・Qiita: 【備忘録】Docker版 Db2環境 取得手順
https://qiita.com/Haruka-Ogawa/items/0a4696ded4fa40e5e983
ここでは Dockerで用意したDb2環境を使用します。
2-2. データベース・テーブル作成
バックアップ, リストアを実行するにあたって、
データベースとテーブルを作成します。
データベース(SAMPDB) を作成します。
$ db2 create db SAMPDB
DB20000I The CREATE DATABASE command completed successfully.
・Knowledge Center:CREATE DATABASE コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001941.html
作成したデータベース(SAMPDB)に接続し、
テーブル(tbl1)を作成、データの挿入を行います。
- データベース接続
$ db2 connect to SAMPDB
Database Connection Information
Database server = DB2/LINUXX8664 11.5.5.0
SQL authorization ID = DB2INST1
Local database alias = SAMPDB
- テーブル作成
$ db2 "CREATE TABLE tbl1(col1 int not null, col2 char(10))"
DB20000I The SQL command completed successfully.
$ db2 "INSERT INTO tbl1 VALUES(1, 'TEST1')"
DB20000I The SQL command completed successfully.
・Knowledge Center:CREATE TABLE ステートメント
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000927.html
作成したテーブル(tbl1)を確認します。
$ db2 "SELECT * FROM tbl1"
COL1 COL2
----------- ----------
1 TEST1
1 record(s) selected.
・Knowledge Center:SELECT ステートメント
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000993.html
注意
今回は、ロールフォワードを用いて ログの最後までリストアします。
ロギング方式が "循環ロギング" に設定されている場合、ロールフォワードが実行できないので ご注意ください。
・簡単! Db2の運用: 第5回 ログと回復管理
https://developer.ibm.com/jp/articles/j-d-db2maintenance05/
・Knowledge Center: データベース・ロギング
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.ha.doc/doc/c0006073.html
3. バックアップ・リストア手順
3-1. オフライン・バックアップ
オフライン・バックアップとリストアの大まかな流れは、
以下の通りになります。
以下に オフライン・バックアップの手順を記述します。
① バックアップ
- バックアップ取得
BACKUP DATABASE コマンドで オフライン・バックアップを実行します。
構文は以下の通りです。
BACKUP DATABASE <DB名> TO <バックアップ・イメージ保管場所>
実行例は以下の通りです。
$ db2 "BACKUP DATABASE SAMPDB TO /work/backup/"
Backup successful. The timestamp for this backup image is : 20210310112038
Knowledge Center:BACKUP DATABASE コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001933.html
タイムスタンプ(20210310112038)はリストア時に使用するので 控えておきます。
② リストア準備
リストア処理の動作を確認するため、
テーブルを更新(データ挿入)し、擬似的に障害が発生したとして データベースを削除します。
- テーブル更新
テーブル(tbl1)に対し、更新(データ挿入)を実行します。
実行例は以下の通りです。
$ db2 "INSERT INTO tbl1 VALUES(2, 'TEST2')"
DB20000I The SQL command completed successfully.
テーブル(tbl1) を確認すると、以下の通りになっています。
$ db2 "SELECT * FROM tbl1"
COL1 COL2
----------- ----------
1 TEST1
2 TEST2
2 record(s) selected.
- ログのアーカイブ
バックアップ取得後の更新を リストアしたデータベースに反映するためには ログによるロールフォワードが必要になります。
ここで ログのアーカイブを実施します。
アーカイブ実行の前に、DB(SAMPDB)から切断します。
$ db2 terminate
DB20000I The TERMINATE command completed successfully.
ARCHIVE コマンドを実行し、ログをアーカイブします。
構文は以下の通りです。
ARCHIVE LOG FOR DATABASE <DB名>
実行例は以下の通りです。
$ db2 ARCHIVE LOG FOR DATABASE SAMPDB
DB20000I The ARCHIVE LOG command completed successfully.
・Knowledge Center:ARCHIVE LOG コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0004476.html
- データベース削除
データベース(SAMPDB)の削除を実行します。
実行例は以下の通りです。
削除するにあたって、データベースを切断します。
$ db2 terminate
DB20000I The TERMINATE command completed successfully.
データベースを削除します。
$ db2 drop db SAMPDB
DB20000I The DROP DATABASE command completed successfully.
③ リストア
- リストア
RESTORE DATABASE コマンドで リストアを実行します。
コマンドの構文は以下の通りです。
RESTORE DATABASE <DB名> FROM <バックアップ・イメージ保管場所> TAKEN AT <タイムスタンプ>
実行例は以下の通りです。
$ db2 "RESTORE DATABASE SAMPDB FROM /work/backup TAKEN AT 20210310112038"
DB20000I The RESTORE DATABASE command completed successfully.
・Knowledge Center:RESTORE DATABASE コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001976.html
- ロールフォワード
ROLLFORWARD DATABASEコマンドで ロールフォワードを実行します。
TOオプションではEND OF LOGS を指定し、
ログの最後までロールフォワードするようにします。
構文は以下の通りです。
ROLLFORWARD DATABASE <DB名> TO END OF LOGS
実行例は以下の通りです。
$ db2 "ROLLFORWARD DATABASE SAMPDB TO END OF LOGS"
Rollforward Status
Input database alias = SAMPDB
Number of members have returned status = 1
Member ID = 0
Rollforward status = DB working
Next log file to be read = S0000015.LOG
Log files processed = -
Last committed transaction = 2021-03-10-11.31.16.000000 UTC
DB20000I The ROLLFORWARD command completed successfully.
・Knowledge Center:ROLLFORWARD DATABASE コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001978.html
- ロールフォワード完了
ROLLFORWARD DATABASEコマンドで COMPLETE オプションを指定し、 ロールフォワード処理を完了します。
構文は以下の通りです。
ROLLFORWARD DATABASE <DB名> COMPLETE
実行例は以下の通りです。
$ db2 "ROLLFORWARD DATABASE SAMPDB COMPLETE"
Rollforward Status
Input database alias = sampdb
Number of members have returned status = 1
Member ID = 0
Rollforward status = not pending
Next log file to be read =
Log files processed = -
Last committed transaction = 2021-03-10-11.31.16.000000 UTC
DB20000I The ROLLFORWARD command completed successfully.
・Knowledge Center:ROLLFORWARD DATABASE コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001978.html
- 確認
データベース(SAMPDB)に接続し、テーブル(tbl1)の中身を確認します。
データベース(SAMPDB)に接続します。
実行例は以下の通りです。
$ db2 connect to SAMPDB
Database Connection Information
Database server = DB2/LINUXX8664 11.5.5.0
SQL authorization ID = DB2INST1
Local database alias = SAMPDB
テーブル(tbl1)を確認します。
実行例は以下の通りです。
$ db2 "SELECT * FROM tbl1"
COL1 COL2
----------- ----------
1 TEST1
2 TEST2
2 record(s) selected.
データベースが無事リストアされていることが確認できました。
3-2. オンライン・バックアップ
オンライン・バックアップとリストアの大まかな流れは、
以下の通りになります。
以下に オンライン・バックアップの手順を記述します。
① バックアップ
BACKUP DATABASE コマンドで オンライン・バックアップを実行します。
オンライン・バックアップを取得するには、ONLINE オプションを指定します。
また、INCLUDE LOGS オプションを指定し、
バックアップ・イメージに ロールフォワードで必要な ログ・ファイルを含めます。
コマンドの構文は以下の通りです。
BACKUP DATABASE <DB名> ONLINE TO <バックアップ・イメージ保管場所> INCLUDE LOGS
実行例は以下の通りです。
$ db2 "BACKUP DATABASE SAMPDB ONLINE TO /work/backup/ INCLUDE LOGS"
Backup successful. The timestamp for this backup image is : 20210310133036
・Knowledge Center:BACKUP DATABASE コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001933.html
タイムスタンプ(20210310133036)はリストア時に使用するので 控えておきます。
② リストア準備
リストア処理の動作を確認するため、
テーブルを更新(データ挿入)し、擬似的に障害が発生したとして データベースを削除します。
- テーブル更新
テーブル(tbl1)に対し、更新(データ挿入)を実行します。
実行例は以下の通りです。
$ db2 "INSERT INTO tbl1 VALUES(2, 'TEST2')"
DB20000I The SQL command completed successfully.
テーブル(tbl1) を確認すると、以下の通りになっています。
$ db2 "SELECT * FROM tbl1"
COL1 COL2
----------- ----------
1 TEST1
2 TEST2
2 record(s) selected.
- データベース削除
データベース(SAMPDB)の削除を実行します。
実行例は以下の通りです。
削除するにあたって、データベースを切断します。
$ db2 terminate
DB20000I The TERMINATE command completed successfully.
データベースを削除します。
$ db2 drop db SAMPDB
DB20000I The DROP DATABASE command completed successfully.
③ リストア
- ログ抽出
RESTORE DATABASE コマンドで バックアップ・イメージに含めた ログを抽出します。
コマンドの構文は以下の通りです。
RESTORE DATABASE <DB名> LOGS FROM <バックアップ・イメージ保管場所> TAKEN AT <タイムスタンプ> LOGTARGET <ログ・ファイル抽出のターゲット・ディレクトリー>
実行例は以下の通りです。
$ db2 "RESTORE DATABASE SAMPDB LOGS FROM /work/backup/ TAKEN AT 20210310133036 LOGTARGET /work/logtarget"
DB20000I The RESTORE DATABASE command completed successfully.
・Knowledge Center:RESTORE DATABASE コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001976.html
- リストア
RESTORE DATABASE コマンドで リストアを実行します。
コマンドの構文は以下の通りです。
RESTORE DATABASE <DB名> FROM <バックアップ・イメージ保管場所> TAKEN AT <タイムスタンプ>
実行例は以下の通りです。
$ db2 "RESTORE DATABASE SAMPDB FROM /work/backup/ TAKEN AT 20210310133036"
DB20000I The RESTORE DATABASE command completed successfully.
・Knowledge Center:RESTORE DATABASE コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001976.html
- ロールフォワード
ロールフォワードは ROLLFORWARD DATABASEコマンドで実行します。
TOオプションではEND OF LOGS を指定し、
ログの最後までロールフォワードするようにします。
また、OVERFLOW LOG PATHオプションにて 先ほどバックアップ・イメージから抽出したログを指定します。
ROLLFORWARD DATABASE <DB名> TO END OF LOGS OVERFLOW LOG PATH(<ログ・ファイル抽出のターゲット・ディレクトリー>)
実行例は以下の通りです。
$ db2 "ROLLFORWARD DATABASE SAMPDB TO END OF LOGS OVERFLOW LOG PATH(/work/logtarget)"
Rollforward Status
Input database alias = SAMPDB
Number of members have returned status = 1
Member ID = 0
Rollforward status = DB working
Next log file to be read = S0000008.LOG
Log files processed = S0000005.LOG - S0000006.LOG
Last committed transaction = 2021-03-10-13.31.26.000000 UTC
DB20000I The ROLLFORWARD command completed successfully.
・Knowledge Center:ROLLFORWARD DATABASE コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001978.html
- ロールフォワード完了
ROLLFORWARD DATABASEコマンドで COMPLETE オプションを指定し、 ロールフォワード処理を完了します。
構文は以下の通りです。
ROLLFORWARD DATABASE <DB名> COMPLETE
実行例は以下の通りです。
$ db2 "ROLLFORWARD DATABASE SAMPDB COMPLETE"
Rollforward Status
Input database alias = SAMPDB
Number of members have returned status = 1
Member ID = 0
Rollforward status = not pending
Next log file to be read =
Log files processed = S0000005.LOG - S0000006.LOG
Last committed transaction = 2021-03-10-13.31.26.000000 UTC
DB20000I The ROLLFORWARD command completed successfully.
・Knowledge Center:ROLLFORWARD DATABASE コマンド
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.cmd.doc/doc/r0001978.html
- 確認
データベース(SAMPDB)に接続し、テーブル(tbl1)の中身を確認します。
データベース(SAMPDB)に接続します。
実行例は以下の通りです。
$ db2 connect to SAMPDB
Database Connection Information
Database server = DB2/LINUXX8664 11.5.5.0
SQL authorization ID = DB2INST1
Local database alias = SAMPDB
テーブル(tbl1)を確認します。
実行例は以下の通りです。
$ db2 "SELECT * FROM tbl1"
COL1 COL2
----------- ----------
1 TEST1
2 TEST2
2 record(s) selected.
データベースが無事リストアされていることが確認できました。
4. おわりに
Db2における バックアップ手順についてまとめました。
ここでは データベースのフルバックアップの方法について まとめましたが、
その他に 表スペース 単位でのバックアップ や 増分バックアップなどがあります。
・Knowledge Center:バックアップとリカバリーの計画の作成
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.ha.doc/doc/c0005945.html
参考情報
・Knowledge Center:データ・リカバリー
https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.ha.doc/doc/c0052073.html
・これだけはおさえたい Db2 の運用: 障害回復のためのバックアップ・リカバリー
https://developer.ibm.com/jp/technologies/data-management/articles/j-d-db2bestpractice05/
・簡単! Db2の運用: 第5回 ログと回復管理
https://developer.ibm.com/jp/articles/j-d-db2maintenance05/