次の方法で共有


MSSQL_ENG020598

適用対象: SQL ServerAzure SQL Managed Instance

メッセージの詳細

属性
製品名 SQL Server
イベント ID 20598
イベント ソース MSSQLSERVER
コンポーネント SQL Server データベース エンジン
シンボル名
メッセージ テキスト レプリケートされたコマンドを適用しているときに、サブスクライバーで行が見つかりませんでした。

説明

このエラーは、トランザクション レプリケーションで、ディストリビューション エージェントがサブスクライバーの行を更新しようとしたときに、行が削除されていたり、行の主キーが変更されている場合に発生します。 既定では、変更はパブリッシャーには反映されないため、トランザクション パブリケーションに対するサブスクライバーは読み取り専用として処理されます。 トランザクション レプリケーションでは、更新可能なサブスクリプションまたはピア ツー ピア レプリケーションが使用されている場合にのみ、ユーザーの変更をサブスクライバーで行う必要があります。 これらのオプションの詳細については、「 Updatable Subscriptions for Transactional Replication 」および「 Peer-to-Peer Transactional Replication」を参照してください。

ユーザーの操作

この問題を解決するには、次のようにします。

  1. エラーの原因を特定している間にレプリケーションを続行する必要がある場合は、ディストリビューション エージェントで -SkipErrors 20598 パラメーターを指定します。 このパラメーターを指定すると、エージェントはエラー 20598 の原因となった変更をスキップし、他の変更をレプリケートできるようになります。

  2. 削除されている行、またはパブリッシャーの対応する行とは異なる主キーを持っているサブスクライバーの行を特定します。 パブリケーションとサブスクリプション データベースとの間で異なる行を確認するには、 tablediff Utility を使用します。 レプリケートされたデータベースでこのユーティリティを使用する方法については、「 差分のレプリケートテーブルの比較 (レプリケーション プログラミング)」を参照してください。

  3. tablediff ユーティリティまたは別の方法でサブスクライバーの行を修正します。

  4. (省略可能) -SkipErrors パラメーターを削除します。

参照

エラーとイベントのリファレンス (レプリケーション)