다음을 통해 공유


방법: 트랜잭션 게시에 대한 구독 업데이트 설정(복제 Transact-SQL 프로그래밍)

[!참고]

Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.

복제 저장 프로시저를 사용하여 프로그래밍 방식으로 트랜잭션 게시를 만들 때 즉시 업데이트 구독 또는 지연 업데이트 구독을 설정할 수 있습니다.

보안 정보보안 정보

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

즉시 업데이트 구독을 지원하는 게시를 만들려면

  1. 필요한 경우 게시 데이터베이스에 대한 로그 판독기 에이전트 작업을 만듭니다.

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

    • 게시된 데이터베이스에 대해 로그 판독기 에이전트 작업이 존재하는지 확실하지 않으면 게시 데이터베이스의 게시자에서 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에 Microsoft SQL Server 로그인 정보를 지정해야 합니다.

  2. @allow_sync_tran 매개 변수에 true 값을 지정하고 sp_addpublication(Transact-SQL)을 실행합니다.

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

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

  5. 구독자에서 이 게시에 대한 업데이트 구독을 만듭니다. 자세한 내용은 방법: 트랜잭션 게시에 업데이트할 수 있는 구독 만들기(복제 Transact-SQL 프로그래밍)를 참조하십시오.

지연 업데이트 구독을 지원하는 게시를 만들려면

  1. 필요한 경우 게시 데이터베이스에 대한 로그 판독기 에이전트 작업을 만듭니다.

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

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

    • 게시자에서 sp_addlogreader_agent(Transact-SQL)를 실행합니다. @job_name@password에 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode에 대해 값 0을 지정하고 @publisher_login@publisher_password에 대해 SQL Server 로그인 정보를 지정해야 합니다.

  2. 필요한 경우 배포자에 대한 큐 판독기 에이전트 작업을 만듭니다.

    • 배포 데이터베이스에 대한 큐 판독기 에이전트 작업이 이미 존재하면 3단계를 실행합니다.

    • 배포 데이터베이스에 대해 큐 판독기 에이전트 작업이 존재하는지 확실하지 않으면 배포 데이터베이스의 배포자에서 sp_helpqreader_agent(Transact-SQL)를 실행합니다. 결과 집합이 비어 있으면 큐 판독기 에이전트 작업을 만들어야 합니다.

    • 배포자에서 sp_addqreader_agent(Transact-SQL)를 실행합니다. @job_name@password에 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 이러한 자격 증명은 큐 판독기 에이전트가 게시자 및 구독자에 연결할 때 사용됩니다. 자세한 내용은 복제 에이전트 보안 모델을 참조하십시오.

  3. @allow_queued_tran 매개 변수에 true 값, @conflict_policypub wins, sub reinit 또는 sub wins 값을 지정하고 sp_addpublication(Transact-SQL)을 실행합니다.

  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 로그인 정보를 지정해야 합니다. 이렇게 하면 게시에 대해 스냅숏 에이전트 작업이 만들어집니다.

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

  6. 구독자에서 이 게시에 대한 업데이트 구독을 만듭니다. 자세한 내용은 방법: 트랜잭션 게시에 업데이트할 수 있는 구독 만들기(복제 Transact-SQL 프로그래밍)를 참조하십시오.

지연 업데이트 구독을 허용하는 게시에 대한 충돌 정책을 변경하려면

  • 게시 데이터베이스의 게시자에서 sp_changepublication(Transact-SQL)을 실행합니다. @propertyconflict_policy 값을 지정하고 @value에 원하는 충돌 정책 모드(pub wins, sub reinit 또는 sub wins)를 지정합니다.

이 예에서는 즉시 업데이트 끌어오기 구독과 지연 업데이트 끌어오기 구독을 모두 지원하는 게시를 만듭니다.

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

--Declarations for adding a transactional publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks2008R2]
-- Enable transactional 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 transactional publication that supports immediate updating, 
-- queued updating, and pull subscriptions. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_sync_tran = N'true', 
    @allow_queued_tran = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true',
  -- Explicitly declare the related default properties 
    @conflict_policy = N'pub wins';

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

--Declarations for adding an article.
DECLARE @publication AS sysname;
DECLARE @article AS sysname;
DECLARE @owner AS sysname;
SET @publication = N'AdvWorksProductTran';
SET @article = N'Product'; 
SET @owner = N'Production'; 

-- Add a horizontally and vertically filtered article for the Product table.
USE [AdventureWorks2008R2]
EXEC sp_addarticle 
    @publication = @publication, 
    @article = @article, 
    @source_table = @article, 
    @vertical_partition = N'false', 
    @type = N'logbased',
    @source_owner = @owner, 
    @destination_owner = @owner;
GO