Db2(V11.5)でオンラインバックアップからデータベースをリストアする!

Db2(V11.5)でデータベースのオンラインバックアップを取得している環境において、DBのリストアを行います。

使用環境

  • CentOS 8.1 (Server with GUI)
  • Db2 V11.5

リストアに最低限必要なアーカイブログの確認

オンラインバックアップからのリストアに、最低限必要となるアーカイブログが存在することを確認します。

$ db2 list history backup all for db db01

                    List History File for db01

Number of matching file entries = 2


 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log  Backup ID
 -- --- ------------------ ---- --- ------------ ------------ --------------
  B  D  20200426000918001   N    D  S0000008.LOG S0000008.LOG                
 ----------------------------------------------------------------------------
  Contains 3 tablespace(s):

 00001 SYSCATSPACE
 00002 USERSPACE1
 00003 SYSTOOLSPACE
 ----------------------------------------------------------------------------
    Comment: DB2 BACKUP DB01 ONLINE
 Start Time: 20200426000918
   End Time: 20200426000922
     Status: A
 ----------------------------------------------------------------------------
  EID: 21 Location: /home/db2inst1/db2backups


 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log  Backup ID
 -- --- ------------------ ---- --- ------------ ------------ --------------
  B  D  20200426001741001   N    D  S0000009.LOG S0000009.LOG                
 ----------------------------------------------------------------------------
  Contains 3 tablespace(s):

 00001 SYSCATSPACE
 00002 USERSPACE1
 00003 SYSTOOLSPACE
 ----------------------------------------------------------------------------
    Comment: DB2 BACKUP DB01 ONLINE
 Start Time: 20200426001741
   End Time: 20200426001745
     Status: A
 ----------------------------------------------------------------------------
  EID: 23 Location: /home/db2inst1/db2backups

$ ls -l /home/db2inst1/db2arclogs/db2inst1/DB01/NODE0000/LOGSTREAM0000/C0000000
total 228
-rw-r-----. 1 db2inst1 db2iadm1  12288 Apr 26 00:09 S0000008.LOG
-rw-r-----. 1 db2inst1 db2iadm1  12288 Apr 26 00:17 S0000009.LOG
-rw-r-----. 1 db2inst1 db2iadm1 208896 Apr 26 01:16 S0000010.LOG

オンラインバックアップからのリストア

オンラインバックアップからDBをリストアします。世代管理されているどのバックアップからも復旧できるので、「taken at」で対象のバックアップファイルを指定します。リストア後、DBはロールフォーワードペンディングの状態になります。

$ db2 deactivate db db01
DB20000I  The DEACTIVATE DATABASE command completed successfully.
$ ls -l $HOME/db2backups
total 53128
-rw-------. 1 db2inst1 db2iadm1 27201536 Apr 26 00:09 DB01.0.db2inst1.DBPART000.20200426000918.001
-rw-------. 1 db2inst1 db2iadm1 27201536 Apr 26 00:17 DB01.0.db2inst1.DBPART000.20200426001741.001
drwxr-xr-x. 2 db2inst1 db2iadm1       58 Apr 25 23:14 tmp
$ db2 restore db db01 from $HOME/db2backups taken at 20200426000918
SQL2539W  The specified name of the backup image to restore is the same as the 
name of the target database.  Restoring to an existing database that is the 
same as the backup image database will cause the current database to be 
overwritten by the backup version.
Do you want to continue ? (y/n) y
DB20000I  The RESTORE DATABASE command completed successfully.
$ db2 get db cfg for db01 | grep -i rollforward
 Rollforward pending                                     = DATABASE

ロールフォーワードの実施(最新の状態まで回復)

ロールフォーワードを実施して最新の状態まで回復させて、ロールフォーワードペンディングの状態を解除します。

$ db2 rollforward db db01 to end of logs and stop

                                 Rollforward Status

 Input database alias                   = db01
 Number of members have returned status = 1

 Member ID                              = 0
 Rollforward status                     = not pending
 Next log file to be read               =
 Log files processed                    = S0000008.LOG - S0000009.LOG
 Last committed transaction             = 2020-04-25-15.43.02.000000 UTC

DB20000I  The ROLLFORWARD command completed successfully.

最新の状態以外の時点へのリカバリ方法

戻したいDBの時点によって、以下のリストアコマンドも使用できます。

ロールフォーワードの実施(指定時間まで)

指定時間(yyyy-mm-dd-hh.mm.ss)までのリカバリが可能です。データベースをある時点に戻したい時に使用できます。

$ db2 rollforward db db01 to yyyy-mm-dd-hh.mm.ss using local time
$ db2 rollforward db db01 stop

ロールフォーワードの実施(最小回復時間まで)

DBバックアップを取得した直後の状態に戻したい場合に、以下のコマンドが使用できます。

$ db2 rollforward db db01 to end of backup
$ db2 rollforward db db01 stop

HADR環境の場合(プライマリ障害でプライマリのバックアップをリストア)

HADR環境の場合、最新の状態まで戻す場合は、再接続できる可能性がありますが、再接続ができない場合はスタンバイ側でもDBのリストアを行ってからHADRの接続を行います。

HADR環境の場合(プライマリ障害でスタンバイのDBをリストア)

HADR環境の場合、プライマリのバックアップが使用できない場合でも、スタンバイ側のDBを「TAKE OVER BY FORCE」でプライマリ切り替え、本来のプライマリ側にスタンバイ側のDBリストアしてHADR接続後、通常のTAKEOVERでプライマリとスタンバイを切り替えて復旧させることもできます。

おわりに

DBバックアップをしっかり管理された状態で取得できていれば、DBのリストアは比較的容易に実施することができます。