====== ロック待ちの状態の解消方法 ======
[[ibm:db2|一つ上へ]]
他のアプリが止まっても構わない場合、全てのクライアント接続を切断する。
$ db2 "force applications all"
ロックを掴んでいるクライアント接続のみ切断する場合は、
まずロック状況を調査する。
$ db2pd -db -locks
以下の項目について確認する。
- 項目
- 内容
- TranHId
- トランザクションID
- Mode
- ロックモード。X:排他、U:更新、S:共有
- Sts。ステータス(G:保有している、W:待機している)。ステータスが「G」となっているトランザクションIDを記録しておく。
次に、ロックしているアプリケーションを調べる
$ db2pd -db -transactions
ロックを保持しているトランザクションIDに対するアプリケーションID「AppHandl」の項目を調べ、記録する。
アプリケーションからの接続を強制的に切断する
$ db2 "force applications (AppHandl No.)
さらに、そのアプリケーションが発行しているSQLを調べるには、-applicationsオプションと-dnyオプションをつける。
$ db2pd -db -applications -dny
AppHandlとL-AnchIDを比較し、Dynamic SQL StatementsのAnchIDを確認することで、どのアプリケーションIDがどのSQL文を発行しているか確認できる。