Db2と、Db2 on Cloudと、Db2 Warehouse on Cloudは何が違う？ ~運用編 (1) バックアップ/リストア~

## はじめに
2022年現在、Db2には多くの提供形態があります。
[(参考：2022年6月のDb2製品ラインナップを整理してみる)](https://qiita.com/mi-kana/items/f995a924ac6e3368d1db)

10年前まではオンプレミス環境での利用が圧倒的に多かったDb2も、IaaS環境での稼働はすっかり一般的になり、DBaaSであるDb2 on Cloud, Db2 Warehouse on Cloud（略称：Db2WoC）の利用検討も増えてきているようです。
DBaaSであるDb2 on Cloud , Db2WoCではサービス利用を申し込めば、作成済のDBを提供されてすぐに利用開始することができます。
そして、OSログインは不要です。そもそもDb2が稼働するOSへログインすることはできません。
となると、どうやって運用管理を行うのでしょう？
DBaaSですから障害が起きたときのサービス復旧はベンダーであるIBMにおまかせで良さそうですが、DBサーバで日々行われる運用操作は多岐にわたります。
バックアップ、統計情報収集、再編成、モニタリングなど、一般的に行われるデータベース運用操作がDb2 on Cloud, Db2WoCではどうなるのか、何ができるかは知っておきたいところです。

そこで、オンプレミス環境、IaaS環境で稼働するDb2で通常行われる定常運用操作を、Db2 on Cloud , Db2WoCではどのように行えるのかを整理します。

## 目次
**(1) バックアップ/リストア (この記事)**
[(2) 統計情報収集/再編成](https://qiita.com/mi-kana/items/1b7f3af2138cea631db0)
[(3) モニタリング/監視](https://qiita.com/Haruka-Ogawa/items/ee07a302047b788940c4)

この記事では、(1) バックアップ/リストアについて扱います。

## 各環境におけるDBバックアップ/リストアの特徴

オンプレミス版、Db2 on Cloud、Db2WoCにおける、DBのバックアップ/リストアに関する特徴は以下の通りです。

|項目　　　　　|オンプレミス版|Db2 on Cloud<br>（有料プラン）　　|Db2WoC　　　　　　|
|---|---|---|---|
|バックアップ・<br>タイミング|・任意<br>・自動バックアップも<br>構成可能（※1）|・日次（自動）<br>・任意|・日次（自動）<br>・任意|
|バックアップ<br>方法|・backupコマンド<br>・ストレージ・コピー|・任意のタイミング<br>で取得する場合<br>　- Webコンソール<br>　- REST API|・任意のタイミング<br>で取得する場合<br>　- Webコンソール<br>　- REST API|
|リストア方法|・restoreコマンド<br>・ストレージ・コピー<br>のリストア＋<br>db2inidbコマンド|・Webコンソール<br>・REST API|・Webコンソール<br>・REST API|
|リストアの<br>復元ポイント|・end of backup<br>・end of logs（※2）<br>・point-in-time（※2）|・end of backup<br>・point-in-time|・end of backup|
|バックアップ・<br>イメージの管理|・手動削除<br>・自動削除も構成可能<br>（※3）|・過去14日間保存|・IBM Cloudの<br>場合：過去7日間<br>保存（保存される<br>バックアップ数は<br>最大7個）<br>・AWSの場合：過去<br>7日間保存（保存<br>されるバックアップ<br>数は最大7個。<br>無制限のバックアッ<br>プを保持するように<br>構成可能）|

（※1）Db2 backupコマンドによるバックアップの取得
（※2）アーカイブロギングの場合のみ可能
（※3）Db2 backupコマンドを使って取得したバックアップが対象


## オンプレミス版Db2におけるバックアップ/リストア
オンプレミス版Db2におけるバックアップ/リストアの方法としては、以下の2つがあります。

### 1. Db2のbackup/restoreコマンド
Db2のバックアップ・ユーティリティを使用する、Db2の一般的なバックアップ/リストア方法です。
Db2のbackupコマンド（以下、backupコマンド）によるバックアップでは、データベースに誰も接続していない状態でバックアップを取得するオフライン・バックアップと、データベースに接続しているアプリケーションが存在する状態でバックアップを取得できるオンライン・バックアップが選択できます。

backupコマンドで取得したバックアップは、Db2のrestoreコマンドによりリストアが可能です。バージョン回復や、リストア・リカバリーと呼ばれるもので、バックアップを取得した時点（end of backup）までの回復を行います。
アーカイブロギングの場合には、バックアップ・ファイルをリストア後、rollforwardコマンドによりログを適用（ロールフォワード回復）することで、障害発生直前（end of logs）まで、もしくは指定時刻（point-in-time）まで復旧することも可能です。

**参考情報：**
[【備忘録】Db2 バックアップ・リストア手順](https://qiita.com/Haruka-Ogawa/items/12323141eeca09fc2c78)

backupコマンドによるバックアップは、任意のタイミングで取得する以外に、自動バックアップの構成も可能です。

**参考情報：**
[Db2マニュアル「自動データベース・バックアップ」](https://www.ibm.com/docs/ja/db2/11.5?topic=overview-automatic-database-backup)
[[DB2 LUW] 自動保守のコマンドラインによる構成方法](https://www.ibm.com/support/pages/db2-luw-%E8%87%AA%E5%8B%95%E4%BF%9D%E5%AE%88%E3%81%AE%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AB%E3%82%88%E3%82%8B%E6%A7%8B%E6%88%90%E6%96%B9%E6%B3%95)

また、backupコマンドによって取得されたバックアップ・イメージは、ユーザーが必要に応じて手動で削除するか、あるいはDb2の構成パラメーター「auto_del_rec_obj」により自動削除構成とすることも可能です。

**参考情報：**
[Db2マニュアル「auto_del_rec_obj - リカバリー・オブジェクトの自動削除構成パラメーター」](https://www.ibm.com/docs/ja/db2/11.5?topic=dcp-auto-del-rec-obj-automated-deletion-recovery-objects)

### 2. ストレージ・コピー機能
ストレージの機能でデータベース領域のコピーを取得し、取得したストレージ領域をバックアップとして利用することが可能です。
本来、整合性の取れたストレージ・コピーを取得する際には、アプリケーションを停止し、書き込みを一時的に停止する必要がありますが、Db2では、データベースへの書き込みを一時的に停止する機能（Db2 WRITE SUSPEND 機能）が提供されています。この機能を使用することにより、Db2を停止することなく、データベース領域のストレージ・コピーを取得することが可能です。
ストレージ・コピー機能で取得したイメージを使用してリストアする場合、WRITE SUSPEND機能を使用して取得されたイメージは"WRITE SUSPEND"状態のままです。また、データベースとしてはログとの整合性が取れていない状態であるため、使用可能にする前にDb2のdb2inidbコマンドにより初期化作業を実施します。これにより、イメージのWRITE SUSPEND状態が解除されます。その後、ロールフォワードを実行します。
尚、ストレージ・コピーによって取得されたバックアップ・イメージは、ユーザーが必要に応じて手動で削除する必要があります。（Db2のバックアップ・ユーテリティー以外の機能でバックアップを取得した場合には、回復履歴ファイルへの書き込みが行われず、自動削除も行われません。）

**参考情報：**
[Db2マニュアル「スプリット・ミラーをバックアップ・イメージとして使用する」](https://www.ibm.com/docs/ja/db2/11.5?topic=mirror-using-split-as-backup-image)

## Db2 on Cloudにおけるバックアップ
Db2 on Cloud環境では、日次（自動）、およびユーザーが任意のタイミングでバックアップを取得できます。
バックアップが開始されると、バックアップが完了するまで一部の機能が使用できなくなる可能性があります。

**参考情報：**
[Db2 on Cloud「バックアップとリストア」 > バックアップ](https://cloud.ibm.com/docs/Db2onCloud?topic=Db2onCloud-bnr&locale=ja#br_backup)


### 1. 日次バックアップ（自動）
有料プランでは、データベースのバックアップが毎日自動で行われ、過去14日間に渡って保持されます。
日次バックアップのスケジュール（開始時刻）は、Db2 on CloudのWebコンソールより変更が可能です。
![Db2onCloud_backup-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2763758/c2a26295-378f-3329-7662-8aeb4f5995eb.png)
![Db2onCloud_backup-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2763758/8591c415-2ff0-9927-4be1-3ca5c60194ca.png)

### 2. 任意のタイミングでバックアップ
日次バックアップに加え、任意のタイミングでユーザーがバックアップを取得することも可能です。
任意のタイミングで取得する方法としては、以下の2つがあります。

#### 2-1. Webコンソールからのバックアップ
Db2 on CloudのWebコンソールより、ユーザーが任意のタイミングでバックアップを取得することが可能です。
![Db2onCloud_manualbackup-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2763758/17622b4b-c8f7-2734-b825-820366954c54.png)

#### 2-2. REST APIを使用したバックアップ
REST APIを使用することにより、ユーザーが任意のタイミングでバックアップを取得することが可能です。

**参考情報：**
[IBM Db2 on Cloud REST API「Create a backup」](https://cloud.ibm.com/apidocs/db2-on-cloud/db2-on-cloud-v4#createbackup)

## Db2 on Cloudにおけるリストア
すべての有料プランには、バックアップを、バックアップを取得した時点（end of backup）までリストアする機能と、指定時刻（point-in-time）までリストアする機能があります。
**参考情報：**
[Db2 on Cloud「バックアップとリストア」 > リストア](https://cloud.ibm.com/docs/Db2onCloud?topic=Db2onCloud-bnr&locale=ja#br_restore)

### 1. バックアップを取得した時点（end of backup）までリストア
Db2 on Cloudでバックアップを取得した時点（end of backup）までリストアする方法としては、以下の2つがあります。

#### 1-1. Webコンソールからのリストア
Db2 on CloudのWebコンソールにて、リストアする対象となるバックアップを選択して「復元」をクリックすることで、選択したバックアップを取得した時点（end of backup）までリストアすることが可能です。
![Db2onCloud_restore_endofbackup-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2763758/c2fb02c0-f1ef-c450-28fb-64f27c6928c6.png)

#### 1-2. REST APIを使用したリストア
REST APIを使用することにより、バックアップを取得した時点（end of backup）までリストアすることが可能です。

**参考情報：**
[IBM Db2 on Cloud REST API「Restore」](https://cloud.ibm.com/apidocs/db2-on-cloud/db2-on-cloud-v4#restore)

### 2. 指定時刻（point-in-time）までリストア
Db2 on Cloudで指定時刻（point-in-time）までリストアする方法としては、以下の2つがあります。
#### 2-1. Webコンソールからのリストア
Db2 on CloudのWebコンソールにて、「バックアップの実行」ボタンの横の矢印をクリックし、「リストア (特定時点)」を選択します。
![Db2onCloud_restore_pointintime-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2763758/26510206-2dd8-5476-2d46-f0231141360c.png)
リストアする日時を選択すると、過去14日間に行われた保存バックアップのプールの中から
要求された指定時刻に最も近いバックアップが選択され、選択された指定時刻（point-in-time）までリストアされます。
![Db2onCloud_restore_pointintime-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2763758/19189baa-f384-2547-c1c2-19abf41dcbc8.png)

※ 指定時刻（point-in-time）までリストアのプロセスは、選択された指定時刻よりも後の日付で保存されている過去のバックアップをすべて無効にします。これは、リストアの結果として時系列に相違が生じるためです。

#### 2-2. REST APIを使用したリストア
REST APIを使用することにより、指定時刻（point-in-time）までリストアすることが可能です。

**参考情報：**
[IBM Db2 on Cloud REST API「Restore」](https://cloud.ibm.com/apidocs/db2-on-cloud/db2-on-cloud-v4#restore)

## Db2WoCにおけるバックアップ
Db2WoC環境でも、Db2 on Cloud同様、日次（自動）、およびユーザーが任意のタイミングでバックアップを取得できます。
スナップショット・バックアップが完了するには約3分かかります。 この間、システムにおけるすべての書き込みはキューに入れられ、キューに入れられた書き込みに依存しないすべての読み取りは続行されます。 

**参考情報：**
[Db2 Warehouse on Cloud「スナップショット・バックアップおよびリストア」](https://cloud.ibm.com/docs/Db2whc?topic=Db2whc-br)

### 1. 日次バックアップ（自動）
データベースのスナップショット・バックアップが毎日自動で行われます。IBM Cloudの場合は過去7日間の日次スナップショットが保持されます。AWSの場合、デフォルトでは過去7日間の日次スナップショットが保持されますが、必要に応じて、より長いスナップショット・バックアップ保存期間を構成することも可能です。

日次バックアップのスケジュール（開始時刻）は、Db2WoCのWebコンソールより変更が可能です。
![WoC_backup-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2763758/b6bc8956-0bd1-60ee-38d8-403a7653203f.png)
![WoC_backup-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2763758/89bd09be-dec9-d061-6e2f-234093cd9649.png)

### 2. 任意のタイミングでバックアップ
日次バックアップに加え、任意のタイミングでユーザーがバックアップを取得することも可能です。
任意のタイミングで取得する方法としては、以下の2つがあります。

#### 2-1. Webコンソールからのバックアップ
Db2WoCのWebコンソールより、ユーザーが任意のタイミングでバックアップを取得することが可能です。
![WoC_manualbackup-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2763758/516f958b-36ac-cb24-e492-5fd2a55ddaa6.png)

#### 2-2. REST APIを使用したバックアップ
REST APIを使用することにより、ユーザーが任意のタイミングでバックアップを取得することが可能です。

**参考情報：**
[REST API「Create a backup」](https://cloud.ibm.com/apidocs/db2-warehouse-on-cloud/db2-warehouse-on-cloud-v4#createbackup)

## Db2WoCにおけるリストア
Db2WoCでは、バックアップを取得した時点（end of backup）までリストアする機能を提供します。
リストアする方法としては、以下の2つがあります。

### 1. Webコンソールからのリストア
Db2WoCのWebコンソールにて、リストアする対象となるバックアップを選択して「復元」をクリックすることで、選択したバックアップを取得した時点（end of backup）までリストアすることが可能です。
![WoC_restore_endofbackup-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2763758/1c540ff0-0fb0-cb5c-fde9-c7ceecf72aee.png)

### 2. REST APIを使用したリストア
REST APIを使用することにより、バックアップを取得した時点（end of backup）までリストアすることが可能です。

**参考情報：**
[REST API「Restore」](https://cloud.ibm.com/apidocs/db2-warehouse-on-cloud/db2-warehouse-on-cloud-v4#restore)