Replication Management Objects ConceptsReplication Management Objects 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

RMO(복제 관리 개체)는 SQL ServerSQL Server의 복제 기능을 캡슐화하는 관리 코드 어셈블리로,Replication Management Objects (RMO) is a managed code assembly that encapsulates replication functionalities for SQL ServerSQL Server. Microsoft.SqlServer.Replication 네임스페이스를 통해 구현됩니다.RMO is implemented by the Microsoft.SqlServer.Replication namespace.

다음 섹션의 항목에서는 RMO를 사용하여 복제 태스크를 프로그래밍 방식으로 제어하는 방법에 대해 설명합니다.The topics in the following sections describe how you can use RMO to programmatically control replication tasks:

배포 구성Configure Distribution
이 섹션의 항목에서는 RMO를 사용하여 게시 및 배포를 구성하는 방법을 보여 줍니다.Topics in this section show how to use RMO to configure publishing and distribution.

게시 및 아티클 만들기, 수정 및 삭제(복제)Create, Modify, and Delete Publications and Articles (Replication)
이 섹션의 항목에서는 RMO를 사용하여 게시 및 아티클을 작성, 삭제 및 수정하는 방법을 보여 줍니다.Topics in this section show how to use RMO to create, delete, and modify publications and articles.

게시 구독Subscribe to Publications
이 섹션의 항목에서는 RMO를 사용하여 구독을 작성, 삭제 및 수정하는 방법을 보여 줍니다.Topics in this section show how to use RMO to create, delete, and modify subscriptions.

복제 토폴로지 보안 설정Secure a Replication Topology
이 섹션의 항목에서는 RMO를 사용하여 보안 설정을 보고 수정하는 방법을 보여 줍니다.Topics in this section show how to use RMO to view and modify security settings.

구독 동기화(복제)Synchronize Subscriptions (Replication)
이 섹션의 항목에서는 구독을 동기화하는 방법을 보여 줍니다.Topics in this section show how to synchronize subscriptions.

복제 모니터링Monitoring Replication
이 섹션의 항목에서는 프로그래밍 방식으로 복제 토폴로지를 모니터링하는 방법을 보여 줍니다.Topics in this section show how to programmatically monitor a replication topology.

RMO 프로그래밍 소개Introduction to RMO Programming

RMO는 SQL ServerSQL Server 복제의 모든 측면을 프로그래밍하기 위해 디자인되었습니다.RMO is designed for programming all aspects of SQL ServerSQL Server replication. RMO 네임스페이스는 Microsoft.SqlServer.Replication이며 이 네임스페이스는 MicrosoftMicrosoft .NET Framework 어셈블리인 Microsoft.SqlServer.Rmo.dll을 통해 구현됩니다.The RMO namespace is Microsoft.SqlServer.Replication, and it is implemented by the Microsoft.SqlServer.Rmo.dll, which is a MicrosoftMicrosoft .NET Framework assembly. Microsoft.SqlServer.Replication 네임스페이스에 속하는 Microsoft.SqlServer.Replication.dll 어셈블리는 다양한 복제 에이전트(스냅숏 에이전트, 배포 에이전트 및 병합 에이전트)를 프로그래밍하는 데 필요한 관리되는 코드 인터페이스를 구현합니다.The Microsoft.SqlServer.Replication.dll assembly, which also belongs to the Microsoft.SqlServer.Replication namespace, implements a managed code interface for programming the various replication agents (Snapshot Agent, Distribution Agent, and Merge Agent). 이 어셈블리의 클래스는 RMO에서 액세스하여 구독을 동기화하는 데 사용될 수 있습니다.Its classes can be accessed from RMO to synchronize subscriptions. Microsoft.SqlServer.Replication.BusinessLogicSupport.dll 어셈블리를 통해 구현되는 Microsoft.SqlServer.Replication.BusinessLogicSupport 네임스페이스의 클래스는 병합 복제에 대한 사용자 지정 비즈니스 논리를 만드는 데 사용됩니다.Classes in the Microsoft.SqlServer.Replication.BusinessLogicSupport namespace, implemented by the Microsoft.SqlServer.Replication.BusinessLogicSupport.dll assembly, are used to create custom business logic for merge replication. 이 어셈블리는 RMO에 종속되지 않습니다.This assembly is independent from RMO.

RMO를 기초로 응용 프로그램 배포Deploying Applications Based on RMO

