• ベストアンサー

デッドロックが発生します。

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

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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'

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

検索してもこのくらいしかHitしませんねぇ・・   http://support.microsoft.com/kb/872809/ja SQLServerのバージョンは何で、どういうアプリなんでしょうか?デッドロックだとするとアプリでの更新順序が悪いとしか言えないので、アプリ制作者にしか原因は探れないと思います。 #DBを使うアプリ制作者はこのあたりについては知識がある・・はずです。

noname#93791
質問者

補足

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

関連するQ&A