Db2 HADR on GCP – Part 11 Db2 クライアント・リルート

1,514 views

TAKEOVER

ここまでで、1行だけですが、新規でデータが入った状態になりました。
プライマリーへの接続を保ったまま、スタンバイ側で TAKEOVER コマンドを実行します、ポイントはプライマリーへは接続したままであることです。

$ db2 "TAKEOVER HADR ON DATABASE HADRDB"

正常に完了したら、再度 SQL を実行してみます。

$ db2 "SELECT * FROM TEST_TAB1"
SQL30108N  自動クライアント・リルート環境において接続が
失敗しました。トランザクションはロールバックされました
。 ホスト名または IP アドレス:
"10.146.0.8"。サービス名またはポート番号:
"50000"。理由コード: "1"。 接続失敗コード:
"2"。基になっているエラー: "*"。  SQLSTATE=08506

SQL30108N のエラーが帰りました、こりずにもう1度SQLを実行してみます。

$ db2 "SELECT * FROM TEST_TAB1"

COL1
----------
TEST

  1 レコードが選択されました。

今度は正常に結果が返りました。
ちょっとわかり難いんですが、マニュアルには以下のようにあります。

接続が成功すると、通信障害の後にデータベース接続が再確立されたことを示す SQL30108N が戻されます。ホスト名または IP アドレスと、サービス名またはポート番号が戻されます。

https://www.ibm.com/support/knowledgecenter/ja/SSEPGG_11.5.0/com.ibm.db2.luw.admin.ha.doc/doc/c0011976.html

つまり、SQL30108N は通信障害が発生したけど再接続に成功したよっていうメッセージなので、アプリケーションで受け取った場合はエラーで exit するのではなくて、SQL を再発行できる状態って事なんですよね。では、接続先が切り替わっているか確認してみます。旧プライマリー、スタンバイで以下のコマンドを実行ます。

$ db2 "LIST APPLICATIONS"

プライマリーでは
SQL1611W データベース・システム・モニターからデータが戻されませんでした。
が出力され、旧スタンバイ(現プライマリー)ではアプリケーション接続状態が出力されます。
HADR で TAKEOVER 発生後、クライアント・リルート機能で接続先も自動で切り替わっている事が確認できました。今度は旧プライマリーで ”TAKEOVER” 実施し、元の状態に戻しておきます。

$ db2 "TAKEOVER HADR ON DATABASE HADRDB"

テスト用に作成したテーブルを削除しておきます。

$ db2 “CONNECT TO HADRDB_R USER db2inst1 USING <パスワード>”
$ db2 “DROP TABLE TEST_TAB1”

“TERMINATE” で切断、”FORCE APPLICATION ALL” でアプリケーション切断後に、プライマリー スタンバイ の順番で ”DEACTIVATE DB <データベース名> でデータベースの非活動化を実施し、”db2stop force” で Db2 を停止しておきます。

$ db2 "TERMINATE"
$ db2 "FORCE APPLICATON ALL"
$ db2 "DEACTIVATE DB HADRDB"
$ db2stop force

はい、ここまでで Db2 の HADR 構成とクライアント・リルート機能を使用した動作が確認できました。Db2 は自動でTKO実行はできませんので、実際にシステム構築時にはTSA、LifeKeeper,、Pacemaker といったクラスター製品と組みあわせ、冗長化構成を実現します。

さて、HADR シリーズで Part 11 まできましたが、いったんシリーズ終了としたいと思います。
それでは、ありがとうございました!!

関連記事

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA