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

sqlserverについて、アプリを実行すると「40001(1205)」というエラーが発生します。デッドロックが発生しているようです。原因が分かりません。どのような場合に発生するのでしょうか。?

A 回答 (2件)

SQL Serverや、IBMのDB2などでは「ロック方式」というものが採用されておりまして、これは対象リソースに対してロックを取得し、同時実行に関する問題がないことを確認してから、実際のデータを読み書きしていく方式です。



よってただSELECTを発行しても、場合によってはトランザクション終了時までLOCKが発生します。

これを回避するにはSELECT文に WITH (NOLOCK)オプションを指定すると解決いたしますが、処理中に変更や削除が行われるテーブルに対してはオススメ致しません(RASISが損なわれる可能性があります)

サンプル
SELECT
DATA_A, DATA_B, DATA_C
FROM
TEST_TABLE WITH (NOLOCK)
WHERE
DATA_A = 'aaaa'
    • good
    • 0

検索してもこのくらいしかHitしませんねぇ・・



  http://support.microsoft.com/kb/872809/ja

SQLServerのバージョンは何で、どういうアプリなんでしょうか?デッドロックだとするとアプリでの更新順序が悪いとしか言えないので、アプリ制作者にしか原因は探れないと思います。

#DBを使うアプリ制作者はこのあたりについては知識がある・・はずです。

この回答への補足

SQlServerのバージョンは2005です。
アプリは、javaをベースとした独自フレームワークです。

ご参考までに。

補足日時:2008/03/04 14:51
    • good
    • 0

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

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