Replication System Stored Procedures ConceptsReplication System Stored Procedures Concepts

이 항목은 다음에 적용됩니다.예SQL Server(2008부터)아니요Azure SQL Database아니요Azure SQL Data Warehouse 아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SQL ServerSQL Server에서 복제 토폴로지의 사용자 구성 가능한 모든 기능에 대한 프로그래밍 방식 액세스는 시스템 저장 프로시저를 통해 제공됩니다.In SQL ServerSQL Server, programmatic access to all of the user-configurable functionality in a replication topology is provided by system stored procedures. 저장 프로시저는 SQL Server Management StudioSQL Server Management Studio나 sqlcmd 명령줄 유틸리티를 사용하여 개별적으로 실행할 수 있지만 복제 태스크의 논리적 시퀀스를 수행하기 위해 실행할 수 있는 Transact-SQLTransact-SQL 스크립트 파일을 작성하는 것이 효율적일 수 있습니다.While stored procedures may be executed individually using the SQL Server Management StudioSQL Server Management Studio or the sqlcmd command-line utility, it may be beneficial to write Transact-SQLTransact-SQL script files that can be executed to perform a logical sequence of replication tasks.

복제 태스크 스크립트를 작성하면 다음과 같은 이점이 있습니다.Scripting replication tasks provides the following benefits:

  • 복제 토폴로지 배포에 사용한 단계의 영구 복사본을 유지할 수 있습니다.Keeps a permanent copy of the steps used to deploy your replication topology.

  • 스크립트 하나로 여러 구독자를 구성할 수 있습니다.Uses a single script to configure multiple Subscribers.

  • 코드를 평가하고 이해하고 변경하거나 문제를 해결할 수 있게 하여 새로운 데이터베이스 관리자를 신속하게 교육할 수 있습니다.Quickly educates new database administrators by enabling them to evaluate, understand, change, or troubleshoot the code.

    중요

    스크립트는 보안상 위험할 수 있습니다. 사용자 몰래 또는 사용자 개입 없이 시스템 함수를 호출할 수 있으며 보안 자격 증명을 일반 텍스트로 포함할 수도 있습니다.Scripts can be the source of security vulnerabilities; they can invoke system functions without user knowledge or intervention and may contain security credentials in plain text. 스크립트를 사용하기 전에 스크립트에 보안 문제가 있는지 확인하십시오.Review scripts for security issues before you use them.

복제 스크립트 만들기Creating Replication Scripts

복제의 관점에서 스크립트는 각 문이 복제 저장 프로시저를 실행하는 일련의 Transact-SQLTransact-SQL 문입니다.From the standpoint of replication, a script is a series of one or more Transact-SQLTransact-SQL statements where each statement executes a replication stored procedure. 스크립트는 sqlcmd 유틸리티를 사용하여 실행할 수 있는 텍스트 파일로, 주로 .sql 파일 확장명을 사용합니다.Scripts are text files, often with a .sql file extension, that can be run using the sqlcmd utility. 스크립트 파일을 실행하면 sqlcmd 유틸리티는 파일에 저장된 SQL 문을 실행합니다.When a script file is run, the utility executes the SQL statements stored in the file. 마찬가지로 SQL Server Management StudioSQL Server Management Studio 프로젝트의 쿼리 개체로 스크립트를 저장할 수 있습니다.Similarly, a script can be stored as a query object in a SQL Server Management StudioSQL Server Management Studio project.

