스냅샷 복제

적용 대상:SQL ServerAzure SQL Managed Instance

스냅샷 복제는 특정 시점에 나타나는 것과 정확하게 데이터를 배포하며 데이터에 대한 업데이트를 모니터링하지 않습니다. 동기화가 발생하면 전체 스냅샷이 생성되어 구독자에게 전송됩니다.

참고 항목

스냅샷 복제는 자체적으로 사용할 수 있지만 스냅샷 프로세스(게시에서 지정한 모든 개체 및 데이터의 복사본을 만드는 프로세스)는 트랜잭션 및 병합 게시에 대한 초기 데이터 및 데이터베이스 개체 집합을 제공하는 데도 일반적으로 사용됩니다.

다음 중 하나 이상이 true인 경우 스냅샷 복제를 단독으로 사용하는 것이 가장 적합합니다.

  • 데이터가 자주 변경되지 않습니다.

  • 게시자에 대해 오래된 데이터의 복사본을 일정 기간 동안 사용할 수 있습니다.

  • 소량의 데이터를 복제합니다.

  • 짧은 기간 동안 많은 양의 데이터가 변경됩니다.

스냅샷 복제는 많은 양의 데이터가 변경되지만 자주 변경되지는 않을 때 가장 적합합니다. 예를 들어 한 판매 조직이 제품 가격 목록을 유지 관리하면서 일년에 한 번이나 두 번 가격을 동시에 업데이트한다면 데이터 전체 스냅샷이 변경된 후 복제하는 것이 좋습니다. 특정 유형의 데이터를 고려할 때 스냅샷이 더 자주 사용될 수도 있습니다. 예를 들어 낮에 게시자에서 비교적 작은 테이블이 업데이트되지만 일부 대기 시간이 허용되는 경우 매일 밤 변경 내용을 스냅샷으로 배달할 수 있습니다.

증분 변경 내용은 추적되지 않으므로 스냅샷 복제는 트랜잭션 복제보다 게시자에 대한 연속 오버헤드가 낮습니다. 그러나 복제되는 데이터 세트가 매우 큰 경우 스냅샷을 생성하고 적용하려면 상당한 리소스가 필요합니다. 그러므로 스냅샷 복제 사용 여부를 평가할 때 전체 데이터 집합의 크기와 데이터 변경 빈도를 고려하세요.

항목 내용

스냅샷 복제 작동 방식

스냅샷 에이전트

배포 및 병합 에이전트

스냅샷 복제 작동 방식

기본적으로 세 가지 유형의 복제는 모두 스냅샷을 사용하여 구독자를 초기화합니다. SQL Server 스냅샷 에이전트는 항상 스냅샷 파일을 생성하지만 파일을 제공하는 에이전트는 사용 중인 복제 유형에 따라 다릅니다. 스냅샷 복제 및 트랜잭션 복제는 배포 에이전트를 사용하여 파일을 배달하는 반면 병합 복제는 SQL Server 병합 에이전트를 사용합니다. 배포자에서 스냅샷 에이전트를 실행합니다. 배포 에이전트와 병합 에이전트는 밀어넣기 구독을 위한 배포자에서 실행되거나 끌어오기 구독을 위한 구독자에서 실행됩니다.

구독을 만든 즉시 또는 게시를 만들 때 설정한 일정에 따라 스냅샷을 생성하고 적용할 수 있습니다. 스냅샷 에이전트는 게시된 테이블 및 데이터베이스 개체의 스키마 및 데이터를 포함하는 스냅샷 파일을 준비하여 게시자의 스냅샷 폴더에 저장하고 배포자의 배포 데이터베이스에 추적 정보를 기록합니다. 배포자를 구성할 때 기본 스냅샷 폴더를 지정하지만 기본값 대신 게시의 대체 위치를 지정할 수 있습니다.

이 항목에 설명된 표준 스냅샷 프로세스 외에도 매개 변수가 있는 필터가 포함된 병합 게시에 대해 두 부분으로 구성된 스냅샷 프로세스가 사용됩니다.

다음 그림에서는 스냅샷 복제의 주 구성 요소를 보여 줍니다.

Snapshot replication components and data flow

스냅샷 에이전트