RMO는 SQL Server Compact를 제외한 모든 버전의 SQL ServerSQL Server에 포함된 복제 구성 요소와 클라이언트 연결 구성 요소를 필요로 하기 때문에RMO depends on the replication components and client connectivity components that are included with all versions of SQL ServerSQL Server except SQL Server Compact. RMO를 기초로 응용 프로그램을 배포하려면 복제 구성 요소와 클라이언트 연결 구성 요소가 포함된 SQL ServerSQL Server 버전을 응용 프로그램을 실행할 컴퓨터에 설치해야 합니다.To deploy an application based on RMO, you must install a version of SQL ServerSQL Server that includes replication components and client connectivity components on the computer on which the application will run.

RMO 시작Getting Started with RMO

이 섹션에서는 MicrosoftMicrosoft Visual Studio를 사용하여 간단한 RMO 프로젝트를 시작하는 방법에 대해 설명합니다.This section describes how to start a simple RMO project using MicrosoftMicrosoft Visual Studio.

새 Microsoft Visual C# 프로젝트를 만들려면To create a new Microsoft Visual C# project

  1. Visual Studio를 시작합니다.Start Visual Studio.

  2. 파일 메뉴에서 새 프로젝트를 클릭합니다.On the File menu, click NewProject. 새 프로젝트 대화 상자가 나타납니다.The New Project dialog box appears.

  3. 프로젝트 형식 대화 상자에서 Visual C# 프로젝트를 선택합니다.In the Project Types dialog box, select Visual C# Projects. 템플릿 창에서 Windows 응용 프로그램을 선택합니다.In the Templates pane, select Windows Application.

  4. (옵션) 이름에 새 응용 프로그램의 이름을 입력합니다.(Optional) In Name, type the name of the new application.

  5. 확인을 클릭하여 Visual C# Windows 템플릿을 로드합니다.Click OK to load the Visual C# Windows template.

  6. 프로젝트 메뉴에서 참조 추가 항목을 선택합니다.On the Project menu, select Add Reference item. 참조 추가 대화 상자가 나타납니다.The Add Reference dialog box appears.

  7. .NET 탭의 목록에서 다음과 같은 어셈블리를 선택한 후 확인을 클릭합니다.Select the following assemblies from the list on the .NET tab, and then click OK.

    • Microsoft.SqlServer.Replication .NET Programming InterfaceMicrosoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.ConnectionInfo

    • Replication Agent LibraryReplication Agent Library

    참고

    둘 이상의 파일을 선택하려면 Ctrl 키를 사용합니다.Use the CTRL key to select more than one file.

  8. (옵션) 6단계를 반복합니다.(Optional) Repeat step 6. 찾아보기 탭을 클릭하고 C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM으로 이동한 다음 Microsoft.SqlServer.Replication.BusinessLogicSupport.dll을 선택하고 확인을 클릭합니다.Click the Browse tab, navigate to C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, and then click OK.

  9. 보기 메뉴에서 코드를 클릭합니다.On the View menu, click Code.

  10. 코드에서 RMO 네임스페이스의 형식을 한정하기 위해 네임스페이스 문 앞에 다음 using 문을 입력합니다.In the code, before the namespace statement, type the following using statements to qualify the types in the RMO namespaces:

    // These namespaces are required.  
    using Microsoft.SqlServer.Replication;  
    using Microsoft.SqlServer.Management.Common;  
    // This namespace is only used when creating custom business  
    // logic for merge replication.  
    using Microsoft.SqlServer.Replication.BusinessLogicSupport;   
    