복제 스크립트는 다음과 같은 방법으로 만들 수 있습니다.Replication scripts can be created in the following ways:

  • 스크립트를 직접 만듭니다.Manually create the script.

  • 복제 마법사에 제공되는 스크립트 생성 기능을 사용하거나Use the script generation features that are provided in the replication wizards or

  • SQL Server Management StudioSQL Server Management Studio.. 자세한 내용은 Scripting Replication을 참조하세요.For more information, see Scripting Replication.

  • RMO(복제 관리 개체)를 사용하여 RMO 개체를 만드는 스크립트를 프로그래밍 방식으로 생성합니다.Use Replication Management Objects (RMOs) to programmatically generate the script to create an RMO object.

    복제 스크립트를 직접 만들 경우에는 다음과 같은 사항을 고려해야 합니다.When you manually create replication scripts, keep the following considerations in mind:

  • Transact-SQLTransact-SQL 스크립트에는 일괄 처리가 하나 이상 있습니다. scripts have one or more batches. GO 명령은 일괄 처리의 끝을 나타냅니다.The GO command signals the end of a batch. Transact-SQLTransact-SQL 스크립트에 GO 명령이 없으면 스크립트가 단일 일괄 처리로 실행됩니다.If a Transact-SQLTransact-SQL script does not have any GO commands, it is executed as a single batch.

  • 일괄 처리 하나에 복제 저장 프로시저를 여러 개 실행할 경우에는 첫 번째 프로시저 이후의 모든 프로시저 앞에 EXECUTE 키워드를 사용해야 합니다.When executing multiple replication stored procedures in a single batch, after the first procedure, all subsequent procedures in the batch must be preceded by the EXECUTE keyword.

  • 일괄 처리에 포함된 모든 저장 프로시저가 컴파일되어야 일괄 처리가 실행됩니다.All stored procedures in a batch must compile before a batch will execute. 그러나 일괄 처리가 컴파일되고 실행 계획이 작성된 후에는 런타임 오류가 발생하거나 발생하지 않을 수 있습니다.However, once the batch has been compiled, and an execution plan has been created, a run-time error may or may not occur.

  • 복제를 구성하는 스크립트를 만들 때는 스크립트 파일에 보안 자격 증명이 저장되지 않도록 Windows 인증을 사용하는 것이 좋습니다.When creating scripts to configure replication, you should use Windows Authentication to avoid storing security credentials in the script file. 자격 증명을 스크립트 파일에 저장해야 하는 경우에는 파일에 무단으로 액세스하지 못하도록 보안을 설정해야 합니다.If you must store credentials in a script file, you must secure the file to prevent unauthorized access.

복제 스크립트 예제Sample Replication Script

다음 스크립트를 실행하여 서버에 게시 및 배포를 설정할 수 있습니다.The following script can be executed to setup publishing and distribution on a server.

-- 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".  

-- Install the Distributor and the distribution database.  
DECLARE @distributor AS sysname;  
DECLARE @distributionDB AS sysname;  
DECLARE @publisher AS sysname;  
DECLARE @directory AS nvarchar(500);  
DECLARE @publicationDB AS sysname;  
-- Specify the Distributor name.  
SET @distributor = $(DistPubServer);  
-- Specify the distribution database.  
SET @distributionDB = N'distribution';  
-- Specify the Publisher name.  
SET @publisher = $(DistPubServer);  
-- Specify the replication working directory.  
SET @directory = N'\\' + $(DistPubServer) + '\repldata';  
-- Specify the publication database.  
SET @publicationDB = N'AdventureWorks2012';   

-- Install the server MYDISTPUB as a Distributor using the defaults,  
-- including autogenerating the distributor password.  
USE master  
EXEC sp_adddistributor @distributor = @distributor;  

-- Create a new distribution database using the defaults, including  
-- using Windows Authentication.  
USE master  
EXEC sp_adddistributiondb @database = @distributionDB,   
    @security_mode = 1;  
GO  

-- Create a Publisher and enable AdventureWorks2012 for replication.  
-- Add MYDISTPUB as a publisher with MYDISTPUB as a local distributor  
-- and use Windows Authentication.  
DECLARE @distributionDB AS sysname;  
DECLARE @publisher AS sysname;  
-- Specify the distribution database.  
SET @distributionDB = N'distribution';  
-- Specify the Publisher name.  
SET @publisher = $(DistPubServer);  

USE [distribution]  
EXEC sp_adddistpublisher @publisher=@publisher,   
    @distribution_db=@distributionDB,   
    @security_mode = 1;  
GO  

그런 다음 이 스크립트를 로컬에 instdistpub.sql로 저장하여 필요할 때 실행하거나 다시 실행할 수 있습니다.This script can then be saved locally as instdistpub.sql so that it can be run or rerun when needed.

위 스크립트에는 SQL ServerSQL Server 온라인 설명서의 여러 복제 코드 예제에 사용된 sqlcmd 스크립팅 변수가 포함되어 있습니다.The previous script includes sqlcmd scripting variables, which are used in many of the replication code samples in SQL ServerSQL Server Books Online. 스크립팅 변수는 $(MyVariable) 구문을 사용하여 정의되며Scripting variables are defined by using $(MyVariable) syntax. 변수 값은 명령줄이나 SQL Server Management StudioSQL Server Management Studio에서 스크립트에 전달할 수 있습니다.Values for variables can be passed to a script at the command line or in SQL Server Management StudioSQL Server Management Studio. 자세한 내용은 이 항목의 다음 섹션인 "복제 스크립트 실행"을 참조하십시오.For more information, see the next section in this topic, "Executing Replication Scripts."

복제 스크립트 실행Executing Replication Scripts

복제 스크립트를 만든 후에는 다음 방법 중 하나로 실행할 수 있습니다.Once created, a replication script can be executed in one of the following ways:

