방법: 게시 만들기(복제 Transact-SQL 프로그래밍)

복제 저장 프로시저를 사용하여 프로그래밍 방식으로 게시를 만들 수 있습니다. 사용되는 저장 프로시저는 만들려는 게시의 유형에 따라 달라집니다.

보안 정보보안 정보

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

스냅숏 또는 트랜잭션 게시를 만들려면

  1. 게시 데이터베이스의 게시자에서 sp_replicationdboption(Transact-SQL)을 실행하여 스냅숏 또는 트랜잭션 복제를 사용하여 현재 데이터베이스를 게시할 수 있도록 설정합니다.

  2. 트랜잭션 게시의 경우 게시 데이터베이스에 대한 로그 판독기 에이전트 작업이 존재하는지 여부를 확인합니다. 스냅숏 게시의 경우에는 이 단계가 필요하지 않습니다.

    • 게시 데이터베이스에 대한 로그 판독기 에이전트 작업이 존재하면 3단계를 실행합니다.

    • 게시된 데이터베이스에 대해 로그 판독기 에이전트 작업이 존재하는지 확실하지 않으면 게시 데이터베이스의 게시자에서 sp_helplogreader_agent(Transact-SQL)를 실행합니다.

    • 결과 집합이 비어 있으면 로그 판독기 에이전트 작업을 만듭니다. 게시자에서 sp_addlogreader_agent(Transact-SQL)를 실행합니다. @job_name@password에 에이전트가 실행되는 Microsoft Windows 자격 증명을 지정합니다. 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode에 값 0을 지정하고 @publisher_login@publisher_password에 MicrosoftSQL Server 로그인 정보를 지정해야 합니다. 3단계로 진행합니다.

  3. 게시자에서 sp_addpublication(Transact-SQL)을 실행합니다. @publication에 게시 이름을 지정하고 @repl_freq 매개 변수에 스냅숏 게시의 경우 snapshot 값, 트랜잭션 게시의 경우 continuous 값을 지정합니다. 다른 게시 옵션을 지정합니다. 이렇게 하면 게시가 정의됩니다.

    [!참고]

    게시 이름은 다음과 같은 문자를 포함할 수 없습니다:

    % * [ ] | : " ? \ / < >

  4. 게시자에서 sp_addpublication_snapshot(Transact-SQL)을 실행합니다. @publication에 대해 3단계에서 사용된 게시 이름과 @snapshot_job_name@password에 대해 스냅숏 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode에 대해 값 0을 지정하고 @publisher_login@publisher_password에 대해 SQL Server 로그인 정보를 지정해야 합니다. 이렇게 하면 게시에 대해 스냅숏 에이전트 작업이 만들어집니다.

    보안 정보보안 정보

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

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

  6. 스냅숏 에이전트 작업을 시작하여 이 게시에 대한 초기 스냅숏을 생성합니다. 자세한 내용은 방법: 초기 스냅숏 만들기(복제 Transact-SQL 프로그래밍)을 참조하십시오.

병합 게시를 만들려면

  1. 게시자에서 sp_replicationdboption(Transact-SQL)을 실행하여 병합 복제를 사용하여 현재 데이터베이스를 게시할 수 있도록 설정합니다.

  2. 게시 데이터베이스의 게시자에서 sp_addmergepublication(Transact-SQL)을 실행합니다. @publication에 게시 이름을 지정하고 기타 게시 옵션을 지정합니다. 이렇게 하면 게시가 정의됩니다.

    [!참고]

    게시 이름은 다음과 같은 문자를 포함할 수 없습니다:

    % * [ ] | : " ? \ / < >

  3. 게시자에서 sp_addpublication_snapshot(Transact-SQL)을 실행합니다. @publication에 2단계에서 사용된 게시 이름을 지정하고 @snapshot_job_name@password에 스냅숏 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode에 대해 값 0을 지정하고 @publisher_login@publisher_password에 대해 SQL Server 로그인 정보를 지정해야 합니다. 이렇게 하면 게시에 대해 스냅숏 에이전트 작업이 만들어집니다.

    보안 정보보안 정보

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

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

  5. 스냅숏 에이전트 작업을 시작하여 이 게시에 대한 초기 스냅숏을 생성합니다. 자세한 내용은 방법: 초기 스냅숏 만들기(복제 Transact-SQL 프로그래밍)을 참조하십시오.

다음 예에서는 트랜잭션 게시를 만듭니다. 스크립팅 변수는 스냅숏 에이전트 및 로그 판독기 에이전트에 대한 작업을 만드는 데 필요한 Windows 자격 증명을 전달하는 데 사용됩니다.

-- 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'AdventureWorks'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or 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 use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

다음 예에서는 병합 게시를 만듭니다. 스크립팅 변수는 스냅숏 에이전트에 대한 작업을 만드는 데 필요한 Windows 자격 증명을 전달하는 데 사용됩니다.

-- 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".

--Declarations for adding a merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks'; 
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @login = $(Login);
SET @password = $(Password);

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

-- Create a new merge publication, explicitly setting the defaults. 
USE [AdventureWorks]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks.',
  @publication_compatibility_level  = N'90RTM';

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