방법: 초기 스냅숏 만들기(복제 Transact-SQL 프로그래밍)

초기 스냅숏은 스냅숏 에이전트 작업을 만들고 실행하거나 배치 파일에서 스냅숏 에이전트 실행 파일을 실행하여 프로그래밍 방식으로 작성할 수 있습니다. 초기 스냅숏이 생성되면 구독이 처음으로 동기화될 때 구독자로 전송되고 적용됩니다. 명령 프롬프트 또는 배치 파일에서 스냅숏 에이전트를 실행하는 경우 기존 스냅숏이 무효화될 때마다 에이전트를 다시 실행해야 합니다.

매개 변수가 있는 필터를 사용하는 병합 게시에는 두 부분으로 구성된 스냅숏이 필요합니다. 자세한 내용은 방법: 매개 변수가 있는 필터를 사용하여 병합 게시에 대한 스냅숏 만들기(복제 Transact-SQL 프로그래밍)를 참조하십시오.

보안 정보보안 정보

가능한 경우 런타임에 사용자에게 보안 자격 증명을 입력하라는 메시지를 표시합니다. 자격 증명을 스크립트 파일에 저장해야 하는 경우에는 파일에 무단으로 액세스하지 못하도록 보안을 설정해야 합니다.

스냅숏 에이전트 작업을 만들고 실행하여 초기 스냅숏을 생성하려면

  1. 스냅숏, 트랜잭션 또는 병합 게시를 만듭니다. 자세한 내용은 방법: 게시 만들기(복제 Transact-SQL 프로그래밍)를 참조하십시오.

  2. sp_addpublication_snapshot(Transact-SQL)을 실행합니다. 이때 @publication 및 다음 매개 변수를 지정합니다.

    • 배포자에서 스냅숏 에이전트를 실행하는 Windows 인증 자격 증명을 지정하는 @job_login.

    • 제공된 Windows 자격 증명의 암호인 @job_password.

    • (옵션) 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode에 값 0. 이 경우 @publisher_login@publisher_password에 SQL Server 인증 로그인 정보도 지정해야 합니다.

    • (옵션) 스냅숏 에이전트 작업에 대한 동기화 일정. 자세한 내용은 방법: 동기화 일정 지정(복제 Transact-SQL 프로그래밍)을 참조하십시오.

    보안 정보보안 정보

     게시자를 원격 배포자로 구성할 경우 job_login 및 job_password를 비롯한 모든 매개 변수에 제공된 값이 일반 텍스트로 배포자에게 보내집니다. 이 저장 프로시저를 실행하기 전에 게시자와 해당 원격 배포자 간 연결을 암호화해야 합니다. 자세한 내용은 SQL Server 연결 암호화를 참조하십시오.

  3. 아티클을 게시에 추가합니다. 자세한 내용은 방법: 아티클 정의(복제 Transact-SQL 프로그래밍)를 참조하십시오.

  4. 게시 데이터베이스의 게시자에서 sp_startpublication_snapshot(Transact-SQL)을 실행하고 1단계에서 만든 @publication의 값을 지정합니다.

스냅숏 에이전트를 실행하여 초기 스냅숏을 생성하려면

  1. 스냅숏, 트랜잭션 또는 병합 게시를 만듭니다. 자세한 내용은 방법: 게시 만들기(복제 Transact-SQL 프로그래밍)를 참조하십시오.

  2. 아티클을 게시에 추가합니다. 자세한 내용은 방법: 아티클 정의(복제 Transact-SQL 프로그래밍)를 참조하십시오.

  3. 명령 프롬프트 또는 배치 파일에서 snapshot.exe를 실행하여 복제 스냅숏 에이전트를 시작하고 다음 명령줄 인수를 지정합니다.

    • -Publication

    • -Publisher

    • -Distributor

    • -PublisherDB

    • -ReplicationType

    SQL Server 인증을 사용하는 경우 다음 인수도 지정해야 합니다.

    • -DistributorLogin

    • -DistributorPassword

    • -DistributorSecurityMode = 0

    • -PublisherLogin

    • -PublisherPassword

    • -PublisherSecurityMode = 0

이 예제에서는 트랜잭션 게시를 만들고 sqlcmd 스크립팅 변수를 사용하여 새 게시에 대한 스냅숏 에이전트 작업을 추가하는 방법을 보여 줍니다. 또한 추가한 작업을 시작합니다.

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; --publication database
SET @publication = N'AdvWorksCustomerTran'; -- transactional publication name
SET @login = $(Login);
SET @password = $(Password);

USE [AdventureWorks2008R2]

-- Enable transactional and snapshot replication on the publication database.
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname = N'publish',
  @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
  @job_login = @login, 
  @job_password = @password,
  -- Explicitly specify the security mode used when connecting to the Publisher.
  @publisher_security_mode = 1;

-- Create new transactional publication, using the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addpublication 
  @publication = @publication, 
  @description = N'transactional publication';

-- Create a new snapshot job for the publication, using the defaults.
EXEC sp_addpublication_snapshot 
  @publication = @publication,
  @job_login = @login,
  @job_password = @password;

-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO

이 예제에서는 병합 게시를 만들고 sqlcmd 변수를 사용하여 게시에 대한 스냅숏 에이전트 작업을 추가합니다. 또한 추가한 작업을 시작합니다.

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @login = $(Login);
SET @password = $(Password);

-- Enable merge replication on the publication database.
USE master
EXEC sp_replicationdboption 
  @dbname = @publicationDB, 
  @optname=N'merge publish',
  @value = N'true';

-- Create new merge publication, using the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addmergepublication 
  @publication = @publication, 
  @description = N'Merge publication.';

-- Create a new snapshot job for the publication, using the defaults.
EXEC sp_addpublication_snapshot 
  @publication = @publication,
  @job_login = @login,
  @job_password = @password;

-- Start the Snapshot Agent job.
EXEC sp_startpublication_snapshot @publication = @publication;
GO

다음 명령줄 인수는 스냅숏 에이전트를 시작하여 병합 게시에 대한 스냅숏을 생성합니다.

[!참고]

가독성을 높이기 위해 줄 바꿈이 추가되었지만 배치 파일에서 명령은 단일 행으로 작성해야 합니다.

REM -- Declare variables
SET Publisher=%InstanceName%
SET PublicationDB=AdventureWorks2008R2 
SET Publication=AdvWorksSalesOrdersMerge 

REM --Start the Snapshot Agent to generate the snapshot for AdvWorksSalesOrdersMerge.
"C:\Program Files\Microsoft SQL Server\100\COM\SNAPSHOT.EXE" -Publication %Publication% 
-Publisher %Publisher% -Distributor %Publisher% -PublisherDB %PublicationDB% 
-ReplicationType 2 -OutputVerboseLevel 1 -DistributorSecurityMode 1