다음을 통해 공유


병합 복제의 게시 및 구독 초기화 방법

게시자와 구독자 간에 데이터를 이동하려면 병합 복제가 이러한 게시자와 구독자를 모두 초기화해야 합니다. 이 항목에서는 이러한 초기화 단계에 대한 정보를 제공합니다.

게시 초기화

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

  • 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_12\입니다. 여기서 12는 파티션에 대해 내부적으로 사용되는 ID입니다.

게시 및 구독 데이터베이스에서 생성되는 시스템 테이블

다음은 게시 데이터베이스 및 각 구독 데이터베이스에서 생성되는 테이블입니다.

테이블

설명

MSdynamicsnapshotjobs(Transact-SQL)

매개 변수가 있는 필터가 포함된 게시의 스냅숏 작업에 대한 정보를 포함합니다.

MSdynamicsnapshotviews(Transact-SQL)

스냅숏 에이전트에 의해 생성된 임시 스냅숏 뷰를 모두 추적합니다. SQL Server 에이전트 또는 스냅숏 에이전트의 비정상적인 종료 시 뷰를 정리하기 위해 시스템에서 사용됩니다.

MSmerge_altsyncpartners(Transact-SQL)

게시자에 대한 현재 동기화 파트너의 연결을 추적합니다.

MSmerge_articlehistory(Transact-SQL)

병합 에이전트 동기화 세션 중에 적용한 아티클 변경 내용을 추적하고 변경된 각 아티클을 행당 하나씩 표시합니다.

MSmerge_conflicts_info(Transact-SQL)

구독을 병합 게시와 동기화할 때 발생하는 충돌을 추적합니다.

MSmerge_contents(Transact-SQL)

현재 데이터베이스가 게시된 이후에 수정된 각 행을 행당 하나씩 표시합니다. 이 테이블은 병합 프로세스가 변경된 행을 확인하는 데 사용됩니다.

MSmerge_current_partition_mappings

변경된 지정 행이 속하는 각 파티션을 행당 하나씩 표시합니다.

MSmerge_dynamic_snapshots(Transact-SQL)

병합 게시에 대해 정의된 각 파티션의 스냅숏 위치를 추적합니다.

MSmerge_errorlineage(Transact-SQL)

구독자에서 삭제되었으나 삭제된 내용이 게시자로 전파되지 않은 행을 포함합니다.

MSmerge_generation_partition_mappings(Transact-SQL)

지정된 생성에 지정된 파티션과 관련된 변경 내용이 있는지 여부를 추적합니다.

MSmerge_genhistory(Transact-SQL)

각 생성 내용을 행당 하나씩 포함합니다. 생성은 게시자 또는 구독자에 배달되는 변경 내용 모음입니다. 생성은 병합 에이전트가 실행될 때마다 닫힙니다. 데이터베이스의 후속 변경 내용은 하나 이상의 열린 생성에 추가됩니다.

MSmerge_history(Transact-SQL)

이전 병합 에이전트 작업 세션 결과에 대한 자세한 설명이 있는 기록 행을 포함합니다.

MSmerge_identity_range(Transact-SQL)

복제가 자동으로 범위 할당을 관리하는 게시에 대한 구독의 ID 열에 할당된 숫자 범위를 추적합니다.

MSmerge_metadataaction_request(Transact-SQL)

필요한 각 보정 동작을 행당 하나씩 포함합니다. 보정 동작은 한 노드에서 변경이 실패할 경우 다른 노드에서 해당 변경을 롤백하는 데 사용됩니다.

MSmerge_partition_groups(Transact-SQL)

지정된 데이터베이스에서 각 사전 계산 파티션을 행당 하나씩 포함합니다.

MSmerge_past_partition_mappings(Transact-SQL)

변경된 지정 행이 이전에 속했지만 현재는 더 이상 속하지 않는 각 파티션을 행당 하나씩 포함합니다.

MSmerge_replinfo(Transact-SQL)

각 구독을 행당 하나씩 포함합니다. 이 테이블은 보내거나 받은 생성에 대한 내부 정보를 추적합니다.

MSmerge_sessions(Transact-SQL)

이전 병합 에이전트 작업 세션 결과가 있는 기록 행을 포함합니다.

MSmerge_settingshistory(Transact-SQL)

아티클 및 게시 속성에 대한 변경 기록을 포함하며 적용한 각 변경을 행당 하나씩 표시합니다.

MSmerge_tombstone(Transact-SQL)

삭제된 행에 대한 정보를 포함하며 삭제된 내용이 다른 구독자에 전파될 수 있도록 허용합니다.

MSrepl_errors(Transact-SQL)

에이전트 오류에 대한 자세한 정보를 포함합니다.

sysmergearticles(Transact-SQL)

각 병합 아티클을 행당 하나씩 포함합니다.

sysmergepartitioninfo(Transact-SQL)

각 아티클의 파티션에 대한 정보를 포함하며 각 아티클을 행당 하나씩 표시합니다.

sysmergepartitioninfoview(Transact-SQL)

테이블 아티클에 대한 분할 정보를 포함합니다.

sysmergepublications(Transact-SQL)

각 병합 게시를 행당 하나씩 포함합니다.

sysmergeschemaarticles(Transact-SQL)

저장 프로시저와 같은 스키마 전용 아티클을 추적합니다.

sysmergeschemachange(Transact-SQL)

스냅숏 에이전트가 생성한 게시된 아티클에 대한 정보를 포함합니다.

sysmergesubscriptions(Transact-SQL)

각 구독자를 행당 하나씩 포함합니다.

sysmergesubsetfilters(Transact-SQL)

분할된 아티클의 조인 필터 정보를 포함합니다.

추가로 MSsnapshotdeliveryprogress 테이블이 각 구독 데이터베이스에 생성되며 MSsubscription_properties 테이블이 끌어오기 구독을 사용하는 각 구독 데이터베이스에 생성됩니다.

테이블

설명

MSsnapshotdeliveryprogress(Transact-SQL)

스냅숏을 적용하는 동안 구독자에 성공적으로 배달된 파일을 추적합니다. 이 데이터는 병합 에이전트가 세션 중에 파일을 모두 배달하지 못한 경우 파일 배달을 재개하는 데 사용됩니다.

MSsubscription_properties(Transact-SQL)

구독자에서 복제 에이전트를 실행하는 데 필요한 매개 변수 정보를 포함합니다.