SQL Server Management Studio에서 SQL 쿼리 파일 만들기Creating a SQL Query File in SQL Server Management Studio

SQL Server Management StudioSQL Server Management Studio 프로젝트에서 SQL 쿼리 파일로 복제 Transact-SQLTransact-SQL 스크립트 파일을 만들 수 있습니다.A replication Transact-SQLTransact-SQL script file can be created as a SQL Query file in a SQL Server Management StudioSQL Server Management Studio project. 스크립트를 작성하면 이 쿼리 파일에 대한 데이터베이스에 연결하여 스크립트를 실행할 수 있습니다.After the script is written, a connection can be made to the database for this query file and the script can be executed. SQL Server Management StudioSQL Server Management Studio를 사용하여 Transact-SQLTransact-SQL 스크립트를 만드는 방법은 [쿼리 및 텍스트 편집기(SQL Server Management Studio)](../../../relational-databases/scripting/query-and-text-editors-sql-server-management-studio.md)를 참조하세요.For more information about how to create Transact-SQLTransact-SQL scripts by using SQL Server Management StudioSQL Server Management Studio, see Query and Text Editors (SQL Server Management Studio).

스크립팅 변수가 포함된 스크립트를 사용하려면 SQL Server Management StudioSQL Server Management Studiosqlcmd 모드에서 실행 중이어야 합니다.To use a script that includes scripting variables, SQL Server Management StudioSQL Server Management Studio must be running in sqlcmd mode. sqlcmd 모드에서는 쿼리 편집기에서 sqlcmd와 관련된 추가적인 구문(예: 변수 값에 사용되는 :setvar)을 사용할 수 있습니다.In sqlcmd mode, the Query Editor accepts additional syntax specific to sqlcmd, such as :setvar, which is used to a value for a variable. sqlcmd 모드에 대한 자세한 내용은 쿼리 편집기로 SQLCMD 스크립트 편집을 참조하세요.For more information about sqlcmd mode, see Edit SQLCMD Scripts with Query Editor. 다음 스크립트에서는 :setvar를 사용하여 $(DistPubServer) 변수의 값을 제공합니다.In the following script, :setvar is used to provide a value for the $(DistPubServer) variable.

:setvar DistPubServer N'MyPublisherAndDistributor';  

-- Install the Distributor and the distribution database.  
DECLARE @distributor AS sysname;  
DECLARE @distributionDB AS sysname;  
DECLARE @publisher AS sysname;  
DECLARE @directory AS nvarchar(500);  
DECLARE @publicationDB AS sysname;  
-- Specify the Distributor name.  
SET @distributor = $(DistPubServer);  
-- Specify the distribution database.  
SET @distributionDB = N'distribution';  
-- Specify the Publisher name.  
SET @publisher = $(DistPubServer);  

--  
-- Additional code goes here  
--  

명령줄에서 sqlcmd 유틸리티 사용Using the sqlcmd Utility from the Command Line

다음 예제에서는 명령줄에서 sqlcmd 유틸리티를 사용하여 instdistpub.sql 스크립트 파일을 실행하는 방법을 보여 줍니다.The following example shows how the command line is used to execute the instdistpub.sql script file using the sqlcmd utility:

sqlcmd.exe -E -S sqlserverinstance -i C:\instdistpub.sql -o C:\output.log -v DistPubServer="N'MyDistributorAndPublisher'"  

이 예에서 -E 스위치는 SQL ServerSQL Server에 연결할 때 Windows 인증을 사용함을 나타냅니다.In this example, the -E switch indicates that Windows Authentication is used when connecting to SQL ServerSQL Server. Windows 인증을 사용하면 스크립트 파일에 사용자 이름과 암호를 저장하지 않아도 됩니다.When using Windows Authentication, there is no need to store a username and password in the script file. 스크립트 파일의 경로와 이름은 -i 스위치로 지정하고 출력 파일의 이름은 -o 스위치(이 스위치를 사용하면 SQL ServerSQL Server의 출력이 콘솔 대신 이 파일에 작성됨)로 지정합니다.The name and path of the script file is specified by the -i switch and the name of the output file is specified by the -o switch (output from SQL ServerSQL Server is written to this file instead of the console when this switch is used). sqlcmd 유틸리티를 사용하면 -v 스위치를 사용하여 런타임에 스크립팅 변수를 Transact-SQLTransact-SQL 스크립트에 전달할 수 있습니다.The sqlcmd utility enables you to pass scripting variables to a Transact-SQLTransact-SQL script at runtime using the -v switch. 이 예제에서 sqlcmd는 실행되기 전에 스크립트에서 $(DistPubServer)의 모든 인스턴스를 N'MyDistributorAndPublisher' 값으로 바꿉니다.In this example, sqlcmd replaces every instance of $(DistPubServer) in the script with the value N'MyDistributorAndPublisher' before execution.

