Applies ToSQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Express SQL Server 2008 R2 Datacenter SQL Server 2008 R2 Developer SQL Server 2008 R2 Enterprise SQL Server 2008 R2 Express SQL Server 2008 R2 Parallel Data Warehouse SQL Server 2008 R2 Standard SQL Server 2008 R2 Web SQL Server 2008 R2 Workgroup SQL Server 2008 Standard SQL Server 2008 Web SQL Server 2008 Workgroup SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Enterprise Core SQL Server 2012 Express SQL Server 2012 Standard SQL Server 2012 Web SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise Core - duplicate (do not use) SQL Server 2014 Express - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Web - duplicate (do not use)

現象

SQL Server 2008 および以降のバージョンの SQL Server でのマージ レプリケーションの同期中に、マージ エージェントが失敗することがあります。さらに、次のエラー メッセージが表示されます。

マージ エージェントは、保持ベースのメタデータのクリーンアップによって、まだパブリッシャに送信されていない変更のメタデータがサブスクライバーで削除されたことを検出した後に失敗しました。サブスクリプションを再初期化する必要があります (アップロードは行う必要があります)。(出典:MSSQL_REPL、エラー番号:MSSQL_REPL-2147199401)ヘルプを表示する: http://help/MSSQL_REPL-2147199401

この問題は、複数の理由で発生する可能性があります。これには、特定の状況下で予想される多くの理由が含まれます。このエラーが予期せず発生したかどうかを確認するには、「原因」に記載されているメタデータの詳細を調べます。

原因

この問題の原因は、サブスクライバの次のシステム テーブルにあります。

  • dbo.sysMergeSubscriptions

  • dbo.MsMerge_Genhistory

マージ エージェントが同期されていないことを確認します。次に、次のクエリを実行し、結果を確認します。

pubid = サブイドおよび送信元が null でないサブスクライバー DB.dbo.sysMerge サブスクリプションから送信済みファイルを選択します。 Query results sentgen 列は、サブスクライバーがパブリッシャーに送信した最も古い変更グループを示します。複数の値が返された場合は、dbo.sysMergeSubscriptions テーブルの他の列を調べて、正しいパブリケーションのメタデータを表示していることを確認します。次に、このクエリが返す値を次のクエリで使用します。

生成 >= sentgen_value世代別に並べ替えるサブスクライバ DB.dbo.MSmerge_genhistoryから上位 20 *を選択しますクエリの出力は次のようになります。 Query result by generation

  • 最初の行の生成列の値は、前のクエリのsentgen値よりも若干大きくなります。

  • genstatus列の値は4です。

  • 変更カウント列の値は0です。

メモ通常、最初の行のcoldate列の値は、他の行のその列の値よりもはるかに古くなります。

解決方法

この問題を解決するには、エラーを生成したサブスクライバを再初期化します。一部のシナリオでは、完全な再初期化を行わなくてもこの問題を解決できる場合があります。考えられる回避策については、マイクロソフト カスタマー サポート サービスにお問い合わせください。今後この問題が発生しないようにするには、SQL Server のバージョンに応じて、次のいずれかの修正プログラムを適用します。

累積的な更新プログラムの情報

SQL Server 2008

SQL Server 2008 では、この問題に対する修正プログラムはありません。

SQL Server 2008 R2 サービス パック 2

この問題の修正プログラムは、累積的な更新プログラム 3 で最初にリリースされました。SQL Server 2008 R2 Service Pack 2 のこの累積的な更新プログラム パッケージを入手する方法の詳細については、次のサポート技術情報番号をクリックしてください。

2754552 SQL Server 2008 R2 サービス パック 2 の累積的な更新プログラム パッケージ 3メモビルドは累積的であるため、各新しい修正プログラム リリースには、すべての修正プログラムと、以前の SQL Server 2008 R2 Service Pack 2 修正プログラム リリースに含まれていたすべてのセキュリティ修正プログラムが含まれています。この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。詳細については、次のサポート技術情報番号をクリックしてください。

2730301 SQL Server 2008 R2 サービス パック 2 がリリースされた後にリリースされた SQL Server 2008 R2 ビルド

SQL Server 2012

この問題の修正プログラムは、累積的な更新プログラム 4 で最初にリリースされました。SQL Server 2012 のこの累積的な更新プログラム パッケージを取得する方法の詳細については、マイクロソフト サポート技術情報の記事を表示するのには次の資料番号をクリックします。

2758687 SQL Server 2012 の累積的な更新プログラム パッケージ 4メモビルドは累積的であるため、各新しい修正プログラム リリースには、すべての修正プログラムと、以前の SQL Server 2012 修正プログラム リリースに含まれていたすべてのセキュリティ修正プログラムが含まれています。この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。詳細については、次のサポート技術情報番号をクリックしてください。

2692828 SQL Server 2012 がリリースされた後にリリースされた SQL Server 2012 ビルド

SQL Server 2008 R2 サービス パック 1

この問題の修正プログラムは、累積的な更新プログラム 8 で最初にリリースされました。SQL Server 2008 R2 Service Pack 1 のこの累積的な更新プログラム パッケージを入手する方法の詳細については、次のサポート技術情報番号をクリックしてください。

2723743 SQL Server 2008 R2 SP1 用の累積的な更新プログラム パッケージ 8メモビルドは累積的であるため、各新しい修正プログラム リリースには、すべての修正プログラムと、以前の SQL Server 2008 R2 Service Pack 1 修正プログラム リリースに含まれていたすべてのセキュリティ修正プログラムが含まれています。この修正プログラムを含む最新の修正プログラム リリースを適用することを検討することをお勧めします。詳細については、次のサポート技術情報番号をクリックしてください。

2567616 SQL Server 2008 R2 SP1 がリリースされた後にリリースされた SQL Server 2008 R2 ビルド

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。