メッセージの詳細
| 製品名 | SQL Server |
| イベント ID | 2627 |
| イベント元 | MSSQLSERVER |
| コンポーネント | SQL Server データベース エンジン |
| シンボル名 | なし |
| メッセージ テキスト | %ls 制約 '%.*ls' の違反。 オブジェクト '%.*ls' に重複するキーを挿入できません。 |
説明
これは、データベースがレプリケートされているかどうかに関係なく発生する可能性がある一般的なエラーです。 レプリケートされたデータベースでは、プライマリ キーがトポロジ全体で適切に管理されていないため、通常、このエラーが発生します。 分散環境では、同じ値が複数のノードの主キー列またはその他の一意の列に挿入されないようにすることが不可欠です。 以下のような原因が考えられます。
行の挿入と更新は、複数のノードで行われます。 マージ レプリケーションとトランザクション レプリケーションの更新可能なサブスクリプションの両方で競合の検出と解決が提供されますが、特定の行を 1 つのノードにのみ挿入または更新することをお勧めします。 ピア ツー ピア トランザクションでは、競合の検出と解決は提供されません。挿入と更新をパーティション分割する必要があります。
読み取り専用のサブスクライバーに行が挿入されました。 更新可能なサブスクリプションまたはピアツーピア トランザクション レプリケーションを使用しない限り、トランザクション パブリケーションのサブスクライバーは読み取り専用として扱う必要があります。
ID 列を持つテーブルが使用されていますが、列が適切に管理されていません。
ユーザー操作
必要なアクションは、エラーが発生した理由によって異なります。
行の挿入と更新は、複数のノードで行われます。
使用されるレプリケーションの種類に関係なく、可能な限り挿入と更新をパーティション分割することをお勧めします。これにより、競合の検出と解決に必要な処理が減るためです。 ピアツーピア トランザクション レプリケーションの場合、パーティション分割の挿入と更新が必要です。 詳細については、「 ピア ツー ピア トランザクション レプリケーション」を参照してください。
読み取り専用であるべきサブスクライバーに行が挿入されました。
マージ レプリケーション、更新可能なサブスクリプションを使用したトランザクション レプリケーション、またはピア ツー ピア トランザクション レプリケーションを使用している場合を除き、サブスクライバーで行を挿入または更新しないでください。
ID 列を持つテーブルが使用されていますが、列が適切に管理されていません。
更新可能なサブスクリプションを使用したマージ レプリケーションとトランザクション レプリケーションの場合、ID 列はレプリケーションによって自動的に管理される必要があります。 ピアツーピア トランザクション レプリケーションの場合は、手動で管理する必要があります。 詳細については、「 ID 列のレプリケート」を参照してください。
こちらもご覧ください
エラーとイベントのリファレンス (レプリケーション)
マージ レプリケーション
ピア ツー ピア トランザクション レプリケーション
トランザクション レプリケーションの更新可能なサブスクリプション