방법: 트랜잭션 게시에 업데이트할 수 있는 구독 만들기(복제 Transact-SQL 프로그래밍)

[!참고]

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

트랜잭션 복제에서는 즉시 업데이트 구독 또는 지연 업데이트 구독을 사용하여 구독자에서 변경된 내용을 게시자에 다시 전파할 수 있습니다. 복제 저장 프로시저를 사용하여 프로그래밍 방식으로 업데이트 구독을 만들 수 있습니다.

즉시 업데이트 끌어오기 구독을 만들려면

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 즉시 업데이트 구독을 지원하는지 확인합니다.

  2. 게시자에서 sp_helppublication을 실행하여 게시에서 끌어오기 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_pull 값이 1이면 게시에서 끌어오기 구독을 지원합니다.

    • allow_pull 값이 0이면 @propertyallow_pull, @value에 true를 지정하고 sp_changepublication을 실행합니다.

  3. 구독자에서 sp_addpullsubscription을 실행합니다. @publisher@publication을 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.

    • synctran - 구독에서 즉시 업데이트를 사용하도록 설정합니다.

    • failover - 구독에서 즉시 업데이트를 사용하도록 설정하고 지연 업데이트를 장애 조치 옵션으로 설정합니다.

      [!참고]

      failover를 사용하려면 게시에서 지연 업데이트 구독도 설정해야 합니다.

  4. 구독자에서 sp_addpullsubscription_agent를 실행합니다. 다음을 지정합니다.

    • @publisher, @publisher_db@publication 매개 변수

    • @job_login@job_password에 대해 구독자에서 배포 에이전트가 실행되는 Microsoft Windows 자격 증명

      [!참고]

      Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정한 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 구독자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 배포자에 연결합니다.

    • (옵션) 배포자에 연결할 때 SQL Server 인증을 사용해야 하는 경우 @distributor_security_mode0 값과 @distributor_login@distributor_password에 MicrosoftSQL Server 로그인 정보 지정

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

  5. 구독 데이터베이스의 구독자에서 sp_link_publication을 실행합니다. @publisher, @publication, @publisher_db에 대해 게시 데이터베이스의 이름, @security_mode에 대해 다음 값 중 하나를 지정합니다.

    • 0 - 게시자에서 업데이트할 때 SQL Server 인증을 사용합니다. 이 옵션을 사용하려면 @login@password에 대해 게시자에 유효한 로그인을 지정해야 합니다.

    • 1 - 게시자에 연결할 때 구독자에서 변경 작업을 수행하는 사용자의 보안 컨텍스트를 사용합니다. 이 보안 모드에 관한 제한 사항에 대해서는 sp_link_publication을 참조하십시오.

    • 2 - sp_addlinkedserver를 사용하여 만든 기존의 사용자 정의 연결된 서버 로그인을 사용합니다.

  6. 게시자에서 @publication, @subscriber, @destination_db를 지정하고 @subscription_typepull 값, @update_mode에 3단계에서 지정한 값을 지정하고 sp_addsubscription을 실행합니다.

    이렇게 하면 게시자에서 끌어오기 구독이 등록됩니다.

즉시 업데이트 밀어넣기 구독을 만들려면

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 즉시 업데이트 구독을 지원하는지 확인합니다.

  2. 게시자에서 sp_helppublication을 실행하여 게시에서 밀어넣기 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_push 값이 1이면 게시에서 밀어넣기 구독을 지원합니다.

    • allow_push 값이 0이면 @propertyallow_push, @value에 true를 지정하고 sp_changepublication을 실행합니다.

  3. 게시자에서 sp_addsubscription을 실행합니다. @publication, @subscriber, @destination_db를 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.

    • synctran - 즉시 업데이트 지원을 설정합니다.

    • failover - 즉시 업데이트 지원을 설정하고 지연 업데이트를 장애 조치 옵션으로 설정합니다

      [!참고]

      failover를 사용하려면 게시에서 지연 업데이트 구독도 설정해야 합니다.

  4. 게시자에서 sp_addpushsubscription_agent를 실행합니다. 다음 매개 변수를 지정합니다.

    • @subscriber, @subscriber_db@publication

    • 배포자의 배포 에이전트가 @job_login@job_password에 대해 실행되는 Windows 자격 증명

      [!참고]

      Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정한 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 배포자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 구독자에 연결합니다.

    • (옵션) 구독자에 연결할 때 SQL Server 인증을 사용해야 하는 경우 @subscriber_security_mode0 값, @subscriber_login@subscriber_password에 SQL Server 로그인 정보 지정

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

  5. 구독 데이터베이스의 구독자에서 sp_link_publication을 실행합니다. @publisher, @publication, @publisher_db에 대해 게시 데이터베이스의 이름, @security_mode에 대해 다음 값 중 하나를 지정합니다.

    • 0 - 게시자에서 업데이트할 때 SQL Server 인증을 사용합니다. 이 옵션을 사용하려면 @login@password에 대해 게시자에 유효한 로그인을 지정해야 합니다.

    • 1 - 게시자에 연결할 때 구독자에서 변경 작업을 수행하는 사용자의 보안 컨텍스트를 사용합니다. 이 보안 모드에 관한 제한 사항에 대해서는 sp_link_publication을 참조하십시오.

    • 2 - sp_addlinkedserver를 사용하여 만든 기존의 사용자 정의 연결된 서버 로그인을 사용합니다.

