- - PR -
スレッド内でのDB処理のロックについて
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-09-06 02:09
こんにちわ。
スレッド内でDB処理を行うプログラムを作っているのですが、 レコードのロックについて気になる点が有り、質問させて頂きます。 複数のスレッドが更新を行うレコードに対して、 更新前に「SELECT 〜 FOR UPDATE」を使ってロックをかけるようにしているのですが、 このSQLを発行する時点でデッドロックが発生してしまうことはあるのでしょうか? SQLを発行する部分をsynchronizedで同期を取るようにするべきか悩んでいます。 // 現在はsynchronizedを使わずに動かしています。 JavaよりもDBよりな質問となってしまっていますが、よろしくお願いします。 環境 j2sdk1.5.0_12 oracle10g ojdbc14.jar | ||||
|
投稿日時: 2007-09-06 09:50
ないです。 Oracleはデッドロックの発生を検知する機能を持っています。デッドロックするようなSQL文を発行すると、Oracleでエラーが発生します。結果的にRollbackすることになるはずです。 | ||||
|
投稿日時: 2007-09-06 11:22
Javaの同期とDBでの同期は別世界の出来事ですからね。
まっとうなDBならACID属性を満たしているでしょうから DBでの同期を正しく行えばJava側で同期する必要は無いはずです。 | ||||
|
投稿日時: 2007-09-06 21:33
synchronizedで同期処理をしても、DBというのはJVM以外の
接続も受け付けるわけでして、本質的な解決になりません。 nagiseさんも書いてますけど、名の通ったDBでトランザクション 処理がまともに使えるものだったら、この辺は信じてまか せてみるのが筋かと。 | ||||
|
投稿日時: 2007-09-06 23:30
返信ありがとうございます!
DBに任せてこのままでいこうと思います。 ありがとうございました! |
1