アプリ版:「スタンプのみでお礼する」機能のリリースについて

複数のクライアントから同一テーブルの同一レコードに対してselect for update nowaitで行ロックをした場合に先にロックした方が行をロックし後のロックはロック中のエラーにりますが、このとき、誰(マシン名etc)がどの位時間ロックしたままかわかる方法はないものでしょうか。

A 回答 (2件)

こんにちわ。



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;
    • good
    • 0

たぶん無いと思います。



行ロックはレコードにフラグを立てるだけで実現できますが、経過時間は履歴として残すことになるためです。

1万件のレコード同時にロック時間の管理をするとなるとこの情報だけでかなりの容量を消費することになります。
またレスポンスも遅くなるでしょうし・・・?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す