【DB2】connect reset と terminateの違い

※アフィリエイト広告を利用しています
※アフィリエイト広告を利用しています

コマンドライン(CLP)でデータベースから切断するときってこの2つあるけど、いまいち違いをちゃんと理解していなかったのです。
初心に戻って改めて調べてみました。

調べてみた

IBM Documentationではなんと?

terminateコマンドのIBM Documentaionでは以下の様な記載でした。

TERMINATE と CONNECT RESET は両方ともデータベースへの接続を中断しますが、TERMINATE のみがバックエンド・プロセスを終了します。

https://www.ibm.com/docs/ja/db2/11.5.0?topic=commands-terminate より抜粋

正直どんな動作するかいまいち理解できなかったですが、
・connect reset はデータベースとの接続断のみ
・terminate はプロセスも終了させる
ってことは理解しました。

バックエンドプロセスとはなんぞ?

db2bpのことのようです。
じゃあこいつはなにもの?となったので調べてみました。

コマンド行プロセッサー は、ユーザー・インターフェースとして機能するフロントエンド・プロセス ( Db2 コマンド) と、データベース接続を維持するバックエンド・プロセス (db2bp) の 2 つのプロセスで構成されます。

https://www.ibm.com/docs/ja/db2/11.1.0?topic=clp-command-line-processor-features より抜粋

対話モード(プロンプトが「db2 =>」ってなってるモード)などの、DB2のコマンド行を起動したり、データベースに接続したりするときに動くプロセッサーのようでした。

試してみた

じゃあ実際にどんな感じなの?ってことで検証しました。

検証の流れ

■db2CLP
・db2コマンドで対話モードに移行
・connect to <DB名> でデータベースへ接続
・psコマンドでdb2bpプロセスを確認
・terminate または connect reset で切断
・確認①:対話モードの状態確認
・確認②:psコマンドでdb2bpプロセスを確認

■コマンドライン
・db2 connect to <DB名> でデータベースへ接続
・psコマンドでdb2bpプロセスを確認
・db2 terminate または db2 connect reset で切断
・確認②:psコマンドでdb2bpプロセスを確認

結果まとめ

表にまとめてますが、connect resetは対話モードでもdb2コマンドでもdb2bpプロセスは起動したままでした。

db2CLPコマンドライン
connect reset①対話モード:継続
②db2bpプロセス:起動
②db2bpプロセス:起動
terminate①対話モード:終了
②db2bpプロセス:停止
②db2bpプロセス:停止

DB2を停止させる前にデータベースを切断する場合はterminate の方がよいようです。
connect reset した後に再度接続したところ、初回は1秒程度にかかたのに対し、0.05秒程度でした。作業で接続・切断を繰り返すようなことがあるときはconnect resetの方がよいようです。

【蛇足】気になったから確認したくなったこと

(蛇足1)terminateもconnect rest どちらも実行せずに終わったら?

データベースに接続したままターミナルからログアウト(db2CLPならquit)した場合、データベースとの接続はどうなるのだろう、と試してみました。


案の定ですが、切断されdb2bpプロセスも停止しました。

(蛇足2)db2bpプロセスのタイムアウト

connect resetだけだとdb2bpプロセスが残ることがわかったのですが、これって放置したらタイムアウトするの?って気になりました。
この辺りのタイムアウト値を調べたのですが見つからずでした。

検証したところ、15分以上放置してもプロセスは残ったままでした。
db2CLPも放っておいても切断されないため、ログアウトやterminate、quitしないとプロセスは残り続けるようです。

(蛇足3)バックグランドで処理を実行したまま切断したらどうなるの?

バックエンドプロセスと聞いてはじめに思いついたのがバックグラウンド処理かな?でした。
↓のような感じでバックグラウドでsleepプロシージャをバックグランドで実行し、処理中に切断してみました。


この結果、処理が終わるまでデータベースから切断はされませんでした。
このため、ここで言うバックエンドプロセスはバックグランドでの処理とは別のものだと理解できました。

(蛇足4)su <インスタンス名> -c “db2 connect to <DB>”の時ってどうなるの?

インスタンスじゃなくてもいいのですが、suコマンドの -c でデータベースに接続し、その後selectなど実行したら受け付けるのかな?と思ったので検証しました。
過去にAIXだとうまくいったのでRHELだったらどうだろうと、と試したのですが失敗に終わりました。


まとめ

  • terminate は バックエンドプロセス(db2bp)まで終了させるため、DB2停止前などに有効
  • connect reset はバックエンドプロセス(db2bp)は残すので、引き続きデータベースに接続して作業する場合に有効
  • バックエンドプロセス はコマンド行プロセッサーの処理で利用するプロセスで、バックグラウンド実行とは別物

コメント

タイトルとURLをコピーしました