다음을 통해 공유


병합 복제 속성 지정

적용 대상: SQL Server

이 항목에서는 병합 복제의 다양한 속성을 지정하는 방법을 설명합니다.

병합 문서는 다운로드 전용

다운로드 전용 아티클은 데이터가 구독자에서 업데이트되지 않는 애플리케이션용으로 디자인되었습니다. 자세한 내용은 다운로드 전용 아티클로 병합 복제 성능 최적화를 참조하세요.

고려 사항

  • 구독이 초기화된 후 아티클이 다운로드 전용으로 지정되면 해당 아티클을 받은 모든 클라이언트 구독을 다시 초기화해야 합니다. 서버 구독을 다시 초기화할 필요가 없습니다. 속성 변경 내용의 영향에 대한 자세한 내용은 게시 및 아티클 속성 변경을 참조하세요.

SQL Server Management Studio 사용

아티클 페이지에서

새 게시 마법사의 아티클 페이지에서 테이블을 선택한 다음 강조 표시된 테이블은 다운로드 전용확인란을 선택합니다.

아티클 속성의 속성 탭에서

  1. 새 게시물 마법사의 아티클 페이지 또는 게시물 속성 - <게시물> 대화 상자에서 테이블을 선택한 다음 아티클 속성을 클릭합니다.

  2. 강조 표시된 테이블 아티클 속성 설정 또는 모든 테이블 아티클의 속성 설정을 클릭합니다.

  3. section of the tab of the 아티클 속성 - <아티클> 대화 상자의 속성 탭에 있는 대상 개체 섹션에서 동기화 방향에 대해 다음 값 중 하나를 지정합니다.

    • 구독자로 다운로드, 구독자 변경 금지
    • 구독자로 다운로드, 구독자 변경 허용
  4. 게시 속성 - <게시> 대화 상자에서 확인을 클릭하여 저장하고 대화 상자를 닫습니다.

Transact-SQL 사용

새 문서

  1. @subscriber_upload_options 매개 변수에 1 또는 2 값을 지정하여 sp_addmergearticle을 실행합니다. 숫자는 다음 동작에 해당합니다.

    • 0 - 제한 없음(기본값). 구독자의 변경 내용이 게시자에 업로드됩니다.
    • 1 - 구독자에서 변경이 허용되지만 변경 내용이 게시자에 업로드되지 않습니다.
    • 2 - 구독자에서 변경이 허용되지 않습니다.

    참고 항목

    아티클의 원본 테이블이 이미 다른 게시에 게시된 경우 두 아티클의 @subscriber_upload_options 값이 동일해야 합니다.

기존 아티클

  1. 아티클이 다운로드 전용인지 확인하려면 sp_helpmergearticle을 실행하고 결과 집합의 아티클에 대한 upload_options 값을 확인합니다.

  2. 1단계에서 반환된 값이 0이면 @propertysubscriber_upload_options 값, @force_invalidate_snapshot@force_reinit_subscription1 값, @value에 다음 동작에 해당하는 1 또는 2 값을 지정하고 sp_changemergearticle을 실행합니다.

    • 1 - 구독자에서 변경이 허용되지만 변경 내용이 게시자에 업로드되지 않습니다.

    • 2 - 구독자에서 변경이 허용되지 않습니다.

      참고 항목

      아티클의 원본 테이블이 이미 다른 게시에 게시된 경우 두 아티클의 다운로드 전용 동작이 동일해야 합니다.

대화형 충돌 해결

Microsoft SQL Server 복제는 Microsoft Windows 동기화 관리자에서 주문형 동기화 중에 수동으로 충돌을 해결할 수 있는 대화형 해결 프로그램을 제공합니다. 대화형 해결을 사용하도록 설정한 후 대화형 해결 프로그램을 사용하여 동기화 중에 충돌을 대화형으로 해결합니다. 대화형 해결 프로그램은 Microsoft Windows 동기화 관리자를 통해 사용할 수 있습니다. 자세한 내용은 Windows 동기화 관리자를 사용하여 구독 동기화(Windows 동기화 관리자)를 참조하세요.

권장 사항

  • Windows 동기화 관리자 외부에서 동기화를 수행하는 경우(SQL Server Management Studio 또는 복제 모니터에서 예약된 동기화 또는 주문형 동기화로) 아티클에 지정된 기본 충돌 해결을 사용하여 사용자 개입 없이 충돌이 자동으로 해결됩니다. 자세한 내용은 대화형 충돌 해결을 참조하세요.

SQL Server Management Studio 사용

