- 締切済み
ORACLE9i 行ロック情報を取得する方法
複数のクライアントから同一テーブルの同一レコードに対してselect for update nowaitで行ロックをした場合に先にロックした方が行をロックし後のロックはロック中のエラーにりますが、このとき、誰(マシン名etc)がどの位時間ロックしたままかわかる方法はないものでしょうか。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 v$lock である程度分かると思います。 確かめた訳ではありませんが、こんなSQL でどうでしょう? select s.username, s.sid, s.serial#, l.type "LOCK TYPE", l.id1, l.id2, decode(l.lmode,0,'NONE', 1,'NULL', 2,' RS', 3,' RX', 4,' S', 5,' SRX', 6,' X', ' ?') LOCK_MODE, decode(l.request,0,' NONE', 1,' NULL', 2,' RS', 3,' RX', 4,' S', 5,' SRX', 6,' X', ' ?') REQUESTED, to_char(l.ctime/60,'999990.9') Min from v$lock l,v$session s where l.sid = s.sid;
- PAPA0427
- ベストアンサー率22% (559/2488)
たぶん無いと思います。 行ロックはレコードにフラグを立てるだけで実現できますが、経過時間は履歴として残すことになるためです。 1万件のレコード同時にロック時間の管理をするとなるとこの情報だけでかなりの容量を消費することになります。 またレスポンスも遅くなるでしょうし・・・?