새 Microsoft Visual Basic .NET 프로젝트를 만들려면To create a new Microsoft Visual Basic .NET project

  1. Visual Studio를 시작합니다.Start Visual Studio.

  2. 파일 메뉴에서 새 프로젝트를 선택합니다.On the File menu, select New Project. 새 프로젝트 대화 상자가 나타납니다.The New Project dialog box appears.

  3. 프로젝트 형식 창에서 Visual Basic을 선택합니다.In the Project Types pane, select Visual Basic. 템플릿 창에서 Windows 응용 프로그램을 선택합니다.In the Templates pane, select Windows Application.

  4. (옵션) 이름 상자에 새 응용 프로그램의 이름을 입력합니다.(Optional) In the Name box, type the name of the new application.

  5. 확인을 클릭하여 Visual Basic Windows 템플릿을 로드합니다.Click OK to load the Visual Basic Windows template.

  6. 프로젝트 메뉴에서 참조 추가를 선택합니다.On the Project menu, select Add Reference. 참조 추가 대화 상자가 나타납니다.The Add Reference dialog box appears.

  7. .NET 탭의 목록에서 다음과 같은 어셈블리를 선택한 후 확인을 클릭합니다.Select the following assemblies from the list on the .NET tab, and then click OK.

    • Microsoft.SqlServer.Replication .NET Programming InterfaceMicrosoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.ConnectionInfo

    • Replication Agent LibraryReplication Agent Library

    참고

    둘 이상의 파일을 선택하려면 Ctrl 키를 사용합니다.Use the CTRL key to select more than one file.

  8. (옵션) 6단계를 반복합니다.(Optional) Repeat step 6. 찾아보기 탭을 클릭하고 C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM으로 이동한 다음 Microsoft.SqlServer.Replication.BusinessLogicSupport.dll을 선택하고 확인을 클릭합니다.Click the Browse tab, navigate to C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, and then click OK.

  9. 보기 메뉴에서 코드를 클릭합니다.On the View menu, click Code.

  10. 코드에서 다른 모든 선언 앞에 다음 Imports 문을 입력하여 RMO 네임스페이스의 형식을 한정합니다.In the code, before any declarations, type the following Imports statements to qualify the types in the RMO namespaces.

    ' These namespaces are required.  
    Imports Microsoft.SqlServer.Replication  
    Imports Microsoft.SqlServer.Management.Common  
    ' This namespace is only used when creating custom business  
    ' logic for merge replication.  
    Imports Microsoft.SqlServer.Replication.BusinessLogicSupport   
    

복제 서버에 연결Connecting to a Replication Server

RMO 프로그래밍 개체의 경우 ServerConnection 클래스의 인스턴스를 사용하여 SQL ServerSQL Server의 인스턴스에 연결해야 합니다.RMO programming objects require that a connection to an instance of SQL ServerSQL Server is made by using an instance of the ServerConnection class. 이 서버 연결은 RMO 프로그래밍 개체와는 독립적으로 이루어집니다.This connection to the server is made independently of any RMO programming objects. 그런 다음에는 인스턴스 생성 중에 또는 개체의 P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext 속성을 할당하여 연결을 RMO 개체로 전달합니다.It is then passed to the RMO object either during instance creation or by assignment to the P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext property of the object. 이런 식으로 RMO 프로그래밍 개체와 연결 개체 인스턴스를 별도로 만들고 관리할 수 있으며 여러 RMO 프로그래밍 개체에서 단일 연결 개체를 다시 사용할 수 있습니다.In this manner, an RMO programming object and the connection object instances can be created and managed separately, and a single connection object can be reused with multiple RMO programming objects. 복제 서버에 대한 연결에는 다음 규칙이 적용됩니다.The following rules apply for connections to a replication server:

  • 지정된 ServerConnection 개체에 대해 모든 연결 속성을 정의합니다.All properties for the connection are defined for a given ServerConnection object.

  • SQL ServerSQL Server 인스턴스에 대한 연결에 고유한 ServerConnection 개체가 있어야 합니다.A connection to each instance of SQL ServerSQL Server must have its own ServerConnection object.

  • ServerConnection 개체는 서버에서 생성되거나 액세스되는 RMO 프로그래밍 개체의 P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext 속성에 할당합니다.The ServerConnection object is assigned to the P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext property of the RMO programming object being created or accessed on the server.

  • Connect 메서드는 서버에 대한 연결을 엽니다.The Connect method opens the connection to the server. 이 메서드는 서버에 액세스하는 다른 모든 메서드를 호출하기 전에 해당 연결을 사용하는 RMO 프로그래밍 개체에 대해 호출해야 합니다.This method must be called before calling any methods that access the server on any RMO programming objects using the connection.

  • RMO 및 SMO( SQL ServerSQL Server Management Objects) 모두 ServerConnection 클래스를 사용하여 SQL ServerSQL Server에 연결하기 때문에 RMO와 SMO 개체 모두가 동일한 연결을 사용할 수 있습니다.Because RMO and SQL ServerSQL Server Management Objects (SMO) both use the ServerConnection class for connections to SQL ServerSQL Server, the same connection can be used by both RMO and SMO objects. 자세한 내용은 SQL Server 인스턴스에 연결을 참조하세요.For more information, see Connecting to an Instance of SQL Server.

  • 서버에 연결하고 성공적으로 로그인하기 위해 모든 인증 정보를 ServerConnection 개체에 제공합니다.All authentication information to make the connection and successfully log on to the server is supplied in the ServerConnection object.

  • Windows 인증이 기본값입니다.Windows Authentication is the default. SQL ServerSQL Server 인증을 사용하려면 LoginSecurefalse로 설정하고 LoginPassword를 유효한 SQL ServerSQL Server 로그온 및 암호로 설정해야 합니다.To use SQL ServerSQL Server Authentication, LoginSecure must be set to false and Login and Password must be set to a valid SQL ServerSQL Server logon and password. 보안 자격 증명은 항상 안전하게 저장 및 처리되어야 하고 가능하면 런타임에 제공해야 합니다.Security credentials must always be stored and handled securely, and supplied at run-time whenever possible.

  • 다중 스레드 응용 프로그램의 경우 각 스레드에서 별도의 ServerConnection 개체를 사용해야 합니다.For multithreaded applications, a separate ServerConnection object should be used in each thread.

    RMO 개체에서 사용하는 활성 서버 연결을 닫으려면 Disconnect 개체에 대해 ServerConnection 메서드를 호출합니다.Call the Disconnect method on the ServerConnection object to close active server connections used by RMO objects.