병합 복제의 경우 스냅샷 에이전트가 실행될 때마다 스냅샷이 생성됩니다. 트랜잭션 복제의 경우 스냅샷 생성은 게시 속성 immediate_sync 설정에 따라 달라집니다. 속성이 TRUE(새 게시 마법사를 사용하는 경우 기본값)로 설정된 경우 스냅샷 에이전트가 실행될 때마다 스냅샷이 생성되며 언제든지 구독자에 적용할 수 있습니다. 이 속성을 FALSE( sp_addpublication사용 시 기본 설정)로 설정하면 스냅샷 에이전트가 마지막으로 실행된 후에 새 구독이 추가된 경우에만 스냅샷이 생성됩니다. 구독자는 동기화하기 위해 스냅샷 에이전트가 완료될 때까지 기다려야 합니다.

스냅샷 에이전트는 다음 단계를 수행합니다.

  1. 배포자에서 게시자에 대한 연결을 설정한 다음 필요한 경우 게시된 테이블에 대해 잠금을 설정합니다.

    • 병합 게시의 경우 스냅샷 에이전트는 잠금을 수행하지 않습니다.

    • 트랜잭션 게시의 경우 기본적으로 스냅샷 에이전트는 스냅샷 생성의 초기 단계에서만 잠금을 수행합니다.

    • 스냅샷 게시의 경우 전체 스냅샷 생성 프로세스 중에 잠금이 유지됩니다.

  2. 각 아티클에 대한 테이블 스키마의 복사본을 .sch 파일에 씁니다. 인덱스, 제약 조건, 저장 프로시저, 뷰, 사용자 정의 함수 등과 같은 다른 데이터베이스 개체가 게시되면 추가 스크립트 파일이 생성됩니다.

  3. 게시자의 게시된 테이블에서 데이터를 복사하고 스냅샷 폴더에 데이터를 씁니다. 스냅샷은 BCP(대량 복사 프로그램) 파일 집합으로 생성됩니다.

  4. 스냅샷 및 트랜잭션 게시의 경우 스냅샷 에이전트는 배포 데이터베이스의 MSrepl_commandsMSrepl_transactions 테이블에 행을 추가합니다. MSrepl_commands 테이블의 항목은 .sch 및 .bcp 파일의 위치, 다른 스냅샷 파일 및 모든 사전 또는 사후 스냅샷 스크립트에 대한 참조를 나타내는 명령입니다. MSrepl_transactions 테이블의 항목은 구독자 동기화와 관련된 명령입니다.

    병합 게시의 경우 스냅샷 에이전트는 추가 단계를 수행합니다.

  5. 게시된 테이블에 대한 잠금을 해제합니다.

스냅샷을 생성하는 동안에는 게시된 테이블에서 스키마를 변경할 수 없습니다. 스냅샷 파일이 생성되면 Windows 탐색기를 사용하여 스냅샷 폴더에서 볼 수 있습니다.

배포 에이전트 및 병합 에이전트

스냅샷 게시의 경우 배포 에이전트가 게시에 대해 실행될 때마다 아직 동기화되지 않았거나, 다시 초기화로 표시되었거나, 새 아티클을 포함하는 각 구독자로 새 스냅샷을 이동합니다.

스냅샷 및 트랜잭션 복제의 경우 배포 에이전트는 다음 단계를 수행합니다.

  1. 배포자에 연결합니다.

  2. 배포자의 배포 데이터베이스에서 MSrepl_commandsMSrepl_transactions 테이블을 검사합니다. 에이전트는 첫 번째 테이블에서 스냅샷 파일의 위치를 읽고 두 테이블에서 구독자 동기화 명령을 읽습니다.

  3. 스키마 및 명령을 구독 데이터베이스로 적용합니다.

필터링되지 않은 병합 복제 게시의 경우 병합 에이전트는 다음 단계를 수행합니다.

  1. 게시자에 대한 연결을 설정합니다.

  2. 게시자의 sysmergeschemachange 테이블을 검사하고 구독자에 적용해야 하는 새 스냅샷이 있는지 여부를 확인합니다.

  3. 새 스냅샷을 사용할 수 있는 경우 병합 에이전트는 sysmergeschemachange에 지정된 위치에서 스냅샷 파일을 구독 데이터베이스에 적용합니다.