Microsoft では、Microsoft SQL Server 2008 R2 Service Pack 1 (SP1) または Microsoft SQL Server 2012 の修正を 1 つのダウンロード可能なファイルで配布しています。 修正は累積的であるため、各新しいリリースには、以前の SQL Server 2008 R2 Service Pack 1 (SP1) または Microsoft SQL Server 2012 更新プログラム リリースに含まれていたすべての修正プログラムおよびすべてのセキュリティ更新プログラムが含まれています。
現象
たとえば次のようなシナリオを考えてみます。
- Microsoft SQL Server 2008 R2 または Microsoft SQL Server 2012 で 1 つのデータベースに基づいてトランザクション レプリケーション文書を少なくとも 2 つ作成します。
- 各出版物には少なくとも 1 つの記事があります。 記事は重複せず、各記事は 1 つの出版物にのみ属しています。
- パブリケーションの @sync\_method プロパティーを "並行" に設定します。
- パブリケーションの @immediate\_sync プロパティーを True に設定します。
- ログ リーダー エージェントの MaxCmdsInTran パラメーターをゼロ以外の値に設定します。
- パブリケーションの 1 つは、1 つのトランザクションで多数の挿入を受け取ります。
- トランザクションがコミットされると、ログ リーダー エージェントはトランザクションの処理を開始し、MaxCmdsInTran パラメーターに従って分割します。
- ログ・リーダー・エージェントがタスクを完了する前に、別のパブリケーションのスナップショット エージェントが開始します。
このシナリオでは、ログ リーダー エージェントが失敗し、次のエラー メッセージが表示されます。
注
プロセスは 'server\instance' で 'sp_MSadd_replcmds' を実行できませんでした。
(ソース: MSSQLServer、エラー番号: 1007)
オブジェクト 'dbo' に重複するキー行を挿入できません。MSrepl_commands' と一意のインデックス 'ucMSrepl_commands' です。
(ソース: MSSQLServer、エラー番号: 1007)
解決策
累積的な更新プログラムの情報
SQL Server 2012
この問題の修正プログラムは、SQL Server 2012 の累積的な更新プログラム 1 で最初にリリースされました。 この累積的な更新プログラム パッケージの関連情報を参照するには、以下の「サポート技術情報」 (Microsoft サポート技術情報) をクリックしてください。
2679368 SQL Server 2012 の累積的な更新プログラム パッケージ 1 注: ビルドは累積的であるため、新しくリリースされた修正プログラムには、以前の SQL Server 2012 リリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 マイクロソフトでは、この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
2692828 SQL Server 2012 以降にリリースされた SQL Server 2012 ビルド インストールされている SQL Server 2012 には、SQL Server 2012 修正プログラムを適用する必要があります。
SQL Server 2008 R2 SP1 の累積的な更新プログラム パッケージ 4
この問題の修正プログラムは、累積的な更新プログラム 4 で最初にリリースされました。 SQL Server 2008 R2 SP1 用のこの累積的な更新プログラム パッケージを入手する方法の詳細については、以下のサポート技術情報番号をクリックしてください。
2633146 SQL Server 2008 R2 SP1 の累積的な更新プログラム パッケージ 4 注: ビルドは累積的であるため、新しい修正プログラムの各リリースには、以前の SQL Server 2008 R2 SP1 更新プログラムのリリースに含まれていたすべての修正プログラムおよびセキュリティ更新プログラムが含まれています。 この修正プログラムが含まれている最新リリースの修正の適用を検討することを推奨します。 詳細については、次のマイクロソフト サポート技術情報番号をクリックしてください。
2567616 2008 R2 SP1 以降にリリースされた SQL Server 2008 R2 ビルドSQL Server
回避策
この問題を回避するには、以下のいずれかの方法を使用します。
- パブリケーションの @sync\_method プロパティを "concurrent" に設定したり、パブリケーションの @immediate\_sync プロパティを "true" に設定したりしないでください。
- MaxCmdsInTran パラメーターの値を 0 に設定します。
状態
Microsoft は、これが "適用対象" セクションに記載されている Microsoft 製品の問題であることを確認しました。