다음을 통해 공유


병합 복제에서 게시 및 구독을 초기화하는 방법

병합 복제는 게시자와 구독자를 모두 초기화해야 데이터가 둘 사이에 흐를 수 있습니다. 이 문서에서는 초기화 중에 발생하는 단계에 대한 정보를 제공합니다.

게시 초기화

다음 목록에서는 나열된 각 저장 프로시저를 실행하거나 새 게시 마법사를 완료한 후에 발생하는 게시의 초기화 단계를 자세히 설명합니다. 스냅샷 에이전트가 게시에 대해 처음으로 실행된 후에 추가 초기화가 발생합니다.

  • sp_replicationdboption

    • 게시 데이터베이스가 복제용으로 표시됩니다. 복제를 제거하지 않으면 데이터베이스를 삭제할 수 없습니다.

    • 병합 게시가 데이터베이스에 이미 없는 경우 시스템 테이블이 게시 데이터베이스에 추가됩니다. 시스템 테이블의 전체 목록은 이 문서의 "게시 및 구독 데이터베이스에서 만든 시스템 테이블" 섹션을 참조하세요.

  • sp_addmergepublication

    • 게시 항목이 시스템 테이블에 추가됩니다.
  • sp_addpublication_snapshot

    • 스냅샷 에이전트 작업이 SQL Server 에이전트 시스템에 추가됩니다. 작업 이름은 형식 <Publisher>-<PublicationDatabase>-<Publication>-<Integer>입니다.
  • sp_addmergearticle

    • 복제된 각 개체는 복제용으로 표시됩니다. 모든 게시에서 해당 아티클을 삭제하지 않으면 개체를 삭제할 수 없습니다.

    • 각 아티클에 대한 항목이 시스템 테이블에 추가됩니다.

게시 데이터베이스에 대한 초기화의 나머지 부분에서는 게시에 대한 스냅샷 에이전트를 처음 실행하는 동안 발생합니다. 게시 데이터베이스는 스냅샷 에이전트의 후속 실행 중에 다시 초기화되지 않습니다. 새 게시 마법사를 사용하는 경우 마법사를 완료한 후 기본적으로 초기 스냅샷이 만들어집니다. 저장 프로시저를 사용하는 경우 에이전트 작업을 실행하거나 에이전트를 직접 실행해야 합니다. 에이전트 실행에 대한 자세한 내용은 복제 에이전트 시작 및 중지(SQL Server Management Studio)복제 에이전트 실행 파일 개념을 참조하세요.

게시에 대한 스냅샷 에이전트가 처음 실행되는 경우:

  • 각 게시된 테이블에는 rowguid이라는 새 열이 추가됩니다. 단, 테이블에 속성 ROWGUIDCOL이 설정된 데이터 형식 uniqueidentifier 열이 이미 있는 경우에는 해당 열이 사용됩니다. 열 rowguid 은 게시된 모든 테이블의 모든 행을 고유하게 식별하는 데 사용됩니다. 게시에서 테이블이 삭제되면 rowguid 열은 제거됩니다. 그러나 기존 열이 추적 목적으로 사용된 경우에는 그 열은 제거되지 않습니다.

  • 다음 개체는 게시된 각 테이블에 대한 게시 데이터베이스에서 만들어집니다(모든 개체는 스키마에 dbo 생성됨).

    • 트리거 삽입, 트리거 업데이트 및 삭제 트리거가 게시된 테이블에 추가되어 변경 내용을 추적합니다. 트리거의 이름은 다음과 같은 형식MSmerge_ins_<GUID>MSmerge_upd_<GUID>MSmerge_del_<GUID>으로 지정됩니다. GUID 값은 시스템 테이블 sysmergearticles의 아티클 항목에서 파생됩니다.

    • 게시된 테이블에 대한 삽입, 업데이트 및 삭제를 처리하고 다른 여러 복제 관련 작업을 수행하기 위해 저장 프로시저가 만들어집니다.

    • 보기는 삽입, 업데이트, 삭제 및 필터링을 관리하기 위해 만들어집니다.

    • 충돌 정보를 저장하기 위해 충돌 테이블이 만들어집니다. 충돌 테이블은 게시된 테이블의 스키마와 일치합니다. 게시된 각 테이블은 스크립깅된 다음 스크립트를 사용하여 게시 데이터베이스에서 충돌 테이블을 만듭니다. 충돌 테이블의 이름은 다음과 dbo.MSmerge_conflict_<Publication>_<Article>같습니다.

스냅샷 에이전트가 실행되면 게시 데이터베이스의 각 아티클에 대해 다음과 같은 형식의 파일(해당 파일 확장명 포함)이 만들어집니다.

  • 스키마(.sch)

  • 제약 조건 및 인덱스(.dri)

  • 트리거(.trg)

  • 시스템 테이블 데이터(.sys)

  • 충돌 테이블(.cft)

  • 데이터(.bcp): 매개 변수가 있는 필터가 있는 게시에 대해 생성되지 않았습니다.

    게시에서 매개 변수가 있는 필터를 사용하지 않는 경우 스냅샷에는 파일 집합에 게시된 테이블의 .bcp 데이터가 포함됩니다. 게시에서 매개 변수가 있는 필터(병합 게시에 일반적인 필터)를 사용하는 경우 초기 스냅샷에는 데이터가 포함되지 않습니다. 데이터는 다음 섹션에서 설명하는 구독자의 파티션에 대한 스냅샷을 사용하여 제공됩니다.