아티클에 대화형 충돌 해결 사용

  1. 새 게시물 마법사의 문서 페이지 또는 게시물 속성 - <게시물> 대화 상자에서 테이블을 선택합니다. 마법사 사용 및 대화 상자 액세스에 대한 자세한 내용은 게시 만들기게시 속성 보기 및 수정을 참조하세요.
  2. 아티클 속성을 클릭한 다음 강조 표시된 테이블 아티클 속성 설정 또는 모든 테이블 아티클의 속성 설정을 클릭합니다.
  3. 아티클 속성 - <아티클> 또는 아티클 속성 - <ArticleType> 페이지에서 해결 프로그램 탭을 클릭합니다.
  4. 주문형 동기화 작업 중 구독자가 대화형으로 충돌 해결 허용을 선택합니다.
  5. 확인을 선택합니다.
  6. 게시 속성 - <게시> 대화 상자에서 확인을 클릭하여 저장하고 대화 상자를 닫습니다.

구독이 대화형 충돌 해결 기능을 사용하도록 지정

  1. 구독 속성 - <구독>: <SubscriptionDatabase> 대화 상자에서 대화형으로 충돌 해결 옵션의 값으로 True를 지정합니다. 이 대화 상자에 액세스하는 방법에 대한 자세한 내용은 밀어넣기 구독 속성 보기 및 수정끌어오기 구독 속성 보기 및 수정을 참조하세요.
  2. 확인을 선택합니다.

Transact-SQL 사용

병합 게시에 대한 끌어오기 구독을 만들 때 구독자가 이 그래픽 인터페이스를 사용하여 아티클 충돌을 해결하도록 프로그래밍 방식으로 지정할 수 있습니다. 이 옵션을 지원하는 아티클의 충돌만 대화형 해결 프로그램에 표시됩니다.

대화형 해결 프로그램을 사용하는 병합 끌어오기 구독 만들기

  1. 게시 데이터베이스의 게시자에서 @publication를 지정하고 sp_helpmergearticle을 실행합니다. 대화형 해결 프로그램을 사용할 결과 집합의 각 아티클에 대한 allow_interactive_resolver 값을 확인합니다.
    • 이 값이 1이면 대화형 해결 프로그램이 사용됩니다.
    • 이 값이 0이면 먼저 각 아티클에 대해 대화형 해결 프로그램을 사용하도록 설정해야 합니다. 이렇게 하려면 @publication을 지정하고 @publication을 지정하고 @articleallow_interactive_resolver 값, @propertytrue 값, @value에서 병합 아티클에 대한 상호 충돌 추적 및 해결 수준을 지정하는 방법에 대해 설명합니다.
  2. 구독 데이터베이스의 구독자에서 sp_addmergepullsubscription을 실행합니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.
  3. 구독 데이터베이스의 구독자에서 sp_addmergepullsubscription_agent을 실행하고 다음 매개 변수를 지정합니다.
    • @publisher, @publisher_db(게시된 데이터베이스) 및 @publication
    • @enabled_for_syncmgrtrue
    • @use_interactive_resolvertrue
    • 병합 에이전트에 필요한 보안 계정 정보입니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.
  4. 게시 데이터베이스의 게시자에서 sp_addmergesubscription을 실행합니다.

대화형 해결 프로그램을 지원하는 문서 정의

  1. 게시 데이터베이스의 게시자에서 sp_addmergearticle을 실행합니다. 이때 @publication에 아티클이 속한 게시의 이름, @article에 대한 아티클의 이름, @source_object에 게시되는 데이터베이스 개체를 지정하고 @allow_interactive_resolver의 값을 true로 지정합니다. 자세한 내용은 아티클 정의를 참조하세요.

병합 아티클의 충돌 추적 및 해결 수준

이 항목에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 병합 아티클의 충돌 추적 및 해결 수준을 지정하는 방법을 설명합니다.

병합 게시에 대한 구독이 동기화되면 복제는 게시자와 구독자 모두에서 동일한 데이터의 변경 내용으로 인한 충돌을 확인합니다. 충돌을 행 수준에서 검색할지(행이 변경되면 충돌로 간주) 아니면 열 수준에서 검색할지(동일 행 및 열이 변경되는 경우에만 충돌로 간주)를 지정할 수 있습니다. 아티클에 대한 충돌 해결은 행 수준에서 수행됩니다. 논리적 레코드를 사용하는 경우의 충돌 감지 및 해결에 대한 자세한 내용은 Detecting and Resolving Conflicts in Logical Records을 참조하세요.

제한 사항

  • 구독이 초기화된 후 추적 수준을 수정하는 경우 해당 구독을 다시 초기화해야 합니다. 속성 변경 내용의 영향에 대한 자세한 내용은 게시 및 아티클 속성 변경을 참조하세요.
  • 행 및 열 수준 추적을 사용하면 항상 행 수준에서 충돌 해결이 수행됩니다. 이 행은 손실된 행을 덮어씁니다. 병합 복제를 사용하면 충돌을 추적하고 논리적 레코드 수준에서 충돌이 해결되도록 지정할 수도 있지만 SQL Server Management Studio에서는 이러한 옵션을 사용할 수 없습니다. 복제 저장 프로시저에서 이러한 옵션을 설정하는 방법에 대한 자세한 내용은 병합 테이블 아티클 간의 논리적 레코드 관계 정의를 참조하세요.