지연 업데이트 끌어오기 구독을 만들려면

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 지연 업데이트 구독을 지원하는지 확인합니다.

  2. 게시자에서 sp_helppublication을 실행하여 게시에서 끌어오기 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_pull 값이 1이면 게시에서 끌어오기 구독을 지원합니다.

    • allow_pull 값이 0이면 @propertyallow_pull, @value에 true를 지정하고 sp_changepublication을 실행합니다.

  3. 구독자에서 sp_addpullsubscription을 실행합니다. @publisher@publication을 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.

    • queued tran - 구독에서 지연 업데이트를 사용하도록 설정합니다.

    • queued failover - 지연 업데이트 지원을 설정하고 즉시 업데이트를 장애 조치 옵션으로 설정합니다.

      [!참고]

      queued failover를 사용하려면 게시에서 즉시 업데이트 구독도 설정해야 합니다. 즉시 업데이트로 장애 조치를 수행하려면 sp_link_publication을 사용하여 구독자의 변경 내용을 게시자에 복제할 때 사용할 자격 증명을 정의해야 합니다.

  4. 구독자에서 sp_addpullsubscription_agent를 실행합니다. 다음 매개 변수를 지정합니다.

    • @publisher, @publisher_db@publication

    • @job_login@job_password에 대해 구독자에서 배포 에이전트가 실행되는 Windows 자격 증명

      [!참고]

      Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정한 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 구독자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 배포자에 연결합니다.

    • (옵션) 배포자에 연결할 때 SQL Server 인증을 사용해야 하는 경우 @distributor_security_mode0 값과 @distributor_login@distributor_password에 SQL Server 로그인 정보 지정

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

  5. 게시자에서 sp_addsubscriber(Transact-SQL)를 실행하여 게시자에 구독자를 등록합니다.

    게시자에서 @publication, @subscriber, @destination_db를 지정하고 @subscription_typepull 값, @update_mode에 3단계에서 지정한 값을 지정하고 sp_addsubscription을 실행합니다.

    이렇게 하면 게시자에서 끌어오기 구독이 등록됩니다.

지연 업데이트 밀어넣기 구독을 만들려면

  1. 게시자에서 sp_helppublication을 실행하여 게시에서 지연 업데이트 구독을 지원하는지 확인합니다.

  2. 게시자에서 sp_helppublication을 실행하여 게시에서 밀어넣기 구독을 지원하는지 확인합니다.

    • 결과 집합의 allow_push 값이 1이면 게시에서 밀어넣기 구독을 지원합니다.

    • allow_push 값이 0이면 @propertyallow_push, @value에 true를 지정하고 sp_changepublication을 실행합니다.

  3. 게시자에서 sp_addsubscription을 실행합니다. @publication, @subscriber, @destination_db를 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.

    • queued tran - 구독에서 지연 업데이트를 사용하도록 설정합니다.

    • queued failover - 지연 업데이트 지원을 설정하고 즉시 업데이트를 장애 조치 옵션으로 설정합니다.

      [!참고]

      queued failover 옵션을 사용하려면 게시에서 즉시 업데이트 구독도 설정해야 합니다. 즉시 업데이트로 장애 조치를 수행하려면 sp_link_publication을 사용하여 구독자의 변경 내용을 게시자에 복제할 때 사용할 자격 증명을 정의해야 합니다.

  4. 게시자에서 sp_addpushsubscription_agent를 실행합니다. 다음 매개 변수를 지정합니다.

    • @subscriber, @subscriber_db@publication

    • 배포자의 배포 에이전트가 @job_login@job_password에 대해 실행되는 Windows 자격 증명

      [!참고]

      Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login@job_password로 지정한 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 배포자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 구독자에 연결합니다.

    • (옵션) 구독자에 연결할 때 SQL Server 인증을 사용해야 하는 경우 @subscriber_security_mode0 값, @subscriber_login@subscriber_password에 SQL Server 로그인 정보 지정

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

이 예에서는 즉시 업데이트 구독을 지원하는 게시에 대해 즉시 업데이트 끌어오기 구독을 만듭니다. 로그인 및 암호 값은 sqlcmd 스크립팅 변수를 사용하여 런타임에 제공됩니다.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Execute this batch at the Subscriber.
DECLARE @publication AS sysname;
DECLARE @publicationDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS nvarchar(512);
SET @publication = N'AdvWorksProductTran';
SET @publicationDB = N'AdventureWorks';
SET @publisher = $(PubServer);
SET @login = $(Login);
SET @password = $(Password);

-- At the subscription database, create a pull subscription to a transactional 
-- publication using immediate updating with queued updating as a failover.
EXEC sp_addpullsubscription 
    @publisher = @publisher, 
    @publication = @publication, 
    @publisher_db = @publicationDB, 
    @update_mode = N'failover', 
    @subscription_type = N'pull';

-- Add an agent job to synchronize the pull subscription, 
-- which uses Windows Authentication when connecting to the Distributor.
EXEC sp_addpullsubscription_agent 
    @publisher = @publisher, 
    @publisher_db = @publicationDB, 
    @publication = @publication,
    @job_login = @login,
    @job_password = @password; 

-- Add a Windows Authentication-based linked server that enables the 
-- Subscriber-side triggers to make updates at the Publisher. 
EXEC sp_link_publication 
    @publisher = @publisher, 
    @publication = @publication,
    @publisher_db = @publicationDB, 
    @security_mode = 0,
    @login = @login,
    @password = @password;
GO

USE AdventureWorks
GO

-- Execute this batch at the Publisher.
DECLARE @publication AS sysname;
DECLARE @subscriptionDB AS sysname;
DECLARE @subscriber AS sysname;
SET @publication = N'AdvWorksProductTran'; 
SET @subscriptionDB = N'AdventureWorksReplica'; 
SET @subscriber = $(SubServer);

-- At the Publisher, register the subscription, using the defaults.
USE [AdventureWorks]
EXEC sp_addsubscription 
    @publication = @publication, 
    @subscriber = @subscriber, 
    @destination_db = @subscriptionDB, 
    @subscription_type = N'pull', 
    @update_mode = N'failover';
GO