방법: 트랜잭션 게시에 업데이트할 수 있는 구독 만들기(복제 Transact-SQL 프로그래밍)
[!참고]
Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하십시오.
트랜잭션 복제에서는 즉시 업데이트 구독 또는 지연 업데이트 구독을 사용하여 구독자에서 변경된 내용을 게시자에 다시 전파할 수 있습니다. 복제 저장 프로시저를 사용하여 프로그래밍 방식으로 업데이트 구독을 만들 수 있습니다.
즉시 업데이트 끌어오기 구독을 만들려면
게시자에서 sp_helppublication을 실행하여 게시에서 즉시 업데이트 구독을 지원하는지 확인합니다.
결과 집합의 allow_sync_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.
결과 집합의 allow_sync_tran 값이 0이면 즉시 업데이트 구독을 설정하여 게시를 다시 만들어야 합니다. 자세한 내용은 방법: 트랜잭션 게시에 대한 구독 업데이트 설정(복제 Transact-SQL 프로그래밍)을 참조하십시오.
게시자에서 sp_helppublication을 실행하여 게시에서 끌어오기 구독을 지원하는지 확인합니다.
결과 집합의 allow_pull 값이 1이면 게시에서 끌어오기 구독을 지원합니다.
allow_pull 값이 0이면 @property에 allow_pull, @value에 true를 지정하고 sp_changepublication을 실행합니다.
구독자에서 sp_addpullsubscription을 실행합니다. @publisher 및 @publication을 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.
synctran - 구독에서 즉시 업데이트를 사용하도록 설정합니다.
failover - 구독에서 즉시 업데이트를 사용하도록 설정하고 지연 업데이트를 장애 조치 옵션으로 설정합니다.
[!참고]
failover를 사용하려면 게시에서 지연 업데이트 구독도 설정해야 합니다.
구독자에서 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_mode에 0 값과 @distributor_login 및 @distributor_password에 MicrosoftSQL Server 로그인 정보 지정
이 구독에 대한 배포 에이전트 작업 일정. 자세한 내용은 방법: 동기화 일정 지정(복제 Transact-SQL 프로그래밍)을 참조하십시오.
구독 데이터베이스의 구독자에서 sp_link_publication을 실행합니다. @publisher, @publication, @publisher_db에 대해 게시 데이터베이스의 이름, @security_mode에 대해 다음 값 중 하나를 지정합니다.
0 - 게시자에서 업데이트할 때 SQL Server 인증을 사용합니다. 이 옵션을 사용하려면 @login 및 @password에 대해 게시자에 유효한 로그인을 지정해야 합니다.
1 - 게시자에 연결할 때 구독자에서 변경 작업을 수행하는 사용자의 보안 컨텍스트를 사용합니다. 이 보안 모드에 관한 제한 사항에 대해서는 sp_link_publication을 참조하십시오.
2 - sp_addlinkedserver를 사용하여 만든 기존의 사용자 정의 연결된 서버 로그인을 사용합니다.
게시자에서 @publication, @subscriber, @destination_db를 지정하고 @subscription_type에 pull 값, @update_mode에 3단계에서 지정한 값을 지정하고 sp_addsubscription을 실행합니다.
이렇게 하면 게시자에서 끌어오기 구독이 등록됩니다.
즉시 업데이트 밀어넣기 구독을 만들려면
게시자에서 sp_helppublication을 실행하여 게시에서 즉시 업데이트 구독을 지원하는지 확인합니다.
결과 집합의 allow_sync_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.
결과 집합의 allow_sync_tran 값이 0이면 즉시 업데이트 구독을 설정하여 게시를 다시 만들어야 합니다. 자세한 내용은 방법: 트랜잭션 게시에 대한 구독 업데이트 설정(복제 Transact-SQL 프로그래밍)을 참조하십시오.
게시자에서 sp_helppublication을 실행하여 게시에서 밀어넣기 구독을 지원하는지 확인합니다.
결과 집합의 allow_push 값이 1이면 게시에서 밀어넣기 구독을 지원합니다.
allow_push 값이 0이면 @property에 allow_push, @value에 true를 지정하고 sp_changepublication을 실행합니다.
게시자에서 sp_addsubscription을 실행합니다. @publication, @subscriber, @destination_db를 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.
synctran - 즉시 업데이트 지원을 설정합니다.
failover - 즉시 업데이트 지원을 설정하고 지연 업데이트를 장애 조치 옵션으로 설정합니다
[!참고]
failover를 사용하려면 게시에서 지연 업데이트 구독도 설정해야 합니다.
게시자에서 sp_addpushsubscription_agent를 실행합니다. 다음 매개 변수를 지정합니다.
@subscriber, @subscriber_db 및 @publication
배포자의 배포 에이전트가 @job_login 및 @job_password에 대해 실행되는 Windows 자격 증명
[!참고]
Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login 및 @job_password로 지정한 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 배포자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 구독자에 연결합니다.
(옵션) 구독자에 연결할 때 SQL Server 인증을 사용해야 하는 경우 @subscriber_security_mode에 0 값, @subscriber_login 및 @subscriber_password에 SQL Server 로그인 정보 지정
이 구독에 대한 배포 에이전트 작업 일정. 자세한 내용은 방법: 동기화 일정 지정(복제 Transact-SQL 프로그래밍)을 참조하십시오.
구독 데이터베이스의 구독자에서 sp_link_publication을 실행합니다. @publisher, @publication, @publisher_db에 대해 게시 데이터베이스의 이름, @security_mode에 대해 다음 값 중 하나를 지정합니다.
0 - 게시자에서 업데이트할 때 SQL Server 인증을 사용합니다. 이 옵션을 사용하려면 @login 및 @password에 대해 게시자에 유효한 로그인을 지정해야 합니다.
1 - 게시자에 연결할 때 구독자에서 변경 작업을 수행하는 사용자의 보안 컨텍스트를 사용합니다. 이 보안 모드에 관한 제한 사항에 대해서는 sp_link_publication을 참조하십시오.
2 - sp_addlinkedserver를 사용하여 만든 기존의 사용자 정의 연결된 서버 로그인을 사용합니다.
지연 업데이트 끌어오기 구독을 만들려면
게시자에서 sp_helppublication을 실행하여 게시에서 지연 업데이트 구독을 지원하는지 확인합니다.
결과 집합의 allow_queued_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.
결과 집합의 allow_queued_tran 값이 0이면 지연 업데이트 구독을 설정하여 게시를 다시 만들어야 합니다. 자세한 내용은 방법: 트랜잭션 게시에 대한 구독 업데이트 설정(복제 Transact-SQL 프로그래밍)을 참조하십시오.
게시자에서 sp_helppublication을 실행하여 게시에서 끌어오기 구독을 지원하는지 확인합니다.
결과 집합의 allow_pull 값이 1이면 게시에서 끌어오기 구독을 지원합니다.
allow_pull 값이 0이면 @property에 allow_pull, @value에 true를 지정하고 sp_changepublication을 실행합니다.
구독자에서 sp_addpullsubscription을 실행합니다. @publisher 및 @publication을 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.
queued tran - 구독에서 지연 업데이트를 사용하도록 설정합니다.
queued failover - 지연 업데이트 지원을 설정하고 즉시 업데이트를 장애 조치 옵션으로 설정합니다.
[!참고]
queued failover를 사용하려면 게시에서 즉시 업데이트 구독도 설정해야 합니다. 즉시 업데이트로 장애 조치를 수행하려면 sp_link_publication을 사용하여 구독자의 변경 내용을 게시자에 복제할 때 사용할 자격 증명을 정의해야 합니다.
구독자에서 sp_addpullsubscription_agent를 실행합니다. 다음 매개 변수를 지정합니다.
@publisher, @publisher_db 및 @publication
@job_login 및 @job_password에 대해 구독자에서 배포 에이전트가 실행되는 Windows 자격 증명
[!참고]
Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login 및 @job_password로 지정한 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 구독자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 배포자에 연결합니다.
(옵션) 배포자에 연결할 때 SQL Server 인증을 사용해야 하는 경우 @distributor_security_mode에 0 값과 @distributor_login 및 @distributor_password에 SQL Server 로그인 정보 지정
이 구독에 대한 배포 에이전트 작업 일정. 자세한 내용은 방법: 동기화 일정 지정(복제 Transact-SQL 프로그래밍)을 참조하십시오.
게시자에서 sp_addsubscriber(Transact-SQL)를 실행하여 게시자에 구독자를 등록합니다.
게시자에서 @publication, @subscriber, @destination_db를 지정하고 @subscription_type에 pull 값, @update_mode에 3단계에서 지정한 값을 지정하고 sp_addsubscription을 실행합니다.
이렇게 하면 게시자에서 끌어오기 구독이 등록됩니다.
지연 업데이트 밀어넣기 구독을 만들려면
게시자에서 sp_helppublication을 실행하여 게시에서 지연 업데이트 구독을 지원하는지 확인합니다.
결과 집합의 allow_queued_tran 값이 1이면 게시는 즉시 업데이트 구독을 지원합니다.
결과 집합의 allow_queued_tran 값이 0이면 지연 업데이트 구독을 설정하여 게시를 다시 만들어야 합니다. 자세한 내용은 방법: 트랜잭션 게시에 대한 구독 업데이트 설정(복제 Transact-SQL 프로그래밍)을 참조하십시오.
게시자에서 sp_helppublication을 실행하여 게시에서 밀어넣기 구독을 지원하는지 확인합니다.
결과 집합의 allow_push 값이 1이면 게시에서 밀어넣기 구독을 지원합니다.
allow_push 값이 0이면 @property에 allow_push, @value에 true를 지정하고 sp_changepublication을 실행합니다.
게시자에서 sp_addsubscription을 실행합니다. @publication, @subscriber, @destination_db를 지정하고 @update_mode에 다음 값 중 하나를 지정합니다.
queued tran - 구독에서 지연 업데이트를 사용하도록 설정합니다.
queued failover - 지연 업데이트 지원을 설정하고 즉시 업데이트를 장애 조치 옵션으로 설정합니다.
[!참고]
queued failover 옵션을 사용하려면 게시에서 즉시 업데이트 구독도 설정해야 합니다. 즉시 업데이트로 장애 조치를 수행하려면 sp_link_publication을 사용하여 구독자의 변경 내용을 게시자에 복제할 때 사용할 자격 증명을 정의해야 합니다.
게시자에서 sp_addpushsubscription_agent를 실행합니다. 다음 매개 변수를 지정합니다.
@subscriber, @subscriber_db 및 @publication
배포자의 배포 에이전트가 @job_login 및 @job_password에 대해 실행되는 Windows 자격 증명
[!참고]
Windows 통합 인증을 사용하여 만든 연결은 항상 @job_login 및 @job_password로 지정한 Windows 자격 증명을 사용합니다. 배포 에이전트는 항상 Windows 통합 인증을 사용하여 배포자에 대한 로컬 연결을 만듭니다. 기본적으로 에이전트는 Windows 통합 인증을 사용하여 구독자에 연결합니다.
(옵션) 구독자에 연결할 때 SQL Server 인증을 사용해야 하는 경우 @subscriber_security_mode에 0 값, @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