참고

-X 스위치는 스크립팅 변수를 사용하지 않도록 설정합니다.The -X switch disables scripting variables.

배치 파일로 태스크 자동화Automating Tasks in a Batch File

배치 파일을 사용하면 복제 관리 태스크, 복제 동기화 태스크 및 기타 태스크를 이 배치 파일에서 자동화할 수 있습니다.By using a batch file, replication administration tasks, replication synchronization tasks, and other tasks can be automated in the same batch file. 다음 배치 파일은 sqlcmd 유틸리티를 사용하여 구독 데이터베이스를 삭제한 후 다시 만들고 병합 끌어오기 구독을 추가합니다.The following batch file uses the sqlcmd utility to drop and recreate the subscription database and add a merge pull subscription. 그런 다음 이 파일은 병합 에이전트를 호출하여 새 구독을 동기화합니다.Then the file invokes the merge agent to synchronize the new subscription:

REM ----------------------Script to synchronize merge subscription ----------------------  
REM -- Creates subscription database and   
REM -- synchronizes the subscription to MergeSalesPerson.  
REM -- Current computer acts as both Publisher and Subscriber.  
REM -------------------------------------------------------------------------------------  

SET Publisher=%computername%  
SET Subscriber=%computername%  
SET PubDb=AdventureWorks  
SET SubDb=AdventureWorksReplica  
SET PubName=AdvWorksSalesOrdersMerge  

REM -- Drop and recreate the subscription database at the Subscriber  
sqlcmd /S%Subscriber% /E /Q"USE master IF EXISTS (SELECT * FROM sysdatabases WHERE name='%SubDb%' ) DROP DATABASE %SubDb%"  
sqlcmd /S%Subscriber% /E /Q"USE master CREATE DATABASE %SubDb%"  

REM -- Add a pull subscription at the Subscriber  
sqlcmd /S%Subscriber% /E /Q"USE %SubDb% EXEC sp_addmergepullsubscription @publisher = %Publisher%, @publication = %PubName%, @publisher_db = %PubDb%"  
sqlcmd /S%Subscriber% /E /Q"USE %SubDb%  EXEC sp_addmergepullsubscription_agent @publisher = %Publisher%, @publisher_db = %PubDb%, @publication = %PubName%, @subscriber = %Subscriber%, @subscriber_db = %SubDb%, @distributor = %Publisher%"  

REM -- This batch file starts the merge agent at the Subscriber to   
REM -- synchronize a pull subscription to a merge publication.  
REM -- The following must be supplied on one line.  
"\Program Files\Microsoft SQL Server\130\COM\REPLMERG.EXE"  -Publisher  %Publisher% -Subscriber  %Subscriber%  -Distributor %Publisher%  -PublisherDB  %PubDb% -SubscriberDB %SubDb% -Publication %PubName% -PublisherSecurityMode 1 -OutputVerboseLevel 1  -Output  -SubscriberSecurityMode 1  -SubscriptionType 1 -DistributorSecurityMode 1 -Validate 3  

일반적인 복제 태스크 스크립팅Scripting Common Replication Tasks

다음은 시스템 저장 프로시저를 사용하여 스크립트로 작성할 수 있는 가장 일반적인 복제 태스크입니다.The following are some of the most common replication tasks can be scripted using system stored procedures:

  • 게시 및 배포 구성Configuring publishing and distribution

  • 게시자 및 배포자 속성 수정Modifying Publisher and Distributor properties

  • 게시 및 배포 해제Disabling publishing and distribution

  • 게시 만들기 및 아티클 정의Creating publications and defining articles

  • 게시 및 아티클 삭제Deleting publications and articles

  • 끌어오기 구독 만들기Creating a pull subscription

  • 끌어오기 구독 수정Modifying a pull subscription

  • 끌어오기 구독 삭제Deleting a pull subscription

  • 밀어넣기 구독 만들기Creating a push subscription

  • 밀어넣기 구독 수정Modifying a push subscription

  • 밀어넣기 구독 삭제Deleting a push subscription

  • 끌어오기 구독 동기화Synchronizing a pull subscription

관련 항목:See Also

복제 프로그래밍 개념 Replication Programming Concepts
복제 저장 프로시저(Transact-SQL) Replication Stored Procedures (Transact-SQL)
복제 스크립팅 Scripting Replication