DB2のFP適用後、エラーもなくJDBC接続も問題なかったのにアプリでエラーが発生した。
かつインスタンス上に複数DBがあったがエラーが発生したりしなかったりとDB間でも挙動が変わったためその時の対応を整理。
- 目次 -
FP適用後対応
1.全てのDBに対して
インスタンス上の各DBに対してconnect後bindを実行する。
installfixpackで実行されるものだが、なぜか実行されないことがある。
全て既に実行済みでも問題がないのでおまじないとして実施した方が無難。
# 実行コマンド
$ db2 CONNECT TO dbname user USERID using PASSWORD
$ db2 BIND <DB2 installPath>/bnd/db2schema.bnd BLOCKING ALL GRANT PUBLIC SQLERROR CONTINUE
$ db2 BIND <DB2 installPath>/bnd/@db2ubind.lst BLOCKING ALL GRANT PUBLIC ACTION ADD
$ db2 BIND <DB2 installPath>/bnd/@db2cli.lst BLOCKING ALL GRANT PUBLIC ACTION ADD
$ db2 terminate
#コマンド例
$ db2 CONNECT TO sample_db
$ db2 BIND /opt/ibm/db2/V11.5/bnd/db2schema.bnd BLOCKING ALL GRANT PUBLIC SQLERROR CONTINUE
$ db2 BIND /opt/ibm/db2/V11.5/bnd/@db2ubind.lst BLOCKING ALL GRANT PUBLIC ACTION ADD
$ db2 BIND /opt/ibm/db2/V11.5/bnd/@db2cli.lst BLOCKING ALL GRANT PUBLIC ACTION ADD
$ db2 terminate
※1つ目(db2schema.bnd)と3つ目(@db2cli.lst)は実行済みの環境で再実行しても正常終了するが、2つめ(@db2ubind.lst)は「<パッケージ名>はすでに存在します。」とエラーになるが無視して大丈夫。
続けておまじないでrbindも。これも一部パッケージが無効になることがあるため。
実施済み環境で再度実行しても問題ないためやっぱりおまじないとして。
#実行コマンド
$ db2rbind dbname -l logfile all
#コマンド例
$ db2rbind sample_db -l /work/smpldb_rbnd.log all
2.環境に合わせて実施
・空間対応のデータベースがある場合
位置情報などを扱う空間情報に対応するDBがある場合、@db2gse.lstをbindする。
$ db2 CONNECT TO dbname user USERID using PASSWORD
$ db2 BIND <DB2 installPath>/bnd/@db2gse.lst
$ db2 terminate
・ホストDB、VM、VSE、System i上で動作するDBの場合
環境毎に必要なパッケージをbindする。環境毎にbindするパッケージは以下の通り。
(bind <パッケージ名> の後ろのオプションは全て同じ)
環境 | パッケージ |
---|---|
ホストDB | @ddcsmvs.lst |
VM | @ddcsvm.lst |
VSE | @ddcsvse.lst |
System i | @ddcs400.lst |
# コマンド例(VM上の場合)
$ db2 CONNECT TO sample_db
$ db2 BIND <DB2 installPath>/bnd/@ddcsvm.lst BLOCKING ALL SQLERROR CONTINUE GRANT PUBLIC ACTION ADD
$ db2 terminate
・連合DB(フェデレーテッド・データベース)環境の場合
連合DBを利用している場合、下記を追加でbindし直す。
$ db2 CONNECT TO dbname user USERID using PASSWORD
$ db2 bind <DB2 installPath>/bnd/db2dsproc.bnd blocking all grant public
$ db2 bind <DB2 installPath>/bnd/db2stats.bnd blocking all grant public
$ db2 terminate
3.DB2の再起動
再起動しなくても問題ないはずなんだが、おまじないのおまじないでやっとくといいみたい。
$ db2stop
$ db2start
システムカタログの更新(任意)
概要・注意事項
・概要
DB毎にシステムカタログ情報を更新させます。
これを行うことで、新しい関数や関数などが有効になります。
※ 更新しなくてもこれまで通りの関数は利用可能です。
・注意事項
ただしこれを実行すると、FPを前バージョンに戻した場合DBが利用できなくなります。
FP適用→システムカタログ更新→FPの前バージョン戻しを実施した場合、
DBを復旧するには前バージョンで取得したバックアップからリストアが必要になります。
実行コマンド
# 実行コマンド
$ db2updv<ver> -d <DB名>
# 実行例(V11.5でsample_dbに実行)
$ db2updv115 -d sample_db
コメント