병합 복제 속성 지정

적용 대상:SQL Server

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

병합 문서는 다운로드 전용입니다.

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

고려 사항

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

SQL Server Management Studio 사용

문서 페이지에서

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

아티클 속성의 속성 탭에서

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

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

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

    • 구독자에 다운로드, 구독자 변경 금지
    • 구독자에 다운로드, 구독자 변경 허용
  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 복제본(replica)tion은 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. 게시 데이터베이스의 게시자에서 sp_helpmergearticle 실행하여 지정합니다@publication. 대화형 해결 프로그램을 사용할 결과 집합의 각 아티클에 대한 allow_interactive_resolver 값을 확인합니다.
    • 이 값이 1면 Interactive Resolver가 사용됩니다.
    • 이 값이 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을 실행합니다. 아티클이 속한 게시의 이름, 아티클@article의 이름, 게시@source_object할 데이터베이스 개체 및 true@allow_interactive_resolver값을 지정합니다@publication. 자세한 내용은 아티클 정의를 참조 하세요.

병합 아티클에 대한 충돌 추적 및 해결 수준

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

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

제한 사항

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

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을 실행합니다. 에 대한 @property column_tracking과 다음 값 @value중 하나를 지정합니다.

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

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

추적 삭제 관리

참고 항목

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

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

Important

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

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

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

참고 항목

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

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

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

  2. 1단계의 값이 1면 게시 데이터베이스의 게시자에서 sp_changemergearticle(Transact-SQL)를 실행합니다. 에 대한 값 delete_tracking 및 false@value값을 지정@property합니다.

    참고 항목

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

처리 순서

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

처리 순서 결정 방식

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

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

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

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

새 아티클

  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)를 실행합니다. processing_order@property과 처리 순서@value를 나타내는 정수 값을 지정합니다.

참고 항목

다운로드 전용 아티클로 병합 복제 성능 최적화
아티클 정의
아티클 속성 보기 및 수정