구독 설정

각 구독은 구독에 대한 병합 에이전트가 실행되고 초기 스냅샷을 구독 데이터베이스에 복사할 때 초기화됩니다. 스냅샷에는 복제된 개체의 스키마 및 데이터 외에도 게시 데이터베이스에 있는 시스템 테이블, 뷰, 트리거 및 저장 프로시저가 포함됩니다. 하나 또는 두 개의 추가 시스템 테이블도 구독 데이터베이스에 복사됩니다. 시스템 테이블의 전체 목록은 이 문서의 게시 및 구독 데이터베이스에서 만든 시스템 테이블 섹션을 참조하세요. 구독을 다시 초기화하면 복제된 모든 개체와 복제 시스템 개체를 덮어씁니다.

게시 데이터베이스에 매개 변수가 있는 필터를 사용하는 테이블이 없으면 동일한 게시 스냅샷이 각 구독자에 복사됩니다. 하나 이상의 매개 변수가 있는 필터를 사용하는 경우 각 구독이 초기화되는 방식은 다음 논리에 의해 제어됩니다.

  • 명령줄에서 병합 에이전트에 스냅샷 위치가 제공되는 경우:

    • 이 위치에서 스냅샷을 적용합니다.
  • 그렇지 않고 스냅샷이 미리 생성된 경우:

    • 게시 데이터베이스에서 MSmerge_dynamic_snapshots 스냅샷의 위치를 검색하고 해당 위치에서 스냅샷을 적용합니다.
  • 그 외에 출판물이 구독자가 스냅샷을 시작할 수 있도록 허용하는 경우:

    • 동일한 파티션을 가진 다른 구독자에 대해 스냅샷이 이미 생성된 경우 해당 스냅샷을 구독자에 적용합니다.

    • 그렇지 않으면 스냅샷을 생성하여 구독자에 적용합니다.

  • 그렇지 않으면, 게시의 테이블을 대상으로 SELECT 문장을 사용하여 구독자를 초기화합니다. 이 방법은 구독자의 파티션에 스냅샷을 사용하는 것보다 느립니다.

스냅샷 전송이 언제든지 중단되면 자동으로 다시 시작되며 이미 완전히 전송된 파일은 다시 전송되지 않습니다. 스냅샷 에이전트의 배달 단위는 각 게시 아티클에 대한 bcp 파일이므로 부분적으로 배달된 파일은 완전히 다시 배달되어야 합니다. 그러나 스냅샷을 다시 시작하면 전송되는 데이터의 양이 크게 줄어들고 연결이 신뢰할 수 없는 경우에도 스냅샷이 적시에 배달되도록 할 수 있습니다. 스냅샷을 만드는 방법에 대한 자세한 내용은 매개 변수가 있는 필터 - 매개 변수가 있는 행 필터를 참조하세요.

스냅샷 위치

스냅샷 위치는 기본 또는 대체 스냅샷 위치에 지정된 경로에 따라 달라집니다. 게시에서 스냅샷 폴더에 UNC 경로 또는 FTP 공유를 사용하는지 여부 및 게시에서 매개 변수가 있는 필터를 사용하는지 여부입니다. 이 예제에서는 스냅샷 폴더 위치가 다음과 \\<MyComputer>\<MyFolder>같은 경우를 가정합니다.

  • 게시에서 UNC를 사용하는 경우 경로의 첫 번째 부분은 다음과 \\<MyComputer>\<MyFolder>\unc\같습니다. FTP를 사용하는 경우는 다음과 입니다 \\<MyComputer>\<MyFolder>\ftp\.

  • 게시에서 UNC를 사용하고 매개 변수가 있는 필터를 사용하지 않는 경우 경로는 입니다.\\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>

  • 게시에서 UNC를 사용하고 매개 변수가 있는 필터를 사용하는 경우 위치는 스냅샷 폴더 경로 및 게시에 대한 매개 변수가 있는 행 필터링 조건을 기반으로 합니다. 예를 들어 아티클이 함수를 사용하여 HOST_NAME() 필터링되고 파티션 값 HOST_NAME()SalesLaptop있는 경우 해당 파티션의 스냅샷 경로는 \\<MyComputer>\<MyFolder>\unc\<Publisher><Publicationdb><publication>\SalesLaptop_1212 파티션에 내부적으로 사용되는 ID입니다.

게시 및 구독 데이터베이스에서 만든 시스템 테이블

다음 테이블은 게시 데이터베이스와 각 구독 데이터베이스에 만들어집니다.