SQL Server Management Studio 사용

새 게시 마법사 및 게시 속성 - <게시> 대화 상자에서 사용할 수 있는 아티클 속성 대화 상자의 속성 탭에서 병합 아티클에 대한 행 또는 열 수준 추적을 지정합니다. 마법사 사용 및 대화 상자 액세스에 대한 자세한 내용은 게시 만들기게시 속성 보기 및 수정을 참조하세요.

행 또는 열 수준 추적 지정

  1. 새 게시물 마법사의 문서 페이지 또는 게시물 속성 - <게시물> 대화 상자에서 테이블을 선택합니다.
  2. 아티클 속성을 클릭한 다음 강조 표시된 테이블 아티클 속성 설정 또는 모든 테이블 아티클의 속성 설정을 클릭합니다.
  3. 아티클 속성 <아티클> 대화 상자의 속성 탭에서 추적 레벨 속성에 대해 행 수준 추적 또는 열 수준 추적 값 중 하나를 선택합니다.
  4. 게시 속성 - <게시> 대화 상자에서 확인을 클릭하여 저장하고 대화 상자를 닫습니다.

Transact-SQL 사용

새 병합 아티클에 대한 충돌 추적 옵션을 지정하려면

  1. 게시 데이터베이스의 게시자에서 sp_addmergearticle 을 실행하고 @column_tracking에 대해 다음 값 중 하나를 지정합니다.

    • true - 아티클에 열 수준 추적을 사용합니다.
    • false - 기본값인 행 수준 추적을 사용합니다.

병합 아티클의 충돌 추적 옵션 변경

  1. 병합 아티클의 충돌 추적 옵션을 확인하려면 sp_helpmergearticle을 실행합니다. 아티클의 결과 집합에 있는 column_tracking 옵션의 값을 확인합니다. 값이 1이면 열 수준 추적이 사용되고, 값이 0이면 행 수준 추적이 사용되고 있음을 의미합니다.

  2. 게시 데이터베이스의 게시자에서 sp_changemergearticle을 실행합니다. @propertycolumn_tracking 값을 지정하고 @value에 다음 값 중 하나를 지정합니다.

    • true - 아티클에 열 수준 추적을 사용합니다.
    • false - 기본값인 행 수준 추적을 사용합니다.

    @force_invalidate_snapshot@force_reinit_subscription에 값 1을 지정합니다.

추적 삭제 관리

참고 항목

SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요.

기본적으로 병합 복제는 게시자와 구독자 간에 DELETE 명령을 동기화합니다. 병합 복제에서는 행을 게시에서 삭제한 경우에도 구독 데이터베이스에는 그대로 유지할 수 있으며 반대의 경우도 마찬가지입니다. 새 문서를 만들 때 DELETE 명령을 무시하도록 프로그래밍 방식으로 지정하거나 나중에 복제 저장 프로시저를 사용하여 이 기능을 사용하도록 설정할 수 있습니다.

Important

이 기능을 사용하도록 설정하면 불일치가 발생하므로 구독자에 있는 데이터가 게시자의 데이터를 정확하게 반영하지 않습니다. 이 경우 삭제된 행을 수동으로 제거하기 위한 메커니즘을 직접 구현해야 합니다.

새 병합 아티클에 대해 삭제를 무시하도록 지정

게시 데이터베이스의 게시자에서 sp_addmergearticle(Transact-SQL)을 실행합니다. @delete_tracking에 값 false를 지정합니다. 자세한 내용은 아티클 정의를 참조하세요.

참고 항목

아티클의 원본 테이블이 이미 다른 게시에 게시된 경우 두 아티클의 delete_tracking 값이 동일해야 합니다.

기존 병합 아티클에 대해 삭제를 무시하도록 지정

  1. 아티클에 대해 오류 보정이 설정되어 있는지 확인하려면 sp_helpmergearticle(Transact-SQL)을 실행하고 결과 집합에서 delete_tracking의 값을 확인합니다. 이 값이 0이면 삭제가 이미 무시되고 있습니다.

  2. 1단계의 값이 1이면 게시 데이터베이스의 게시자에서 sp_changemergearticle(Transact-SQL)을 실행합니다. 이때 @propertydelete_tracking 값, @valuefalse 값을 지정합니다.

    참고 항목

    아티클의 원본 테이블이 이미 다른 게시에 게시된 경우 두 아티클의 delete_tracking 값이 동일해야 합니다.

처리 순서

