0
SQL Serverテーブルをメッセージキューとして使用しようとしています。 1つのプロセスがテーブルにバルク挿入を実行します。 2つ目は、テーブルをクエリし、処理された後に行を削除します。SQLServer 2つのプロセス間のロックの問題を防ぐ
私の質問は、挿入と選択/削除トランザクションが行レベルのロックを生成する場合、どのようにして2つのプロセス間のロックの問題を避けることができますか?
SQL Serverテーブルをメッセージキューとして使用しようとしています。 1つのプロセスがテーブルにバルク挿入を実行します。 2つ目は、テーブルをクエリし、処理された後に行を削除します。SQLServer 2つのプロセス間のロックの問題を防ぐ
私の質問は、挿入と選択/削除トランザクションが行レベルのロックを生成する場合、どのようにして2つのプロセス間のロックの問題を避けることができますか?
sp_getapplockとsp_releaseapplockを調べます。両方のプロセスは、同じ指定された@Resourceでロックを取得しようとします。
Basicの例:
DECLARE @LockResult int = NULL
;
BEGIN TRAN MyTransaction
-- Obtain Lock
EXEC @LockResult = sp_getapplock
@Resource = 'MyResource',
@LockMode = 'Exclusive',
@LockTimeout = 10000
;
IF @LockResult IN (0, 1)
BEGIN
-- Your process
EXEC sp_releaseapplock @Resource = 'MyResource'
COMMIT TRAN MyTransaction
END
ELSE
-- Handle failure to obtain lock
;