目的
暗号化済DBを別の新規サーバーへ移行・バージョンアップする手順を確認すること。
環境
単一サーバー上で、Db2バージョンをアップグレードする
1台め:
- Ubuntu 22.04 on WSL2
- Db2 11.5.9
- 暗号化データベース
- マスターキーはDB作成時にDb2が自動生成したものを利用
2台め:
- Ubuntu 22.04 on WSL2
- Db2 12.1.1
- 暗号化データベース
- マスターキーはDB作成時にDb2が自動生成したものを利用
手順
マニュアルに沿って実施
Db2 V12.1マニュアル「暗号化されたバックアップ・イメージをローカル鍵マネージャーで別のシステムへリストアする操作」
Step1. 必要なファイルの転送
暗号化されたデータベース・バックアップを別システムにリストアするには、リストア先のシステム上のローカル鍵ストアファイルに、マスター鍵を追加しておく必要があります。
以下のファイルを、リストア先のシステムへ転送します。
(1) 鍵ストア・ファイル
(2) stashファイル
(3) バックアップ・イメージ(暗号化)
Step2. DBマネージャー構成パラメータ KEYSTORE_LOCATION の構成
Step1.で転送してきた(1),(2)のファイルの置き場所を指定します。
$ db2 get dbm cfg | grep -i key
SSL サーバー keydb ファイル (SSL_SVR_KEYDB) =
SSL クライアント keydb ファイル (SSL_CLNT_KEYDB) =
鍵ストア・タイプ (KEYSTORE_TYPE) = NONE
鍵ストアのロケーション (KEYSTORE_LOCATION) =
$
変更コマンド
$ db2 update dbm cfg using KEYSTORE_TYPE PKCS12
DB20000I UPDATE DATABASE MANAGER CONFIGURATION
コマンドが正常に完了しました。
$ db2 update dbm cfg using KEYSTORE_LOCATION /home/uk1210/uktmp/ne-keystore.p12
DB20000I UPDATE DATABASE MANAGER CONFIGURATION
コマンドが正常に完了しました。
SQL1362W 即時変更のためにサブミットされた 1
つ以上のパラメーターが動的に変更されませんでした。
クライアントの変更は、次回のアプリケーション始動時、
または TERMINATE
コマンドが発行されるまで有効になりません。 次の DB2START
コマンドまで、サーバーの変更は有効になりません。
[uk1210@ISEI20241029-1945-fun-1 uktmp]$ db2 get dbm cfg | grep -i key SSL サーバー keydb ファイル (SSL_SVR_KEYDB) =
SSL クライアント keydb ファイル (SSL_CLNT_KEYDB) =
鍵ストア・タイプ (KEYSTORE_TYPE) = PKCS12
鍵ストアのロケーション (KEYSTORE_LOCATION) = /home/uk1210/uktmp/ne-keystore.p12
[uk1210@ISEI20241029-1945-fun-1 uktmp]$
Step3. データベースのリストア
[uk1210@ISEI20241029-1945-fun-1 uktmp]$ ls -ltr
合計 126660
drwxr-xr-x. 5 uk1210 db2iadm1 48 10月 18 14:23 adv_vpc
-rwxrwxrwx. 1 uk1210 db2iadm1 27163 11月 27 15:53 12.1reg.txt
-rwxrwxrwx. 1 uk1210 db2iadm1 8141 11月 27 15:53 12.1dbm.txt
-rwxrwxrwx. 1 uk1210 db2iadm1 14007 11月 27 15:54 12.1db.txt
drwx------. 2 uk1210 db2iadm1 81 2月 18 19:09 adminmove
-rw-r--r--. 1 kutsumi kutsumi 193 3月 25 19:10 ne-keystore.sth
-rw-r--r--. 1 kutsumi kutsumi 3512 3月 25 19:35 ne-keystore.p12
-rw-r--r--. 1 kutsumi kutsumi 129638400 3月 25 20:04 ENCDB.0.v1159mig.DBPART000.20250325200422.001
[uk1210@ISEI20241029-1945-fun-1 uktmp]$
[uk1210@ISEI20241029-1945-fun-1 uktmp]$ db2 list db directory
システム・データベース・ディレクトリー
ディレクトリー中の項目数 = 3
データベース 1 項目:
データベース別名 = TESTDB
データベース名 = TESTDB
ローカル・データベース・ディレクトリー = /data/uk1210/testdb/dbpath
データベース・リリース・レベル = 16.00
コメント =
ディレクトリー項目タイプ = 間接
カタログ・データベース・パーティション番号 = 0
代替サーバー・ホスト名 =
代替サーバーのポート番号 =
データベース 2 項目:
データベース別名 = SESSION
データベース名 = SESSION
ローカル・データベース・ディレクトリー = /home/uk1210
データベース・リリース・レベル = 16.00
コメント =
ディレクトリー項目タイプ = 間接
カタログ・データベース・パーティション番号 = 0
代替サーバー・ホスト名 =
代替サーバーのポート番号 =
データベース 3 項目:
データベース別名 = NOCONAD
データベース名 = NOCONAD
ローカル・データベース・ディレクトリー = /home/uk1210
データベース・リリース・レベル = 16.00
コメント =
ディレクトリー項目タイプ = 間接
カタログ・データベース・パーティション番号 = 0
代替サーバー・ホスト名 =
代替サーバーのポート番号 =
[uk1210@ISEI20241029-1945-fun-1 uktmp]$
リストア実行。
今回は元DBとは異なるパスにリストアするため、on句とdbpath句を指定。
[uk1210@ISEI20241029-1945-fun-1 uktmp]$ db2 restore database ENCDB on /home/uk1210 dbpath on /home/uk1210 encrypt
SQL2555I データベースがリストアされた後、RESTORE DATABASE
コマンドの発行元である現行の DB2
リリースに正常にアップグレードされました。
[uk1210@ISEI20241029-1945-fun-1 uktmp]$
list db directoryコマンドでデータベース・リリース・レベルを確認すると、16.00(Db2 v12.1)と出力されている。
(旧バージョンDBをRESTORE DATABASEコマンドでV12.1にリストアすると、V12データベースとしてリストア・構成されるため、upgrade db コマンドの実行は不要)
$ db2 list db directory
システム・データベース・ディレクトリー
ディレクトリー中の項目数 = 4
(中略)
データベース 2 項目:
データベース別名 = ENCDB
データベース名 = ENCDB
ローカル・データベース・ディレクトリー = /home/uk1210
データベース・リリース・レベル = 16.00
コメント =
ディレクトリー項目タイプ = 間接
カタログ・データベース・パーティション番号 = 0
代替サーバー・ホスト名 =
代替サーバーのポート番号 =
Step4.(オプション) Db2 V12.1インスタンスオーナーへの権限付与
バックアップ取得元とリストア先のDb2インスタンスユーザーが違う場合では、
旧インスタンスユーザーから、新インスタンスユーザーに対して権限を付与する手順が追加で必要となります。
理由は、V12.1インスタンスオーナーに必要な権限の付与のためには、V11.5.9インスタンスオーナーの権限が必要であるため。
Db2では内部にユーザーを持たずOSユーザーとパスワードを用いてDb2に接続可能。
Step4-1.OSユーザー追加
V11.5.9インスタンスオーナーと同一名称のOSユーザーを作成する。
# useradd -g db2iadm1 v1159mig
# passwd v1159mig
(パスワードは任意に設定。現行環境と統一する必要はない)
Step4-2.旧インスタンスオーナーのOSユーザで暗号化データベースに接続し、新インスタンスオーナーに対し、必要な権限を付与
$ db2 connect to encdb user v1159mig using v1159mig
$ db2 grant dbadm with dataaccess with accessctl on database to user uk1210
$ db2 grant secadm on database to user uk1210
$ db2 terminate
Step5. リストアしたデータベースへの接続・操作
暗号化データベースに接続できました。
$ db2 connect to encdb
データベース接続情報
データベース・サーバー = DB2/LINUXX8664 12.1.0.0
SQL 許可 ID = UK1210
ローカル・データベース別名 = ENCDB