트랜잭션 게시에 대해 업데이트할 수 있는 구독 설정Enable Updating Subscriptions for Transactional Publications

이 항목에서는 SQL Server 2017SQL Server 2017 또는 SQL Server Management StudioSQL Server Management Studio 을 사용하여 Transact-SQLTransact-SQL에서 트랜잭션 게시에 대해 구독 업데이트를 설정하는 방법에 대해 설명합니다.This topic describes how to enable updating subscriptions for transactional publications in SQL Server 2017SQL Server 2017 by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

참고!NOTE!! Microsoft SQL Server의 이후 버전에서는 이 기능이 제거됩니다.This feature will be removed in a future version of Microsoft SQL Server. 새 개발 작업에서는 이 기능을 사용하지 않도록 하고, 현재 이 기능을 사용하는 응용 프로그램은 수정하세요.Avoid using this feature in new development work, and plan to modify applications that currently use this feature.

시작하기 전에 Before You Begin

보안 Security

가능한 경우 런타임 시 사용자에게 보안 자격 증명을 입력하라는 메시지가 표시됩니다.When possible, prompt users to enter security credentials at runtime. 자격 증명을 스크립트 파일에 저장해야 하는 경우에는 파일에 무단으로 액세스하지 못하도록 보안을 설정해야 합니다.If you must store credentials in a script file, you must secure the file to prevent unauthorized access.

SQL Server Management Studio 사용 Using SQL Server Management Studio

새 게시 마법사의 게시 유형 페이지에서 트랜잭션 게시에 대해 구독 업데이트를 설정합니다.Enable updating subscriptions for transactional publications on the Publication Type page of the New Publication Wizard.

구독 업데이트를 사용하려면 새 구독 마법사에서도 옵션을 구성해야 합니다.To use updating subscriptions, you must also configure options in the New Subscription Wizard.

구독 업데이트를 설정하려면To enable updating subscriptions

  1. 새 게시 마법사의 게시 유형 페이지에서 업데이트할 수 있는 구독이 있는 트랜잭션 게시를 선택합니다.On the Publication Type page of the New Publication Wizard, select Transactional publication with updatable subscriptions.

  2. 에이전트 보안 페이지에서 스냅숏 에이전트, 로그 판독기 에이전트 및 큐 판독기 에이전트에 대한 보안 설정을 지정합니다.On the Agent Security page, specify security settings for the Queue Reader Agent in addition to the Snapshot Agent and Log Reader Agent. 큐 판독기 에이전트가 실행되는 계정에 필요한 사용 권한에 대한 자세한 내용은 Replication Agent Security Model을 참조하세요.For more information about the permissions required for the account under which the Queue Reader Agent runs, see Replication Agent Security Model.

    참고: 즉시 업데이트 구독만 사용하는 경우에도 큐 판독기 에이전트가 구성됩니다.NOTE: The Queue Reader Agent is configured even if you use only immediate updating subscriptions.

Transact-SQL 사용 Using Transact-SQL

복제 저장 프로시저를 사용하여 프로그래밍 방식으로 트랜잭션 게시를 만들 때 즉시 업데이트 구독 또는 지연 업데이트 구독을 설정할 수 있습니다.When creating a transactional publication programmatically using replication stored procedures, you can enable either immediate or queued updating subscriptions.

