SQL Serverでは、トランザクション外でテーブルをロックおよびロック解除する方法(排他的)?トランザクションの外部でのみテーブルをロックおよびロック解除する方法
理由:同じ時刻にトランザクション内で実行することはできませんステートメントを実行しながら、私のアプリの複数のインスタンスが
SQL Serverでは、トランザクション外でテーブルをロックおよびロック解除する方法(排他的)?トランザクションの外部でのみテーブルをロックおよびロック解除する方法
理由:同じ時刻にトランザクション内で実行することはできませんステートメントを実行しながら、私のアプリの複数のインスタンスが
1つのオプションは、sp_getapplockを検討するかもしれない、お互いのつま先を踏むことなく、1つのテーブルと対話する必要がありますおよびsp_releaseapplock。
これはテーブルをロックしませんが、任意の名前付きリソースです。次に、ストアドプロシージャなどのロックが取得された後に問題のテーブルでのみ動作するようにアプリケーションを構成できます。 @LockOwner = 'Session'
を指定すると、トランザクションの外側で、このロック機構を使用できることを意味します
EXEC sp_getapplock @Resource = 'ResourceName', @LockMode = 'Exclusive', @LockOwner = 'Session'
-- UPDATE table, etc.
EXEC sp_releaseapplock @Resource = 'ResourceName', @LockOwner = 'Session'
:
この例はようなものになるだろう。
ロックと解放のステートメントを独自のストアドプロシージャに抽出するオプションもあります。そのため、ロジックは一度しか記述されません。これらのストアドプロシージャは、呼び出しが取得/解放されたかどうかを指定する結果を持つ呼び出し側プロシージャに値を戻すことができます。
この時点では、このメカニズムがすべてのプロシージャ/テーブル/ etcに適用されていることを確認するだけの問題です。そこには競合があるかもしれません。
どのようなコンテキストで。 –
ロックは、通常、トランザクションの間のみ保持されます。おそらくあなたが望むのは、セッションレベルのアプリケーションロックです。 –
アプリケーションロックがジョブを実行する可能性があります。私は喜んでそれを解決する答えを受け入れるでしょう。 –