병합 복제에 대한 충돌 해결

적용 대상:SQL Server

병합 복제본(replica) 충돌은 각 아티클에 대해 지정된 확인자를 기반으로 해결됩니다. 기본적으로 충돌은 사용자가 개입할 필요 없이 해결됩니다. 그러나 충돌을 볼 수 있으며 Microsoft 복제 충돌 뷰어에서 해결 결과를 변경할 수 있습니다.

충돌 데이터는 충돌 보존 기간(기본값: 14일)에 지정된 시간 동안 복제 충돌 뷰어에서 사용할 수 있습니다. 충돌 보존 기간을 설정하려면 다음 중 하나를 수행합니다.

기본적으로 충돌 정보는 저장됩니다.

  • 게시자 및 구독자에서 게시 호환성 수준이 90RTM 이상인 경우
  • 게시 호환성 수준이 80RTM보다 낮은 경우 게시자에서
  • 구독자가 SQL Server Compact를 실행하는 경우 게시자에서 충돌 데이터는 SQL Server Compact 구독자에 저장할 수 없습니다.

충돌 정보의 스토리지는 conflict_logging 게시 속성에 의해 제어됩니다. 자세한 내용은 sp_addmergepublication(Transact-SQL)sp_changemergepublication(Transact-SQL)를 참조하세요.

Microsoft Interactive Resolver를 사용하여 동기화하는 동안 충돌을 대화형으로 해결할 수도 있습니다. 대화형 확인자는 Microsoft Windows 동기화 관리자를 통해 사용할 수 있습니다. 자세한 내용은 Windows 동기화 관리자를 사용하여 구독 동기화(Windows 동기화 관리자)를 참조하세요.

충돌 해결

  1. Microsoft SQL Server Management Studio에서 게시자(또는 해당하는 경우 구독자)에 커넥트 서버 노드를 확장합니다.

  2. 복제 폴더를 확장한 다음 로컬 게시 폴더를 확장합니다.

  3. 충돌을 확인할 게시를 마우스 오른쪽 단추로 클릭한 다음 충돌 보기를 클릭합니다.

    참고 항목

    conflict_logging 속성에 'subscriber' 값을 지정한 경우에는 충돌 보기 메뉴 옵션을 사용할 수 없습니다. 충돌을 보려면 명령 프롬프트에서 ConflictViewer.exe 시작합니다. 기본적으로 ConflictViewer.exe Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE 디렉터리에 있습니다. 유효한 시작 매개 변수 목록을 보려면 ConflictViewer.exe -?. 실행합니다.

  4. 충돌 테이블 선택 대화 상자에서 충돌을 볼 데이터베이스, 게시 및 테이블을 선택합니다.

  5. 복제 충돌 뷰어에서 다음을 수행할 수 있습니다.

    • 위쪽 눈금의 오른쪽에 있는 단추를 사용하여 행을 필터링합니다.

    • 위쪽 눈금에서 행을 선택하여 해당 행의 정보를 아래쪽 표에 표시합니다.

    • 상단 표에서 하나 이상의 행을 선택한 다음 제거를 클릭합니다. 이것은 적용되는 내용 전송 단추를 클릭하는 것과 같으며 데이터는 변경되지 않습니다.

    • 속성 단추(...)를 클릭하여 충돌과 관련된 열에 대한 자세한 정보를 확인합니다.

    • 데이터를 전송하기 전에 충돌 시 적용되는 내용 또는 충돌 시 변경 내용 무시 열의 데이터를 편집합니다. 열이 회색인 경우 데이터는 읽기 전용입니다.

    • 우승자 제출을 클릭하여 충돌의 승자로 지정된 행을 수락합니다.

    • 제출 패자를 클릭하여 해결 방법을 재정의하고 충돌의 패자로 지정된 값을 토폴로지의 모든 노드에 전파합니다.

    • 이 충돌의 세부 정보를 기록하여 충돌 데이터를 파일에 기록합니다. 파일의 위치를 지정하려면 보기 메뉴를 가리킨 다음 [옵션]을 클릭합니다. 값을 입력하거나 찾아보기 단추(...)를 클릭한 다음 적절한 파일로 이동합니다. 확인 을 클릭하여 옵션 대화 상자를 종료합니다.

  6. 복제 충돌 뷰어를 닫습니다.

충돌 정보 보기