즉시 업데이트 구독을 지원하는 게시를 만들려면To create a publication that supports immediate updating subscriptions

  1. 필요한 경우 게시 데이터베이스에 대한 로그 판독기 에이전트 작업을 만듭니다.If necessary, create a Log Reader Agent job for the publication database.

    • 게시 데이터베이스에 대한 로그 판독기 에이전트 작업이 이미 존재하면 2단계를 실행합니다.If a Log Reader Agent job already exists for the publication database, proceed to step 2.

    • 게시된 데이터베이스에 대해 로그 판독기 에이전트 작업이 존재하는지 확실하지 않으면 게시 데이터베이스의 게시자에서 sp_helplogreader_agent(Transact-SQL)를 실행합니다.If you are unsure whether a Log Reader Agent job exists for a published database, execute sp_helplogreader_agent (Transact-SQL) at the Publisher on the publication database. 결과 집합이 비어 있으면 로그 판독기 에이전트 작업을 만들어야 합니다.If the result set is empty, a Log Reader Agent job must be created.

    • 게시자에서 sp_addlogreader_agent(Transact-SQL)를 실행합니다.At the publisher, execute sp_addlogreader_agent (Transact-SQL). @job_name@password에 에이전트가 실행되는 MicrosoftMicrosoft Windows 자격 증명을 지정합니다.Specify the MicrosoftMicrosoft Windows credentials under which the agent runs for @job_name and @password. 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode 에 값 @publisher_security_mode 을 지정하고 MicrosoftMicrosoft SQL ServerSQL Server@publisher_login @password @publisher_password에서 트랜잭션 게시에 대해 구독 업데이트를 설정하는 방법에 대해 설명합니다.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the MicrosoftMicrosoft SQL ServerSQL Server login information for @publisher_login and @publisher_password.

  2. @allow_sync_tran 매개 변수에 true 값을 지정하여 sp_addpublication(Transact-SQL)을 실행합니다.Execute sp_addpublication (Transact-SQL), specifying a value of true for the parameter @allow_sync_tran.

  3. 게시자에서 sp_addpublication_snapshot(Transact-SQL)을 실행합니다.At the Publisher, execute sp_addpublication_snapshot (Transact-SQL). @publication에 2단계에서 사용된 게시 이름을, @job_name@password에 스냅숏 에이전트를 실행하는 데 사용되는 Windows 자격 증명을 지정합니다.Specify the publication name used in step 2 for @publication and the Windows credentials under which the Snapshot Agent runs for @job_name and @password. 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode 에 값 @publisher_security_mode 을 지정하고 SQL ServerSQL Server@publisher_login @password @publisher_password에서 트랜잭션 게시에 대해 구독 업데이트를 설정하는 방법에 대해 설명합니다.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password. 이렇게 하면 게시에 대해 스냅숏 에이전트 작업이 만들어집니다.This creates a Snapshot Agent job for the publication.

  4. 아티클을 게시에 추가합니다.Add articles to the publication. 자세한 내용은 Define an Article을 참조하세요.For more information, see Define an Article.

  5. 구독자에서 이 게시에 대한 업데이트 구독을 만듭니다.At the Subscriber, create an updating subscription to this publication.

지연 업데이트 구독을 지원하는 게시를 만들려면To create a publication that supports queued updating subscriptions

  1. 필요한 경우 게시 데이터베이스에 대한 로그 판독기 에이전트 작업을 만듭니다.If necessary, create a Log Reader Agent job for the publication database.

    • 게시 데이터베이스에 대한 로그 판독기 에이전트 작업이 이미 존재하면 2단계를 실행합니다.If a Log Reader Agent job already exists for the publication database, proceed to step 2.

    • 게시된 데이터베이스에 대해 로그 판독기 에이전트 작업이 존재하는지 확실하지 않으면 게시 데이터베이스의 게시자에서 sp_helplogreader_agent(Transact-SQL)를 실행합니다.If you are unsure whether a Log Reader Agent job exists for a published database, execute sp_helplogreader_agent (Transact-SQL) at the Publisher on the publication database. 결과 집합이 비어 있으면 로그 판독기 에이전트 작업을 만들어야 합니다.If the result set is empty, then a Log Reader Agent job must be created.

    • 게시자에서 sp_addlogreader_agent(Transact-SQL)를 실행합니다.At the publisher, execute sp_addlogreader_agent (Transact-SQL). @job_name@password에 에이전트가 실행되는 Windows 자격 증명을 지정합니다.Specify the Windows credentials under which the agent runs for @job_name and @password. 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode 에 값 @publisher_security_mode 을 지정하고 SQL ServerSQL Server@publisher_login @password @publisher_password에서 트랜잭션 게시에 대해 구독 업데이트를 설정하는 방법에 대해 설명합니다.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password.

  2. 필요한 경우 배포자에 대한 큐 판독기 에이전트 작업을 만듭니다.If necessary, create a Queue Reader Agent job for the Distributor.

    • 배포 데이터베이스에 대한 큐 판독기 에이전트 작업이 이미 존재하면 3단계를 실행합니다.If a Queue Reader Agent job already exists for the distribution database, proceed to step 3.

    • 배포 데이터베이스에 대해 큐 판독기 에이전트 작업이 존재하는지 확실하지 않으면 배포 데이터베이스의 배포자에서 sp_helpqreader_agent(Transact-SQL)를 실행합니다.If you are unsure whether a Queue Reader Agent job exists for the distribution database, execute sp_helpqreader_agent (Transact-SQL) at the Distributor on the distribution database. 결과 집합이 비어 있으면 큐 판독기 에이전트 작업을 만들어야 합니다.If the result set is empty, then a Queue Reader Agent job must be created.

    • 배포자에서 sp_addqreader_agent(Transact-SQL)를 실행합니다.At the Distributor, execute sp_addqreader_agent (Transact-SQL). @job_name@password에 에이전트가 실행되는 Windows 자격 증명을 지정합니다.Specify the Windows credentials under which the agent runs for @job_name and @password. 이러한 자격 증명은 큐 판독기 에이전트가 게시자 및 구독자에 연결할 때 사용됩니다.These credentials are used when the Queue Reader Agent connects to the Publisher and Subscriber. 자세한 내용은 Replication Agent Security Model을 참조하세요.For more information, see Replication Agent Security Model.

  3. @allow_queued_tran 매개 변수에 true 값, @conflict_policypub wins, sub reinit 또는 sub wins 값을 지정하여 sp_addpublication(Transact-SQL)을 실행합니다.Execute sp_addpublication (Transact-SQL), specifying a value of true for the parameter @allow_queued_tran and a value of pub wins, sub reinit, or sub wins for @conflict_policy.

  4. 게시자에서 sp_addpublication_snapshot(Transact-SQL)을 실행합니다.At the Publisher, execute sp_addpublication_snapshot (Transact-SQL). @publication에 3단계에서 사용된 게시 이름을, @snapshot_job_name@password에 스냅숏 에이전트를 실행하는 데 사용되는 Windows 자격 증명을 지정합니다.Specify the publication name used in step 3 for @publication and the Windows credentials under which the Snapshot Agent runs for @snapshot_job_name and @password. 게시자에 연결할 때 에이전트가 SQL Server 인증을 사용하면 @publisher_security_mode 에 값 @publisher_security_mode 을 지정하고 SQL ServerSQL Server@publisher_login @password @publisher_password에서 트랜잭션 게시에 대해 구독 업데이트를 설정하는 방법에 대해 설명합니다.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password. 이렇게 하면 게시에 대해 스냅숏 에이전트 작업이 만들어집니다.This creates a Snapshot Agent job for the publication.

  5. 아티클을 게시에 추가합니다.Add articles to the publication. 자세한 내용은 Define an Article을 참조하세요.For more information, see Define an Article.

  6. 구독자에서 이 게시에 대한 업데이트 구독을 만듭니다.At the Subscriber, create an updating subscription to this publication.