테이블 / 표 설명
MSdynamicsnapshotjobs 매개 변수가 있는 필터가 있는 게시에 대한 스냅샷 작업에 대한 정보를 포함합니다.
MSdynamicsnapshotviews 스냅샷 에이전트에서 만든 모든 임시 스냅샷 보기를 추적합니다. SQL Server 에이전트 또는 스냅샷 에이전트가 비정상적으로 종료된 경우 시스템에서 보기를 정리하는 데 사용됩니다.
MSmerge_altsyncpartners 게시자에 대한 현재 동기화 파트너가 누구인지에 대한 연결을 추적합니다.
MSmerge_articlehistory 병합 에이전트 동기화 세션 중에 아티클이 변경된 내용을 추적하며, 변경된 각 아티클에 대해 하나의 행이 있습니다.
MSmerge_conflicts_info 구독을 병합 게시에 동기화할 때 발생하는 충돌을 추적합니다.
MSmerge_contents 게시된 이후 현재 데이터베이스에서 수정된 각 행에 대해 하나의 행을 포함합니다. 이 테이블은 병합 프로세스에서 변경된 행을 결정하는 데 사용됩니다.
MSmerge_current_partition_mappings 지정된 변경된 행이 속한 각 파티션에 대해 하나의 행을 포함합니다.
MSmerge_dynamic_snapshots 병합 게시에 대해 정의된 각 파티션의 스냅샷 위치를 추적합니다.
MSmerge_errorlineage 구독자에서 삭제되었지만 해당 삭제가 게시자에 전파되지 않는 행을 포함합니다.
MSmerge_generation_partition_mappings 지정된 세대에 지정된 파티션과 관련된 변경 내용이 포함되어 있는지 여부를 추적합니다.
MSmerge_genhistory 각 세대에 대해 하나의 행을 포함합니다. 세대는 게시자 또는 구독자에게 전달되는 변경 내용의 컬렉션입니다. 병합 에이전트를 실행할 때마다 세대가 닫히고, 데이터베이스의 후속 변경 사항은 하나 이상의 열린 세대에 추가됩니다.
MSmerge_history 이전 병합 에이전트 작업 세션의 결과에 대한 자세한 설명이 포함된 기록 행을 포함합니다.
MSmerge_identity_range (필요한 경우 설명 추가) 게시물의 구독에 대해 복제가 ID 열에 할당된 숫자 범위 관리를 자동으로 수행하는 경우, 그러한 숫자 범위를 추적합니다.
MSmerge_metadataaction_request 필요한 각 보상 작업에 대해 하나의 행을 포함합니다. 보상 작업은 다른 노드에서 변경이 실패한 경우 한 노드에서 변경 사항을 롤백하는 데 사용됩니다.
MSmerge_partition_groups 지정된 데이터베이스에서 미리 계산된 각 파티션에 대해 하나의 행을 포함합니다.
MSmerge_past_partition_mappings 각 파티션마다 변경된 행이 이전에 속했던 행이지만 현재 속하지 않는 하나의 행이 포함됩니다.
MSmerge_replinfo 각 구독에 대해 하나의 행을 포함합니다. 이 표에서는 보낸 세대와 수신된 세대에 대한 내부 정보를 추적합니다.
MSmerge_sessions 이전 병합 에이전트 작업 세션의 결과가 포함된 기록 행을 포함합니다.
MSmerge_설정기록 아티클 및 게시 속성에 대한 변경 내용의 기록을 포함하고 각 변경 내용에 대해 하나의 행을 포함합니다.
MSmerge_tombstone 삭제된 행에 대한 정보를 포함하고 삭제를 다른 구독자에게 전파할 수 있도록 허용합니다.
MSrepl_errors 에이전트 오류에 대한 자세한 정보를 포함합니다.
sysmergearticles 각 병합 아티클에 대해 하나의 행을 포함합니다.
sysmergepartitioninfo 각 아티클에 대해 하나의 행을 사용하여 각 아티클의 파티션에 대한 정보를 포함합니다.
sysmergepartitioninfoview 테이블 아티클에 대한 분할 정보를 포함합니다.
sysmergepublications 각 병합 게시에 대해 하나의 행을 포함합니다.
sysmergeschemaarticles 저장 프로시저와 같은 스키마 전용 문서를 추적합니다.
sysmergeschemachange 스냅샷 에이전트에서 생성된 게시된 아티클에 대한 정보를 포함합니다.
sysmergesubscriptions 각 구독자에 대해 하나의 행을 포함합니다.
sysmergesubsetfilters 분할된 아티클에 대한 조인 필터 정보를 포함합니다.

또한 MSsnapshotdeliveryprogress 테이블은 각 구독 데이터베이스에 만들어지고 MSsubscription_properties 테이블은 끌어오기 구독을 사용하는 각 구독 데이터베이스에 만들어집니다.

테이블 / 표 설명
MSsnapshotdeliveryprogress 스냅샷이 적용될 때 구독자에게 성공적으로 배달된 파일을 추적합니다. 이 데이터는 병합 에이전트가 세션 중에 모든 파일을 배달하지 못하는 경우 파일 배달을 다시 시작하는 데 사용됩니다.
MSsubscription_properties 구독자에서 복제 에이전트를 실행하는 데 필요한 매개 변수 정보를 포함합니다.