병합 복제본(replica)에서 충돌이 해결되면 손실된 행의 데이터가 충돌 테이블에 기록됩니다. 이 충돌 데이터는 복제본(replica)tion 저장 프로시저를 사용하여 프로그래밍 방식으로 볼 수 있습니다. 자세한 내용은 고급 병합 복제 충돌 검색 및 해결을 참조 하세요.

  1. 게시 데이터베이스의 게시자에서 sp_helpmergepublication 실행합니다. 결과 집합에서 다음 열의 값을 확인합니다.

    • centralized_conflicts - 1은 충돌 행이 게시자에 저장되고 0은 충돌 행이 게시자에 저장되지 않음을 나타냅니다.

    • decentralized_conflicts - 1은 충돌 행이 구독자에 저장되고 0은 충돌 행이 구독자에 저장되지 않음을 나타냅니다.

      참고 항목

      병합 게시의 충돌 로깅 방식은 @conflict_logging@conflict_logging을(를) 참조하세요. 매개 변수 사용 @centralized_conflicts 이 더 이상 사용되지 않습니다.

    다음 표에서는 지정된 값을 기반으로 이러한 열의 값을 설명합니다 @conflict_logging.

    @conflict_logging 값 centralized_conflicts decentralized_conflicts
    publisher 1 0
    subscriber 0 1
    both 1 1
  2. 게시 데이터베이스의 게시자 또는 구독 데이터베이스의 구독자에서 sp_helpmergearticleconflicts 실행합니다. 특정 게시에 속하는 아티클의 @publication 충돌 정보만 반환할 값을 지정합니다. 충돌이 있는 아티클에 대한 충돌 테이블 정보를 반환합니다. 관심 있는 문서에 대한 conflict_table 값을 확인합니다. 아티클에 대한 conflict_table 값이 NULL이면 이 문서에서 삭제 충돌만 발생했습니다.

  3. 필요에 따라 특정 아티클의 충돌 행을 검토합니다. 1단계에서 확인한 centralized_conflictsdecentralized_conflicts 값에 따라 다음 중 한 가지를 수행합니다.

    • 게시 데이터베이스의 게시자에서 sp_helpmergeconflictrows 실행합니다. @conflict_table에 아티클에 대한 충돌 테이블(1단계에서 확인)을 지정합니다. (선택 사항) 반환된 충돌 정보를 특정 게시로 제한할 값을 @publication 지정합니다. 이렇게 하면 무시되는 행에 대한 행 데이터 및 기타 정보가 반환됩니다.

    • 구독 데이터베이스의 구독자에서 sp_helpmergeconflictrows 실행합니다. @conflict_table에 아티클에 대한 충돌 테이블(1단계에서 확인)을 지정합니다. 이렇게 하면 무시되는 행에 대한 행 데이터 및 기타 정보가 반환됩니다.

삭제가 실패한 충돌

  1. 게시 데이터베이스의 게시자에서 sp_helpmergepublication 실행합니다. 결과 집합에서 다음 열의 값을 확인합니다.

    • centralized_conflicts - 1은 충돌 행이 게시자에 저장되고 0은 충돌 행이 게시자에 저장되지 않음을 나타냅니다.

    • decentralized_conflicts - 1은 충돌 행이 구독자에 저장되고 0은 충돌 행이 구독자에 저장되지 않음을 나타냅니다.

      참고 항목

      병합 게시의 충돌 로깅 동작은 sp_addmergepublication 매개 변수@conflict_logging 사용하여 설정됩니다. 매개 변수 사용 @centralized_conflicts 이 더 이상 사용되지 않습니다.

  2. 게시 데이터베이스의 게시자 또는 구독 데이터베이스의 구독자에서 sp_helpmergearticleconflicts 실행합니다. 특정 게시에 속한 아티클에 대한 충돌 테이블 정보만 반환하려면 @publication에 값을 지정합니다. 충돌이 있는 아티클에 대한 충돌 테이블 정보를 반환합니다. 정보를 보려는 아티클의 source_object 값을 확인합니다. 아티클에 대한 conflict_table 값이 NULL이면 이 문서에서 삭제 충돌만 발생했습니다.

  3. (선택 사항) 삭제 충돌에 대한 충돌 정보를 검토합니다. 1단계에서 확인한 centralized_conflictsdecentralized_conflicts 값에 따라 다음 중 한 가지를 수행합니다.

    • 게시 데이터베이스의 게시자에서 sp_helpmergedeleteconflictrows 실행합니다. 충돌이 발생한 원본 테이블의 이름(1단계부터)을 지정합니다 @source_object. (선택 사항) 반환된 충돌 정보를 특정 게시로 제한할 값을 @publication 지정합니다. 게시자에 저장된 삭제 충돌 정보를 반환합니다.

    • 구독 데이터베이스의 구독자에서 sp_helpmergedeleteconflictrows 실행합니다. 충돌이 발생한 원본 테이블의 이름(1단계부터)을 지정합니다 @source_object. (선택 사항) 반환된 충돌 정보를 특정 게시로 제한할 값을 @publication 지정합니다. 구독자에 저장된 삭제 충돌 정보를 반환합니다.

참고 항목

고급 병합 복제 충돌 검색 및 해결
병합 아티클 해결 프로그램 지정