現象
Microsoft SQL Server 2012 または Microsoft SQL Server 2014 でマージレプリケーションを使用することを前提とします。 同期プロセスの一部として、merge agent はセッションでの新しい生成を行います。 デッドロックやタイムアウトなど、何らかの理由で、トランザクションがデッドロックの対象として選択されていて、トランザクションがロールバックされている場合、今後の世代の makings に MSinternal_makegeneration_inprog アプリケーションロックが発生する可能性があるため、前に説明したセッションが head ブロックとして表示されることがあります。
原因
ジェネレーション処理をセキュリティで保護するために使用されるアプリケーションロックは、セッションレベルのアプリケーションロックです。 生成処理中にデッドロックが検出されると、トランザクションのみがロールバックされますが、セッションはログオフされません。 セッションレベルのアプリケーションロックを解放するには、セッションをログオフする必要があります。 そのため、再試行ロジックの設計 (マージレプリケーションでの生成中にエラーが発生したときにセッションはログオフされません) が発生したため、最初のジェネレーションがデッドロックで失敗した場合、トランザクションのロールバック中に、取得したセッションロック (MSinternal_makegeneration_inprog) は解放されません。 これにより、まもなく発生する生成処理でロック要求のチェーンがブロックされます。 Head ブロックは、デッドロックで失敗する最初のジェネレーションの作成要求として表示されます。 修正前に、SQL Server は、生成処理が成功した場合に限りロックをクリアします。 デッドロックが発生した場合、セッションがログオフされる前に、孤立したセッションアプリケーションロックを残します。
解決方法
この問題は、次の SQL Server の累積的な更新プログラムで最初に修正されました。
SQL Server 2014 の累積更新プログラム5 /en-us/help/3011055
SQL Server 2012 SP2 の累積更新プログラム3 /en-us/help/3002049
SQL Server 用の新しい累積更新プログラムには、以前の累積的な更新プログラムに含まれていたすべての修正プログラムとすべてのセキュリティ修正が含まれています。 SQL Server の最新の累積的な更新プログラムを確認します。
状態
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。