- ベストアンサー
排他について
UPDATEやINSERT処理をロックをかけて防ぐことはできるんですが、select文も同じように防ぐことってできないんでしょうか? for updateでロックをしていますが、読み取りはいけるのでselectは発行されちゃいます。 何か良い方法があればよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
DB2であれば(たしかSQLサーバも)質問の分離レベル動作が可能なのですが、 OracleではSELECTをブロックすることはできません。 更新中であってもUNDO情報を使って読み取りが実行されます。 参考URL載せときました。 ご質問の方法は、アプリケーション側で実装するしかありませんね。 たとえばロック管理テーブルを準備し、そこに誰か更新中ロック情報を登録中であればSELECTを取りやめる、などです。 SELECTする場合もSELECT FOR UPDATE取得しちゃうかですね。 後者の場合はロックが頻発して動作が遅くなったり、デッドロックの元とならないか、よくよく考えて設計する必要があります。