트랜잭션 게시에 대해 업데이트 구독 설정
적용 대상: SQL Server
이 주제에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server에서 트랜잭션 게시에 대해 업데이트 구독을 사용하도록 설정하는 방법을 설명합니다.
참고 항목
SQL Server의 이후 버전에서는 이 기능이 제거됩니다. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 애플리케이션은 수정하세요.
시작하기 전에
보안
가능한 경우 런타임 시 사용자에게 보안 자격 증명을 입력하라는 메시지가 표시됩니다. 스크립트 파일에 자격 증명을 저장하는 경우에는 무단으로 액세스하지 못하도록 파일에 보안을 설정해야 합니다.
SQL Server Management Studio 사용
새 게시 마법사의 게시 유형 페이지에서 트랜잭션 게시에 대해 업데이트 구독을 사용할 수 있도록 설정합니다.
구독 업데이트를 사용하려면 새 구독 마법사에서도 옵션을 구성해야 합니다.
구독 업데이트를 설정하려면
새 게시 마법사의 게시 유형 페이지에서 업데이트할 수 있는 구독이 있는 트랜잭션 게시를 선택합니다.
에이전트 보안 페이지에서 스냅샷 에이전트, 로그 판독기 에이전트 및 큐 판독기 에이전트에 대한 보안 설정을 지정합니다. 큐 판독기 에이전트가 실행되는 계정에 필요한 권한에 대한 자세한 내용은 복제 에이전트 보안 모델을 참조하세요.
참고 항목
즉시 업데이트 구독만 사용하는 경우에도 큐 판독기 에이전트가 구성됩니다.
Transact-SQL 사용
복제 저장 프로시저를 사용하여 프로그래밍 방식으로 트랜잭션 게시를 만들 때 즉시 또는 지연 업데이트 구독을 사용하도록 설정할 수 있습니다.
즉시 업데이트 구독을 지원하는 게시를 만들려면
필요한 경우 게시 데이터베이스에 대한 로그 판독기 에이전트 작업을 만듭니다.
게시 데이터베이스에 로그 판독기 에이전트 작업이 이미 있는 경우 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 로그인 정보도 지정해야 합니다.
sp_addpublication(Transact-SQL)을 실행하여 true 값을 @allow_sync_tran 매개 변수에 지정합니다.
게시자에서 sp_addpublication_snapshot(Transact-SQL)을 실행합니다. @publication 에 2단계에서 사용된 게시 이름, @job_name 및 @password에 스냅샷 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode에 값 0을 지정하고 @publisher_login 및 @publisher_password에 SQL Server 로그인 정보도 지정해야 합니다. 이렇게 하면 게시에 대해 스냅샷 에이전트 작업이 만들어집니다.
게시에 아티클을 추가합니다. 자세한 내용은 아티클 정의를 참조하세요.
구독자에서 이 게시에 대한 업데이트 구독을 만듭니다.
지연 업데이트 구독을 지원하는 게시를 만들려면
필요한 경우 게시 데이터베이스에 대한 로그 판독기 에이전트 작업을 만듭니다.
게시 데이터베이스에 로그 판독기 에이전트 작업이 이미 있는 경우 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 로그인 정보도 지정해야 합니다.
필요한 경우 배포자에 대해 큐 판독기 에이전트를 만듭니다.
배포 데이터베이스에 큐 판독기 에이전트 작업이 이미 있는 경우 3단계로 진행합니다.
게시된 데이터베이스에 큐 판독기 에이전트 작업이 존재하는지 확실하지 않으면 배포 데이터베이스의 배포자에서 sp_helpqreader_agent(Transact-SQL)를 실행합니다. 결과 집합이 비어 있으면 큐 판독기 에이전트 작업을 만들어야 합니다.
배포자에서 sp_addqreader_agent(Transact-SQL)를 실행합니다. @job_name 및 @password에 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 이러한 자격 증명은 큐 판독기 에이전트가 게시자 및 구독자에 연결할 때 사용됩니다. 자세한 내용은 Replication Agent Security Model을 참조하세요.
sp_addpublication(Transact-SQL)을 실행하여 true 값을 매개 변수 @allow_queued_tran에 지정하고 pub wins, sub reinit 또는 sub wins 값을 @conflict_policy에 지정합니다.
게시자에서 sp_addpublication_snapshot(Transact-SQL)을 실행합니다. @publication 에 3단계에서 사용된 게시 이름, @snapshot_job_name 및 @password에 스냅샷 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode에 값 0을 지정하고 @publisher_login 및 @publisher_password에 SQL Server 로그인 정보도 지정해야 합니다. 이렇게 하면 게시에 대해 스냅샷 에이전트 작업이 만들어집니다.
게시에 아티클을 추가합니다. 자세한 내용은 아티클 정의를 참조하세요.
구독자에서 이 게시에 대한 업데이트 구독을 만듭니다.
지연 업데이트 구독을 허용하는 게시에 대한 충돌 정책을 변경하려면
- 게시 데이터베이스의 게시자에서 sp_changepublication(Transact-SQL)을 실행합니다. @property에 conflict_policy 값을 지정하고 @value에 원하는 충돌 정책 모드(pub wins, sub reinit 또는 sub wins)를 지정합니다.
예(Transact-SQL)
이 예제에서는 즉시 및 지연 업데이트 끌어오기 구독을 모두 지원하는 게시를 만듭니다.
-- 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'AdventureWorks2022';
SET @publication = N'AdvWorksProductTran';
SET @login = $(Login);
SET @password = $(Password);
USE [AdventureWorks2022]
-- 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 [AdventureWorks2022]
EXEC sp_addarticle
@publication = @publication,
@article = @article,
@source_table = @article,
@vertical_partition = N'false',
@type = N'logbased',
@source_owner = @owner,
@destination_owner = @owner;
GO