非機能要件グレードのバックアップ要件について〜IBM Spectrum Protect関連で設計すべきこと〜

# はじめに

最近、要件定義のお勉強をしましたので、その中のバックアップについて記載します。

非機能要求グレードを満たすために、IBM Spectrum Protect関連で設計しなければいけないことをまとめました。
データはとても大事ですからね、、、バックアップはめちゃめちゃ大事だと思います。

# 非機能要求グレードで提示されているバックアップ要件の項目

[非機能要求グレードの資料](https://www.ipa.go.jp/sec/softwareengineering/std/ent03-b.html)からです。

1. C.1.2.1 データ復旧範囲
   1. 復旧不要
   2. 一部データのみ
   3. システム内全データ
2. C.1.2.2 外部データの利用可否（当該システム範囲外のデータ）
   1. 全データの復旧に利用できる
   2. 一部データの復旧に利用できる
   3. 外部データは利用できない
3. C.1.2.3 バックアップ利用範囲
   1. バックアップを取得しない
   2. 障害発生時のデータ損失防止
   3. ユーザエラーからの回復
   4. データの長期保存
4. C.1.2.4 バックアップ自動化の範囲
   1. 全ステップを手動
   2. 一部ステップを自動
   3. 全ステップを自動
5. C.1.2.5 バックアップ取得間隔
   1. バックアップを取得しない
   2. システム構成変更時などの任意タイミング
   3. 月次
   4. 週次
   5. 日時
   6. 同期バックアップ
6. C.1.2.6 バックアップ保存期間
   1. バックアップを保存しない
   2. 1年未満
   3. 3年
   4. 5年
   5. 10年以上
   6. 永久保存
7. C.1.2.7 バックアップ方式
   1. バックアップなし
   2. オフラインバックアップ
   3. オンラインバックアップ
   4. オフライン＋オンライン


# IBM Spectrum Protect 検討項目

ISPを使ってバックアップをする際の検討項目をつらつら記載しました。

## C.1.2.1 データ復旧範囲

業務でどこまで戻さないといけないか決める！！
システム停止時のシナリオを検討するところ。これによって設計が大幅に変わる。

## C.1.2.2 外部データの利用可否

外部との調整項目かと思います。

API叩き直して取得したり、上流から再送してもらえるデータならバックアップはそこまで重要ではないだろうし、
なくなると困るデータなら2重・３重とか遠隔地にバックアップを取得すべきだと思う。

## C.1.2.3 バックアップ利用範囲

何が必要か決める！！

- ファイルバックアップ
  - [inclexcl](https://www.ibm.com/support/knowledgecenter/ja/SSEQVQ_8.1.8/client/t_cfg_crtinclexcl.html)で対象のバックアップファイルを許可する&マネジメントクラスを指定する
  - baclientでバックアップを実行する

- ログバックアップ
  - アーカイブorバックアップ
  - その他はファイルバックアップと同様

- DBバックアップ
  - オンライン or オフライン
  - エクスポートファイル
  - アーカイブログ・アクティブログ
  - 監査ログ

- システムバックアップ
  - OS機能でシステムバックアップを取得
  - その他はファイルバックアップと同様

- 仮想マシン（VMDKファイル）バックアップ
  - ISP4VEを構築する
  - WEBGUIやスケジュールを組んでバックアップを実行する

- バックアップサーバ自身のバックアップ
  - TSMDB
  - システム領域
  - ファイルバックアップ
  - ログバックアップ

- etc......

![バックアップ範囲.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536789/425979c3-5d07-9baf-d504-abb5101a307b.png)


## C.1.2.4 バックアップ自動化の範囲

不定期実施以外のものは全て自動化すべきかと思います。
Linuxならシェルスクリプト、WindowsならDosなどでバックアップジョブを作成し、ジョブスケジューラで実行させるのが良いかと。

- [コマンド・ラインを使用したデータのバックアップ](https://www.ibm.com/support/knowledgecenter/ja/SSEQVQ_8.1.8/client/c_bac_cmndline.html)
- [コマンドの戻り値は？](http://publib.boulder.ibm.com/tividd/td/TSMC/GC32-0788-03/ja_JA/HTML/ans60012.htm)

また、保管媒体のメンテナンス処理も自動化が必要です。

- 不要ファイルの破棄
- テープ装置の再利用（レクラメーション）
- ２次ストレージボリュームへのマイグレーション
- etc.....

## C.1.2.5 バックアップ取得間隔

日時なのか、週次なのか、、、タイミングはいつなのかなどを決める。
管理することを考えると、JP1/AJSなどのジョブスケジューラで一括管理になると思います。

例）

|項目|実施間隔|
|:-----------|------------:|
| ファイルバックアップ | 1日２回（9時・18時）|
| ログファイル |日次（24時）|
| DBバックアップ | 週次（日曜7時）|
| システムバックアップ | 月一（第四日曜日） |

## C.1.2.6 バックアップ保存期間

いつまで保存するか決める。バックアップなら世代数、アーカイブなら期間などを設定する。
管理クラスを指定して、コピーグループを定義する。要件によって複数のコピーグループを作成する。

- 世代数・保存期間
  - [DEFINE COPYGROUP (コピー・グループの定義)](https://www.ibm.com/support/knowledgecenter/ja/SSEQVQ_8.1.8/srv.reference/r_cmd_copygroup_define.html#r_cmd_copygroup_define)
  - [QUERY COPYGROUP (コピー・グループの照会)](https://www.ibm.com/support/knowledgecenter/ja/SSEQVQ_8.1.8/srv.reference/r_cmd_copygroup_query.html#r_cmd_copygroup_query)
  - [UPDATE COPYGROUP (コピー・グループの更新)](https://www.ibm.com/support/knowledgecenter/ja/SSEQVQ_8.1.8/srv.reference/r_cmd_copygroup_update.html)

- VERExists(バージョン数)
- RETVer(保存する日数)

例）

|項目|保存間隔|
|:-----------|------------:|
| ファイルバックアップ | ２世代 |
| ログファイル | 5年 |
| DBバックアップ | 1世代 |
| システムバックアップ | 2世代 |

また、データ保存量もある程度見積もっておく必要がある。保管媒体が足りなくなるとどうしようもない・・・

## C.1.2.7 バックアップ方式

オンライン or オフラインでのバックアップをどう取るか決める

- VMDKバックアップ
  - オンライン or オフライン
    - システム停止はいつ？
- システムバックアップ
  - オフライン
    - システム停止はいつ？
- DBバックアップ
  - オンライン or オフライン
    - DB停止はいつ？

# まとめ

業務でバックアップの設計を担当していたのでその振り返りとしてまとめてみました。
また、いざと言うときにすぐ対応できるよう、定期的にリストアする訓練はした方が良いと思いました。