MSSQL_ENG002627
適用対象: SQL Server Azure SQL Managed Instance
メッセージの詳細
属性 | 値 |
---|---|
製品名 | SQL Server |
イベント ID | 2627 |
イベント ソース | MSSQLSERVER |
コンポーネント | SQL Server データベース エンジン |
シンボル名 | 該当なし |
メッセージ テキスト | 制約 '%.*ls' の %ls 違反。 オブジェクト '%.ls' には重複したキーを挿入できません。 |
説明
このエラーは、データベースがレプリケートされたかどうかにかかわらず発生する一般エラーです。 レプリケートされたデータベースでは、このエラーは、一般に主キーがトポロジ間で適切に管理されなかった場合に発生します。 分散環境では、主キー列などの一意の列に複数のノードで同じ値が挿入されないようにすることが不可欠です。 以下のような原因が考えられます。
行の挿入と更新が複数のノードで行われた。 マージ レプリケーションとトランザクション レプリケーションの更新可能なサブスクリプションには、どちらも競合を検出して解決する機能がありますが、それでも行を 1 つのノード上だけで挿入または更新することが推奨されます。 ピア ツー ピアのトランザクション レプリケーションでは、競合を検出し解決する機能はありません。挿入と更新をパーティション分割する必要があります。
読み取り専用のサブスクライバーで行が挿入された。 更新可能なサブスクリプションまたはピア ツー ピアのトランザクション レプリケーションを使用していない場合、スナップショット パブリケーションのサブスクライバーは、トランザクション パブリケーションのサブスクライバーと同様に、読み取り専用として扱われる必要があります。
ID 列を持つテーブルが使用されているが、列が正しく管理されていない。
ユーザーの操作
必要なアクションは、エラーが発生した原因によって異なります。
行の挿入と更新が複数のノードで行われた。
使用するレプリケーションの種類にかかわらず、できる限り挿入と更新をパーティション分割することをお勧めします。これにより、競合の検出と対処に必要な処理を減らすことができます。 ピア ツー ピアのトランザクション レプリケーションの場合は、挿入と更新のパーティション分割は必須です。 詳細については、「ピア ツー ピア トランザクション レプリケーション」を参照してください。
読み取り専用のサブスクライバーで行が挿入された。
マージ レプリケーション、更新可能なサブスクリプションを使用したトランザクション レプリケーション、またはピア ツー ピアのトランザクション レプリケーションを使用していない場合は、サブスクライバーで行を挿入または更新しないでください。
ID 列を持つテーブルが使用されているが、列が正しく管理されていない。
マージ レプリケーションおよび更新可能なサブスクリプションを使用したトランザクション レプリケーションの場合は、ID 列はレプリケーションで自動的に管理してください。 ピア ツー ピアのトランザクション レプリケーションの場合は、手動で管理する必要があります。 詳細については、「Replicate Identity Columns」 (ID 列のレプリケート) を参照してください。