MSSQL_ENG002601

적용 대상:SQL ServerAzure SQL Managed Instance

메시지 세부 정보

attribute
제품 이름 SQL Server
이벤트 ID 2601
이벤트 원본 MSSQLSERVER
구성 요소 SQL Server 데이터베이스 엔진
심볼 이름 해당 없음
메시지 텍스트 고유한 인덱스 '%.*ls'을(를) 사용하여 개체 '%.*ls'에 중복 키 행을 삽입할 수 없습니다.

설명

데이터베이스 복제 여부에 관계없이 발생할 수 있는 일반적인 오류입니다. 복제된 데이터베이스에서는 기본 키가 토폴로지 전체에서 적절하게 관리되지 않았기 때문에 일반적으로 오류가 발생합니다. 분산 환경에서는 동일한 값이 둘 이상의 노드에 있는 기본 키 열 또는 다른 고유 열에 삽입되지 않도록 해야 합니다. 가능한 원인은 다음과 같습니다.

  • 행에 대한 삽입 및 업데이트가 둘 이상의 노드에서 발생합니다. 트랜잭션 복제에 대한 병합 복제 및 업데이트 가능한 구독은 모두 충돌 검색 및 해결을 제공하지만, 한 노드에서만 지정된 행을 삽입하거나 업데이트하는 것이 좋습니다. 피어 투 피어 트랜잭션은 충돌 감지 및 해결 기능을 제공하지 않으므로 삽입과 업데이트를 분할해야 합니다.

  • 읽기 전용이어야 하는 구독자에 행이 삽입되었습니다. 업데이트할 수 있는 구독 또는 피어 투 피어 트랜잭션 복제를 사용하는 경우가 아니면 트랜잭션 게시에 대한 구독자와 마찬가지로 스냅샷 게시에 대한 구독자는 읽기 전용으로 취급되어야 합니다.

  • ID 열이 있는 테이블이 사용 중이지만 열이 적절하게 관리되지 않습니다.

  • 병합 복제에서 이 오류는 시스템 테이블인 MSmerge_contents에 삽입하는 동안에도 발생할 수 있습니다. 발생하는 오류는 "고유 인덱스가 'ucl1SycContents'인 개체 'MSmerge_contents'에 중복 키 행을 삽입할 수 없습니다"와 비슷합니다.

사용자 작업

필요한 작업은 오류가 발생한 이유에 따라 달라집니다.

  • 행에 대한 삽입 및 업데이트가 둘 이상의 노드에서 발생합니다.

    사용되는 복제 유형에 관계없이 가능한 경우 삽입 및 업데이트를 분할하는 것이 좋습니다. 이렇게 하면 충돌 감지 및 해결에 필요한 처리가 줄어들기 때문입니다. 피어 투 피어 트랜잭션 복제의 경우 분할 삽입 및 업데이트가 필요합니다. 자세한 내용은 피어 투 피어 트랜잭션 복제를 참조 하세요.

  • 읽기 전용이어야 하는 구독자에 행이 삽입되었습니다.

    병합 복제, 업데이트할 수 있는 구독이 있는 트랜잭션 복제 또는 피어 투 피어 트랜잭션 복제를 사용하는 경우가 아니면 구독자에서 행을 삽입 또는 업데이트하지 마십시오.

  • ID 열이 있는 테이블이 사용 중이지만 열이 적절하게 관리되지 않습니다.

    변경 가능한 구독을 사용한 병합 복제 및 트랜잭션 복제의 경우 복제를 통해 ID 열을 자동으로 관리해야 합니다. 피어 투 피어 트랜잭션 복제의 경우 ID 열을 수동으로 관리해야 합니다. 자세한 내용은 ID 열 복제를 참조하세요.

  • 시스템 테이블 MSmerge_contents 삽입하는 동안 오류가 발생합니다.

    이 오류는 조인 필터 속성 join_unique_key 잘못된 값 때문에 발생할 수 있습니다. 부모 테이블의 조인된 열이 고유한 경우에만 이 속성을 TRUE로 설정해야 합니다. 속성이 TRUE로 설정되어 있지만 열이 고유하지 않은 경우에는 이 오류가 발생합니다. 이 속성을 설정하는 방법에 대한 자세한 내용은 병합 아티클 간의 조인 필터 정의 및 수정을 참조하세요.

참고 항목

오류 및 이벤트 참조(복제)