지연 업데이트 구독을 허용하는 게시에 대한 충돌 정책을 변경하려면To change the conflict policy for a publication that allows queued updating subscriptions

  1. 게시 데이터베이스의 게시자에서 sp_changepublication(Transact-SQL)을 실행합니다.At the Publisher on the publication database, execute sp_changepublication (Transact-SQL). @propertyconflict_policy 값을 지정하고 @value에 원하는 충돌 정책 모드(pub wins, sub reinit 또는 sub wins)를 지정합니다.Specify a value of conflict_policy for @property and the desired conflict policy mode of pub wins, sub reinit, or sub wins for @value.

예(Transact-SQL) Example (Transact-SQL)

이 예에서는 즉시 업데이트 끌어오기 구독과 지연 업데이트 끌어오기 구독을 모두 지원하는 게시를 만듭니다.This example creates a publication that supported both immediate and queued updating pull subscriptions.

-- 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'AdventureWorks2012'; 
SET @publication = N'AdvWorksProductTran'; 
SET @login = $(Login); 
SET @password = $(Password); 

USE [AdventureWorks]
-- 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 [AdventureWorks2012]
EXEC sp_addarticle 
	@publication = @publication, 
	@article = @article, 
	@source_table = @article, 
	@vertical_partition = N'false', 
	@type = N'logbased',
	@source_owner = @owner, 
	@destination_owner = @owner;
GO

관련 항목:See Also

지연 업데이트 충돌 해결 옵션 설정(SQL Server Management Studio) Set Queued Updating Conflict Resolution Options (SQL Server Management Studio)
트랜잭션 복제에 대한 게시 유형 Publication Types for Transactional Replication
Updatable Subscriptions for Transactional Replication Updatable Subscriptions for Transactional Replication
게시 만들기 Create a Publication
Create an Updatable Subscription to a Transactional Publication Create an Updatable Subscription to a Transactional Publication
Updatable Subscriptions for Transactional Replication Updatable Subscriptions for Transactional Replication
스크립팅 변수와 함께 sqlcmd 사용Use sqlcmd with Scripting Variables