RMO 속성 설정Setting RMO Properties

RMO 프로그래밍 개체의 속성은 서버에 있는 이러한 복제 개체의 속성을 나타냅니다.The properties of RMO programming objects represent the properties of these replication objects at the server. 서버에서 새 복제 개체를 만들 경우 이러한 개체는 RMO 속성을 사용하여 정의됩니다.When creating new replication objects at the server, RMO properties are used to define these objects. 기존 개체의 경우 RMO 속성은 기존 개체의 속성을 나타내며, 이러한 속성은 쓰기 또는 설정 가능한 속성에 한해서만 수정할 수 있습니다.For existing objects, the RMO properties represent the existing object's properties, which can be modified only for properties that are writable or settable. 새 개체나 기존 개체에 대해 속성을 설정할 수 있습니다.Properties can be set on new objects or existing objects.

새 복제 개체의 속성 설정Setting Properties for New Replication Objects

서버에서 새 복제 개체를 만들 경우 개체의 Create 메서드를 호출하기 전에 모든 필수 속성을 지정해야 합니다.When creating a new replication object at the server, you must specify all required properties before calling the Create method of the object. 새 복제 개체의 속성을 설정하는 방법은 게시 및 배포 구성을 참조하세요.For more information about setting properties for a new replication object, see Configure Publishing and Distribution.

기존 복제 개체의 속성 설정Setting Properties for Existing Replication Objects

서버에 있는 기존 복제 개체의 경우 개체에 따라 RMO에서 해당 개체의 속성 전체 또는 일부의 변경을 지원하는지 여부가 달라집니다.For replication objects that exist at the server, depending on the object, RMO might support the ability to change some or all of its properties. 쓰기 또는 설정 가능한 속성만 변경 가능합니다.Only writable or settable properties can be changed. 속성을 변경하려면 먼저 Load 또는 M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties 메서드를 호출하여 서버에서 현재 속성을 가져와야 합니다.Before properties can be changed, either the Load or the M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties method must be called to get the current properties from the server. 이러한 메서드 호출은 기존 개체가 수정됨을 나타냅니다.Calling these methods indicates that an existing object is being modified.

기본적으로 RMO는 개체 속성을 변경할 때 현재 사용 중인 ServerConnection의 실행 모드에 따라 변경 내용을 서버에 커밋합니다.By default, when changing object properties, RMO commits these changes to the server based on the execution mode of the ServerConnection being used. P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject 메서드를 사용하면 개체의 속성을 검색하거나 변경하기 전에 해당 개체가 서버에 있는지 여부를 확인할 수 있습니다.The P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject method can be used to verify that an object exists at the server before attempting to retrieve or change its properties. 복제 개체의 속성을 변경하는 방법은 배포자 및 게시자 속성 보기 및 수정을 참조하세요.For more information about changing the properties of a replication object, see View and Modify Distributor and Publisher Properties.

참고

여러 RMO 클라이언트 또는 RMO 프로그래밍 개체의 여러 인스턴스가 서버에 있는 동일한 복제 개체에 액세스할 경우 RMO 개체의 Refresh 메서드를 호출하면 서버에 있는 개체의 현재 상태에 따라 속성을 업데이트할 수 있습니다.When multiple RMO clients or multiple instances of an RMO programming object are accessing the same replication object at the server, the Refresh method of the RMO object can be called to update the properties based on the current state of the object at the server.

속성 변경 내용 캐시Caching Property Changes

