8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【備忘録】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/

8
9
0

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
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?