병합 복제를 사용하면 동기화 프로세스 중에 병합 에이전트 아티클이 처리되는 순서를 지정할 수 있습니다. 복제 저장 프로시저를 사용하여 아티클을 만들 때 프로그래밍 방식으로 각 아티클에 주문을 할당할 수 있습니다. 아티클은 가장 낮은 값에서 가장 높은 값의 순서대로 처리됩니다. 두 아티클의 값이 같으면 동시에 처리됩니다.

처리 순서 결정 방식

병합 동기화 중에 아티클은 기본적으로 기본 테이블에 정의된 DRI(선언적 참조 무결성) 제약 조건을 포함하여 개체 간의 종속성에 필요한 순서대로 처리됩니다. 아티클 처리 시 테이블에 변경 내용을 열거한 다음 이들 변경 내용을 적용합니다. DRI가 없지만 조인 필터 또는 논리적 레코드가 테이블 아티클 사이에 존재할 경우 아티클은 필터 및 논리적 레코드에 필요한 순서대로 처리됩니다. DRI, 조인 필터, 논리적 레코드 또는 기타 종속 관계를 통해 다른 아티클과 관련되어 있지 않은 아티클은 sysmergearticles(Transact-SQL) 시스템 테이블에서의 아티클 별명에 따라 처리됩니다.

SalesOrderHeader 테이블의 기본 키 열 SalesOrderIDSalesOrderDetail 테이블의 해당 외래 키 열 SalesOrderID가 있는 SalesOrderHeaderSalesOrderDetail 테이블을 포함하는 게시를 고려합니다. 동기화 중에 병합 복제는 SalesOrderDetail에 연결된 행을 삽입하기 전에 SalesOrderHeader에 새 행을 삽입하여 외래 키 위반을 방지합니다. 마찬가지로 SalesOrderHeader에서 연결된 행을 삭제하기 전에 SalesOrderDetail에서 행이 삭제됩니다.

그러나 일부 애플리케이션에서는 DRI가 아닌 애플리케이션 수준에서나 데이터베이스 트리거를 통해 참조 무결성이 적용됩니다. 위에서 설명한 게시를 고려할 때 DRI 대신 SalesOrderDetail 테이블에는 삽입을 허용하기 전에 SalesOrderHeader 테이블의 연결된 행이 있는지 확인하는 삽입 트리거가 있을 수 있습니다. SalesOrderHeader에는 삭제를 허용하기 전에 SalesOrderDetail에 연결된 행이 없게 하는 삭제 트리거가 있을 수 있습니다. 병합 복제는 트리거가 발생될 때까지 트리거의 결과를 확인할 수 없으므로 아티클의 처리 순서를 결정할 때 트리거를 고려하지 않습니다. 마찬가지로 복제는 애플리케이션 수준에서 정의된 제약 조건을 고려할 수 없습니다.

참조 무결성이 트리거를 통해서 또는 애플리케이션 수준에서 유지 관리되는 경우 아티클이 처리되는 순서를 지정해야 합니다. 트리거가 있는 예제에서 아티클 순서는 삽입 순서에 따라 지정되므로 SalesOrderDetail 전에 SalesOrderHeader테이블이 처리되도록 지정합니다. 병합 복제는 삭제 순서가 자동으로 반대로 바뀝니다. 병합 에이전트는 제약 조건 위반이 발생해도 아티클을 계속 처리하고 다른 아티클이 처리된 후 실패한 작업을 모두 다시 시도하므로 병합 복제는 아티클 순서를 지정하지 않아도 실패하지 않습니다. 아티클 순서를 지정하면 재시도 및 관련 추가 처리가 방지됩니다. 잘못된 순서(예: 헤더 레코드 전에 세부 레코드가 처리되는 순서)를 지정하면 병합 복제가 성공할 때까지 처리를 다시 시도합니다.

새 문서

  1. 게시 데이터베이스의 게시자에서 sp_addmergearticle(Transact-SQL)을 실행합니다. 아티클 @processing_order의 처리 순서를 나타내는 정수 값을 지정합니다. 자세한 내용은 아티클 정의를 참조하세요.

    참고 항목

    정렬된 아티클을 만들 때 아티클 순서 값 사이에 간격을 두어야 합니다. 이렇게 하면 나중에 새 값을 더 쉽게 설정할 수 있습니다. 예를 들어 3개 아티클의 고정 처리 순서를 지정해야 하는 경우 @processing_order 값을 각각 1, 2, 3이 아닌 10, 20, 30으로 설정합니다.

기존 아티클

  1. 아티클의 처리 순서를 확인하려면 sp_helpmergearticle(Transact-SQL)을 실행하고 결과 집합에서 processing_order 값을 기록해 둡니다.
  2. 게시 데이터베이스의 게시자에서 sp_changemergearticle(Transact-SQL)을 실행합니다. @propertyprocessing_order 값과 @value의 처리 순서를 나타내는 정수 값을 지정합니다.