SqlExecutionModes 속성을 CaptureSql로 설정하면 RMO에서 생성한 모든 Transact-SQLTransact-SQL 문이 캡처됩니다. 이 경우 실행 메서드 중 하나를 사용하여 하나의 일괄 처리에서 문을 수동으로 실행할 수 있습니다.When the SqlExecutionModes property is set to CaptureSql all Transact-SQLTransact-SQL statements generated by RMO are captured so that they can be executed manually in a single batch by using one of the execution methods. RMO를 사용하면 속성 변경 내용을 캐시한 후 개체의 M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges 메서드를 사용하여 하나의 일괄 처리에서 한 번에 커밋할 수 있습니다.RMO lets you cache property changes and commit them together in a single batch by using the M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges method of the object. 속성 변경 내용을 캐시하려면 개체의 P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges 속성을 true로 설정해야 합니다.To cache property changes, the P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges property of the object must be set to true. RMO의 속성 변경 내용을 캐시하는 경우에도 변경 내용이 서버에 전송되는 시점은 ServerConnection 개체에 의해 제어됩니다.When caching property changes in RMO, the ServerConnection object still controls when changes are sent to the server. 복제 개체의 속성 변경 내용을 캐시하는 방법은 배포자 및 게시자 속성 보기 및 수정을 참조하세요.For more information about caching property changes for a replication object, see View and Modify Distributor and Publisher Properties.

중요

속성을 설정할 때 ServerConnection 클래스를 사용하여 트랜잭션을 명시적으로 선언할 수 있지만 이러한 트랜잭션은 내부 복제 트랜잭션을 방해하여 예기치 않은 결과를 초래할 수 있기 때문에 RMO와 함께 사용하지 않는 것이 좋습니다.Although the ServerConnection class supports declaring explicit transactions when setting properties, such transactions may interfere with internal replication transactions, can produce unanticipated results, and should not be used with RMO.

예제Example

이 예에서는 속성 변경 내용을 캐시하는 방법을 보여 줍니다.This example demonstrates the caching of property changes. 여기서 트랜잭션 게시의 특성에 대한 변경 내용은 서버에 명시적으로 전송되기 전까지 캐시됩니다.Changes made to the attributes of a transactional publication are cached until they are explicitly sent to the server.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

TransPublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
	// Connect to the Publisher.
	conn.Connect();

	// Set the required properties for the publication.
	publication = new TransPublication();
	publication.ConnectionContext = conn;
	publication.Name = publicationName;
	publication.DatabaseName = publicationDbName;

	// Explicitly enable caching of property changes on this object.
	publication.CachePropertyChanges = true;

	// If we can't get the properties for this publication, 
	// throw an application exception.
	if (publication.LoadProperties())
	{
		// Enable support for push subscriptions and disable support 
		// for pull subscriptions.
		if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
		{
			publication.Attributes ^= PublicationAttributes.AllowPull;
		}
		if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
		{
			publication.Attributes |= PublicationAttributes.AllowPush;
		}

		// Send changes to the server.
		publication.CommitPropertyChanges();
	}
	else
	{
		throw new ApplicationException(String.Format(
			"Settings could not be retrieved for the publication. " +
			"Ensure that the publication {0} exists on {1}.",
			publicationName, publisherName));
	}
}
catch (Exception ex)
{
	// Do error handling here.
	throw new ApplicationException(
		"The publication property could not be changed.", ex);
}
finally
{
	conn.Disconnect();
}
// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

TransPublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
	// Connect to the Publisher.
	conn.Connect();

	// Set the required properties for the publication.
	publication = new TransPublication();
	publication.ConnectionContext = conn;
	publication.Name = publicationName;
	publication.DatabaseName = publicationDbName;

	// Explicitly enable caching of property changes on this object.
	publication.CachePropertyChanges = true;

	// If we can't get the properties for this publication, 
	// throw an application exception.
	if (publication.LoadProperties())
	{
		// Enable support for push subscriptions and disable support 
		// for pull subscriptions.
		if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
		{
			publication.Attributes ^= PublicationAttributes.AllowPull;
		}
		if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
		{
			publication.Attributes |= PublicationAttributes.AllowPush;
		}

		// Send changes to the server.
		publication.CommitPropertyChanges();
	}
	else
	{
		throw new ApplicationException(String.Format(
			"Settings could not be retrieved for the publication. " +
			"Ensure that the publication {0} exists on {1}.",
			publicationName, publisherName));
	}
}
catch (Exception ex)
{
	// Do error handling here.
	throw new ApplicationException(
		"The publication property could not be changed.", ex);
}
finally
{
	conn.Disconnect();
}

참고 항목See Also

복제 시스템 저장 프로시저 개념 Replication System Stored Procedures Concepts
복제 프로그래밍 개념Replication Programming Concepts