Date: Tue, 20 May 2003 08:16:53 +0900
From: "前田 肇" <who@example.co.jp>
前田です。
ご教授ありがとうございます。
タイムアウトをゼロにするのかあ。
なるほど。
さっそくやってみます。
> 堀川です、こんにちは
>
> お返事が遅れました
>
> SET LOCK_TIMEOUT を使って、ロックタイムアウトを
> ゼロにして下さい。
>
> タイムアウトゼロですから、ロック待ちが必要のときは
> すぐにエラー番号1222で、エラーが発生します。
>
> アプリケーションはVBで作成しているようなので、ON ERROR GOTO
> で、エラートラップします。
>
> ロック タイムアウトのカスタマイズ
> http://www.microsoft.com/japan/developer/library/acdata/ac_8_con_7a_5n78
> .htm
>
> 上記をご覧頂ければわかりますが、sp_who以外の、より一般的な
> 簡単な方法を使ってロック中かどうか調べる方法はありません。
>
> 結局のところ、タイムアウトをゼロにして、エラーが発生したかどうか
> 調べるのが、一番簡単な方法です。
>
> 但し、Transact-SQL言語レベル内で、ロック中かどうか調べようとすると
> エラー1222の発生が、RAISERROR命令によって発生するため、この
> エラーメッセージを抑止することができないので、ちょっと面倒です。
>
> この場合は、ロックヒントのREADPASTを使う事ができます。
> エラーメッセージはでませんが、今度は、ロックが必要であったか
> どうか判断することはできません。
> この辺が、SQLServerの苦手とするところですね
>
> まあこの場合は、ロック管理用テーブルを自分で作成して、そのテーブル
> の必ず存在するレコードを行ロックしてみて(主キーで検索。ロックタイム
> アウト=0でREADPASTロックヒント)、レコードが取得できたら、本来の
> テーブルをロックする。
> レコードが取得できなかったら、先行者がロックしていると判断し、何も
> 処理せず、あきらめる。
> こんな感じで、設計します(デッドロックは自己責任で対処する)
>
> 但し、ロック管理用テーブルで、ロックのエスカレーションが起きるほど
> 多くの同時行ロックは避けたほうがいいですけど。。。。
[MSDE/SQLServerに関して、今、どんなことにお困りですか?] |
よろしければお困りの内容を、電子メールで教えて下さい。 |
質問を電子メールで作成する
|
[ウィンドを閉じる][MSDE/SQLServer FAQ ][MSDE / MSDE2000 技術サポート情報一覧]
|