マージ パブリケーションの競合情報を表示する方法 (レプリケーション Transact-SQL プログラミング)

マージ レプリケーションの競合を解決すると、優先されなかった行のデータが競合テーブルに書き込まれます。この競合データは、レプリケーション ストアド プロシージャを使用してプログラムから表示できます。詳細については、「マージ レプリケーションの競合検出および解決の詳細」を参照してください。

すべての種類の競合に関する競合情報と優先されなかった行のデータを表示するには

  1. パブリッシャ側のパブリケーション データベースに対して、sp_helpmergepublication を実行します。結果セットで、次の列の値を確認します。

    • centralized_conflicts - 1 は競合する行がパブリッシャに格納されていることを示し、0 は競合する行がパブリッシャに格納されていないことを示します。

    • decentralized_conflicts - 1 は競合する行がサブスクライバに格納されていることを示し、0 は競合する行がサブスクライバに格納されていないことを示します。

      注意

      マージ パブリケーションの競合ログの動作は、sp_addmergepublication@conflict_logging パラメータを使用して設定します。@centralized_conflicts パラメータの使用は推奨されません。

    次の表で、@conflict_logging に対して指定された値に基づくこれらの列の値を説明します。

    @conflict_logging の値

    centralized_conflicts

    decentralized_conflicts

    publisher

    1

    0

    subscriber

    0

    1

    both

    1

    1

  2. パブリッシャ側のパブリケーション データベースまたはサブスクライバ側のサブスクリプション データベースに対して、sp_helpmergearticleconflicts を実行します。特定のパブリケーションに属するアーティクルの競合情報のみが返されるようにするには、@publication に値を指定します。これにより、競合を持つアーティクルに対応する競合テーブル情報が返されます。目的のアーティクルに対応する conflict_table の値を確認します。アーティクルに対応する conflict_table の値が NULL の場合、そのアーティクル内では削除競合のみが発生しています。

  3. (省略可) 目的のアーティクルで競合する行を確認します。手順 1. の centralized_conflicts および decentralized_conflicts の値に応じて、次のいずれかの操作を実行します。

    • パブリッシャ側のパブリケーション データベースに対して、sp_helpmergeconflictrows を実行します。手順 1. で確認したアーティクルの競合テーブルを @conflict_table に指定します。(省略可) 特定のパブリケーションの競合情報が返されるように制限するには、@publication に値を指定します。これにより、優先されなかった行の行データとその他の情報が返されます。

    • サブスクライバ側のサブスクリプション データベースに対して、sp_helpmergeconflictrows を実行します。手順 1. で確認したアーティクルの競合テーブルを @conflict_table に指定します。これにより、優先されなかった行の行データとその他の情報が返されます。

削除の失敗による競合に関する情報のみを表示するには

  1. パブリッシャ側のパブリケーション データベースに対して、sp_helpmergepublication を実行します。結果セットで、次の列の値を確認します。

    • centralized_conflicts - 1 は競合する行がパブリッシャに格納されていることを示し、0 は競合する行がパブリッシャに格納されていないことを示します。

    • decentralized_conflicts - 1 は競合する行がサブスクライバに格納されていることを示し、0 は競合する行がサブスクライバに格納されていないことを示します。

      注意

      マージ パブリケーションの競合ログの動作は、sp_addmergepublication@conflict_logging パラメータを使用して設定します。@centralized_conflicts パラメータの使用は推奨されません。

  2. パブリッシャ側のパブリケーション データベースまたはサブスクライバ側のサブスクリプション データベースに対して、sp_helpmergearticleconflicts を実行します。特定のパブリケーションに属するアーティクルの競合テーブル情報のみが返されるようにするには、@publication に値を指定します。これにより、競合を持つアーティクルに対応する競合テーブル情報が返されます。目的のアーティクルに対応する source_object の値を確認します。アーティクルに対応する conflict_table の値が NULL の場合、そのアーティクル内では削除競合のみが発生しています。

  3. (省略可) 削除競合の競合情報を確認します。手順 1. の centralized_conflicts および decentralized_conflicts の値に応じて、次のいずれかの操作を実行します。

    • パブリッシャ側のパブリケーション データベースに対して、sp_helpmergedeleteconflictrows を実行します。手順 1. で確認した、競合が発生しているソース テーブルの名前を @source_object に指定します。(省略可) 特定のパブリケーションの競合情報が返されるように制限するには、@publication に値を指定します。これにより、パブリッシャに格納されている削除競合の情報が返されます。

    • サブスクライバ側のサブスクリプション データベースに対して、sp_helpmergedeleteconflictrows を実行します。手順 1. で確認した、競合が発生しているソース テーブルの名前を @source_object に指定します。(省略可) 特定のパブリケーションの競合情報が返されるように制限するには、@publication に値を指定します。これにより、サブスクライバに格納されている削除競合の情報が返されます。