LoginSignup
6

【備忘録】Db2 バックアップ・リストア手順

Last updated at Posted at 2021-03-11

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. オフライン・バックアップ

オフライン・バックアップリストアの大まかな流れは、
以下の通りになります。

image.png

以下に オフライン・バックアップの手順を記述します。

① バックアップ

  • バックアップ取得

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. オンライン・バックアップ

オンライン・バックアップリストアの大まかな流れは、
以下の通りになります。

image.png

以下に オンライン・バックアップの手順を記述します。

① バックアップ

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/

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
6