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