目的
最近のDb2はバックアップをS3互換のオブジェクトストレージに取得できるようになっています。当然IBM Cloud Object Storage(ICOS)も使えますが、少しわかりにくいところがあったため、整理します。
手順
ローカルキーストアの作成
ICOSにアクセスするためのシークレットを保管するために必要です。
$ gsk8capicmd_64 -keydb -create -db /home/teruq/var/db2/keystore/local-keystore.p12 -pw ******** -type pkcs12 -stash
$ ls -l
-rw------- 1 teruq teruq 1392 10月 11 11:08 local-keystore.p12
-rw------- 1 teruq teruq 193 10月 11 11:08 local-keystore.sth
DBM構成パラメータに設定します。インスタンスの再起動が必要です。
$ db2 update dbm cfg using keystore_location /home/teruq/var/db2/keystore/local-keystore.p12 keystore_type pkcs12
DB20000I UPDATE DATABASE MANAGER CONFIGURATION
コマンドが正常に完了しました。
SQL1362W 即時変更のためにサブミットされた 1
つ以上のパラメーターが動的に変更されませんでした。
クライアントの変更は、次回のアプリケーション始動時、
または TERMINATE
コマンドが発行されるまで有効になりません。 次の DB2START
コマンドまで、サーバーの変更は有効になりません。
$ db2 get dbm cfg | grep -i keystore_
鍵ストア・タイプ (KEYSTORE_TYPE) = PKCS12
鍵ストアのロケーション (KEYSTORE_LOCATION) = /home/teruq/var/db2/keystore/local-keystore.p12
$ db2stop force; db2start
2021-10-11 11:13:20 0 0 SQL1064N DB2STOP の処理が正常に終了しました。
SQL1064N DB2STOP の処理が正常に終了しました。
10/11/2021 11:13:23 0 0 SQL1063N DB2START の処理が正常に終了しました。
SQL1063N DB2START の処理が正常に終了しました。
ストレージアクセスのカタログ
ICOSの接続情報をストレージアクセスとしてカタログします。ポイントは、vendor
にs3
を指定することと、server
にICOSのエンドポイントのアドレスを指定することです。また、バケット名を指定することもしないこともできます。
# バケット名指定なし
$ db2 catalog storage access alias icos-with-bucket vendor s3 server s3.jp-tok.cloud-object-storage.appdomain.cloud user ${アクセスキーID} password ${シークレットアクセスキー}
# バケット名指定あり
$ db2 catalog storage access alias icos-with-bucket vendor s3 server s3.jp-tok.cloud-object-storage.appdomain.cloud user ${アクセスキーID} password ${シークレットアクセスキー} container ${バケット名}
バックアップの取得
ストレージアクセスによって書き方が異なります。ストレージアクセスでバケット名を指定している場合は、db2remote://${ストレージアクセス名}//${プレフィックス}
のように//
になるところがポイントです。
# ストレージアクセスでバケット名指定なし
$ db2 backup db sample to db2remote://icos-without-bucket/${バケット名}/db2/20211011
# ストレージアクセスでバケット名指定あり
$ db2 backup db sample to db2remote://icos-with-bucket//db2/20211011
ICOS上は次のようにバックアップが保管されています。
リストア
もちろんICOSからのリストアも可能です。
# ストレージアクセスでバケット名指定なし
$ db2 restore db sample from db2remote://icos-without-bucket/${バケット名}/db2/20211011/ taken at 20211011114137
# ストレージアクセスでバケット名指定あり
$ db2 restore db sample from db2remote://icos-with-bucket//db2/20211011/ taken at 20211011114137