이 항목에서는 SQL Server Management Studio 또는 Transact-SQL을 사용하여 SQL Server 2014에서 트랜잭션 게시에 대한 구독을 업데이트하는 방법을 설명합니다.
비고
이 기능은 이후 버전의 Microsoft 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 로그인 정보를 제공해야 합니다.
매개 변수 @allow_sync_tran true 값을 지정하여 sp_addpublication(Transact-SQL)를 실행합니다.
게시자에서 sp_addpublication_snapshot(Transact-SQL)를 실행합니다. 2단계에서 @publication에 사용된 게시 이름과 @job_name 및 @password에 대해 실행되는 스냅샷 에이전트의 Windows 자격 증명을 지정합니다. 에이전트가 게시자에 연결할 때 SQL Server 인증을 사용하는 경우 0의 값을 @publisher_security_mode에 지정하고, SQL Server 로그인 정보로서 @publisher_login과 @publisher_password을 지정해야 합니다. 그러면 게시에 대한 스냅샷 에이전트 작업이 만들어집니다.
출판물에 기사를 추가합니다. 자세한 내용은 아티클 정의를 참조하세요.
구독자에게서 이 게시에 대한 구독 갱신을 만듭니다. 자세한 내용은 트랜잭션 게시에 업데이트할 수 있는 구독 만들기를 참조하세요.
대기열 업데이트 구독을 지원하는 발행물을 만들려면
필요한 경우 게시 데이터베이스에 대한 로그 판독기 에이전트 작업을 만듭니다.
게시 데이터베이스에 대한 로그 판독기 에이전트 작업이 이미 있는 경우 2단계로 진행합니다.
게시된 데이터베이스에 대한 로그 판독기 에이전트 작업이 있는지 확실하지 않은 경우 게시 데이터베이스의 게시자에서 sp_helplogreader_agent(Transact-SQL) 를 실행합니다. 결과 집합이 비어 있으면 로그 판독기 에이전트 작업을 만들어야 합니다.
게시자에서 sp_addlogreader_agent(Transact-SQL)를 실행합니다. 에이전트가 @job_name 및 @password에 대해 실행되는 Windows 자격 증명을 지정합니다. 에이전트가 게시자에 연결할 때 SQL Server 인증을 사용하는 경우 0의 값을 @publisher_security_mode에 지정하고, SQL Server 로그인 정보로서 @publisher_login과 @publisher_password을 지정해야 합니다.
필요한 경우 배포자에 대한 큐 판독기 에이전트 작업을 만듭니다.
배포 데이터베이스에 대한 큐 판독기 에이전트 작업이 이미 있는 경우 3단계로 진행합니다.
배포 데이터베이스에 대한 큐 판독기 에이전트 작업이 있는지 확실하지 않은 경우 배포 데이터베이스의 배포자에서 sp_helpqreader_agent(Transact-SQL) 를 실행합니다. 결과 집합이 비어 있으면 큐 판독기 에이전트 작업을 만들어야 합니다.
배포자에서 sp_addqreader_agent(Transact-SQL)를 실행합니다. 에이전트가 실행되는 @job_name 및 @password의 Windows 자격 증명을 지정하십시오. 이러한 자격 증명은 큐 판독기 에이전트가 게시자 및 구독자에 연결할 때 사용됩니다. 자세한 내용은 Replication Agent Security Model을 참조하세요.
매개 변수 @allow_queued_trantrue 값과 @conflict_policy 대한 pub wins, sub reinit 또는 sub wins 값을 지정하여 sp_addpublication(Transact-SQL)를 실행합니다.
게시자에서 sp_addpublication_snapshot(Transact-SQL)를 실행합니다. @publication에 대한 3단계에서 사용된 게시 이름과 @snapshot_job_name 및 @password에 대해 스냅샷 에이전트가 실행되는 Windows 자격 증명을 지정합니다. 에이전트가 게시자에 연결할 때 SQL Server 인증을 사용하는 경우 0의 값을 @publisher_security_mode에 지정하고, SQL Server 로그인 정보로서 @publisher_login과 @publisher_password을 지정해야 합니다. 그러면 게시에 대한 스냅샷 에이전트 작업이 만들어집니다.
출판물에 기사를 추가합니다. 자세한 내용은 아티클 정의를 참조하세요.
구독자에서 이 게시물에 대한 구독을 업데이트하세요. 자세한 내용은 트랜잭션 게시에 업데이트할 수 있는 구독 만들기를 참조하세요.
지연 업데이트 구독을 허용하는 게시에 대한 충돌 정책을 변경하려면
- 게시 데이터베이스의 게시자에서 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'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
또한 참조하십시오
지연 업데이트 충돌 해결 옵션 설정(SQL Server Management Studio)
트랜잭션 복제에 대한 게시 형식
트랜잭션 복제의 업데이트 가능한 구독
게시 만들기
트랜잭션 게시에 대해 업데이트 가능 구독 만들기
트랜잭션 복제의 업데이트 가능한 구독
스크립팅 변수와 함께 sqlcmd 사용