db2

Db2インスタンスの起動と停止に関するメモ

Db2関係のプロジェクトのメンバーでも意外に知らない人がいるので、簡単にまとめておきます(´・ω・`) もっともポピュラーな起動方法(だとわたしが勝手に思っている)のがdb2startdb2startを発行したユーザがインスタンスユーザとして管理しているインスタンスを起動します。

su - db2inst1
db2start
# あるいは
su - db2inst1 -c "db2start"

select文やinsert文と同じ階層(?)で、インスタンスを起動したい場合はstart database managerを利用します。db2 -f pathとするとpathに指定したファイルを読み込んで、SQLを実行することはDb2ユーザの中では比較的よく知られていますが、その入力としてstart database managerは使いやすかったです(実体験)。

# すべて同じ
db2 "start database manager"
db2 "start db manager"
db2 "start dbm"

最後にdb2gcfdb2gcfはインスタンスの起動・終了・監視をつかさどるコマンドで、起動の場合は-uオプションを指定します。db2startにしろstart database managerとは違いsuの必要がないので、単一のシェルスクリプトから複数のインスタンスの起動を行う場合などに有用でした(実体験)。ただし実行にはroot権限が必要になります。

# ひとつのシェルスクリプトから複数インスタンスを起動する
db2gcf -u -i db2inst1
db2gcf -u -i db2inst2
db2gcf -u -i db2inst3

"起動"があれば、当然"停止"コマンドも存在します。db2startに対応するものがdb2stopstart database managerに対応するものがstop database managerdb2gcfの場合は-dオプションを指定すると"停止"モードになります。

# すべて停止コマンド
su - db2inst1 -c "db2stop"
db2 "stop database manager"
db2gcf -d -i db2inst1

ところで上述のコマンドをたたいたとき、次のようなエラーメッセージが出力され、インスタンスが停止しないということがあります:「SQL1025N The database manager was not stopped because databases are still active.」。たいていは何らかのアプリケーションが対象のインスタンスに接続しているために起きるのですが、これを無視して強制的にインスタンス停止を行うにはどうすればよいでしょうか。

まずdb2stopの場合はdb2stop forcestop database managerの場合はstop database manager forceとそれぞれforceを付与します。次にdb2gcfですが、-kオプションを付与するとdb2stop forceに近い挙動を示すようです(´・ω・`)

すべて強制停止コマンド
su - db2inst1 -c "db2stop force"
db2 "stop database manager force"
db2gcf -k -d -i db2ins1

参考: