다음을 통해 공유


병합 복제 속성 지정

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

다운로드 전용

이 섹션에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server 2014에서 병합 테이블 아티클을 다운로드 전용으로 지정하는 방법을 설명합니다. 다운로드 전용 문서는 구독자에서 업데이트되지 않은 데이터가 있는 애플리케이션용으로 설계되었습니다. 자세한 내용은 다운로드 전용 아티클로 병합 복제 성능 최적화를 참조하세요.

한계 및 제한사항

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

SQL Server Management Studio 사용

아티클이 새 게시 마법사의 아티클 페이지 또는 아티클 속성 - <아티클> 대화 상자의 속성 탭에서 다운로드 전용으로 설정하세요. 이 대화 상자는 새 게시 마법사 및 게시 속성 - <게시> 대화 상자에서 사용할 수 있습니다. 마법사 사용 및 대화 상자 액세스에 대한 자세한 내용은 게시 만들기게시 속성 보기 및 수정을 참조하세요.

아티클이 문서 페이지에서 다운로드 전용임을 지정하려면

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

아티클 속성 - <아티클 대화 상자의 속성 탭에서 아티클> 이 다운로드 전용임을 지정하려면

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

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

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

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

Transact-SQL 사용

새 병합 테이블 아티클이 다운로드 전용임을 지정하려면

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

    • 0 - 제한 없음(기본값). 구독자에서 변경한 내용이 게시자에 업로드됩니다.

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

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

      비고

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

기존 병합 테이블 아티클을 다운로드 전용으로 수정하려면

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

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

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

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

      비고

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

대화형 충돌 해결

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

권장 사항

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

SQL Server Management Studio 사용

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

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

구독에서 대화형 충돌 해결을 사용하도록 지정하려면

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

Transact-SQL 사용

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

대화형 해결자를 사용하는 병합 풀 구독 생성하기

  1. 게시 데이터베이스의 게시자에서 sp_helpmergearticle 실행하고 @publication 지정합니다. 대화형 해결 프로그램을 사용할 결과 집합의 각 아티클에 대한 allow_interactive_resolver 값을 확인합니다.

    • 이 값이 1이면 Interactive Resolver가 사용됩니다.
    • 이 값이 0이면 먼저 각 문서에 대해 대화형 해결 프로그램을 사용하도록 설정해야 합니다. 이렇게 하려면 sp_changemergearticle을 실행하고, @publication, @article, @property에 대한 값으로 allow_interactive_resolver을, @value에 대한 값으로 true를 지정합니다.
  2. 구독 데이터베이스의 구독자에서 sp_addmergepullsubscription 실행합니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.

  3. 구독 데이터베이스의 구독자에서 다음 매개 변수를 지정하여 sp_addmergepullsubscription_agent 실행합니다.

    • @publisher, @publisher_db (게시된 데이터베이스) 및 @publication.
    • @enabled_for_syncmgr에 대한 값은 true입니다.
    • @use_interactive_resolvertrue 값을 지정합니다.
    • 병합 에이전트에 필요한 보안 계정 정보입니다. 자세한 내용은 끌어오기 구독 만들기를 참조하세요.
  4. 게시 데이터베이스의 게시자에서 sp_addmergesubscription 실행합니다.

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

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

충돌 추적 및 해결 수준 지정

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

한계 및 제한사항

  • 구독이 초기화된 후 추적 수준을 수정하는 경우 해당 구독을 다시 초기화해야 합니다. 속성 변경의 영향에 대한 자세한 내용은 게시 변경 및 아티클 속성을 참조하세요.
  • 행 및 열 수준 추적을 사용하면 항상 행 수준에서 충돌 해결이 수행됩니다. 승리한 행이 패배한 행을 덮어씁니다. 병합 복제를 사용하면 논리적 레코드 수준에서 충돌을 추적하고 해결하도록 지정할 수 있지만 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 실행합니다. column_tracking 값을 @property에 지정하고, @value에는 다음 값 중 하나를 지정합니다.

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

    @force_invalidate_snapshot 및 @force_reinit_subscription 모두에 대해 1 값을 지정합니다.

삭제 추적

비고

이 기능은 이후 버전의 Microsoft SQL Server에서 제거됩니다. 새 개발 작업에서 이 기능을 사용하지 말고 현재 이 기능을 사용하는 애플리케이션을 수정할 계획입니다.

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

중요합니다

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

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

  1. 게시 데이터베이스의 게시자에서 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 값이 동일해야 합니다.

처리 순서

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

Microsoft SQL Server 2005부터 병합 게시에 대한 아티클 처리의 기본 순서를 재정의할 수 있습니다. 예를 들어 트리거를 통해 참조 무결성을 정의하고 해당 트리거가 특정 순서로 실행되어야 하는 경우 유용합니다.

처리 순서 결정 방법

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

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

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

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

새 문서

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

    비고

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

기존 문서

  1. 아티클의 처리 순서를 확인하려면 sp_helpmergearticle(Transact-SQL) 를 실행하고 결과 집합에서 processing_order 값을 적어둡니다.

  2. 게시 데이터베이스의 게시자에서 sp_changemergearticle(Transact-SQL)을 실행합니다. @property processing_order 값과 @value 처리 순서를 나타내는 정수 값을 지정합니다.

또한 참조하십시오

조건부 삭제 추적을 사용하여 병합 복제 성능 최적화
논리 레코드에서 충돌 검색 및 해결
병합 테이블 아티클 간의 논리적 레코드 관계 정의
병합 복제 충돌 검색 및 해결
Download-Only 문서를 사용하여 병합 복제 성능 최적화
아티클 정의
아티클 속성 보기 및 수정