프로그래밍 방식으로 복제 모니터링Programmatically Monitor Replication

복제 모니터는 복제 토폴로지를 모니터링하는 데 사용할 수 있는 그래픽 도구입니다.Replication Monitor is a graphical tool that allows you to monitor a replication topology. Transact-SQLTransact-SQL 복제 저장 프로시저 또는 RMO(복제 관리 개체)를 사용하여 프로그래밍 방식으로 동일한 모니터링 데이터에 액세스할 수 있습니다.You can access the same monitoring data programmatically by using Transact-SQLTransact-SQL replication stored procedures or replication management objects (RMO). 이러한 개체를 사용하면 다음 태스크를 프로그래밍할 수 있습니다.These objects enable you to program the following tasks:

  • 게시자, 게시 및 구독의 상태 모니터링Monitor the state of Publishers, publications, and subscriptions.

  • 하나 이상의 구독자에서 병합 에이전트 세션 모니터링Monitor Merge Agent sessions at one or more Subscribers.

  • 하나 이상의 구독자에서 적용 대기 중인 트랜잭션 명령 모니터링Monitor transactional commands waiting to be applied at one or more Subscribers.

  • 게시에 개입이 필요한 시기를 결정하는 임계값 메트릭 정의Define the threshold metrics that determine when a publication requires intervention.

  • 추적 프로그램 토큰의 상태 모니터링.Monitor the status of tracer tokens.

    항목 내용In this topic:

    Transact-SQLTransact-SQL

    RMO(복제 관리 개체)Replication Management Objects (RMO)

Transact-SQL Transact-SQL

배포자에서 게시자, 게시 및 구독을 모니터링하려면To monitor Publishers, publications, and subscriptions from the Distributor

  1. 배포 데이터베이스의 배포자에서 sp_replmonitorhelppublisher를 실행합니다.At the Distributor on the distribution database, execute sp_replmonitorhelppublisher. 이렇게 하면 이 배포자를 사용하는 모든 게시자에 대한 모니터링 정보가 반환됩니다.This returns monitoring information for all Publishers using this Distributor. 결과 집합을 단일 게시자로 제한하려면 @publisher를 실행합니다.To limit the result set to a single Publisher, specify @publisher.

  2. 배포 데이터베이스의 배포자에서 sp_replmonitorhelppublication을 실행합니다.At the Distributor on the distribution database, execute sp_replmonitorhelppublication. 이렇게 하면 이 배포자를 사용하는 모든 게시에 대한 모니터링 정보가 반환됩니다.This returns monitoring information for all publications using this Distributor. 결과 집합을 단일 게시자, 게시 또는 게시된 데이터베이스로 제한하려면 각각 @publisher, @publication또는 @publisher_db를 지정합니다.To limit the result set to a single Publisher, publication, or published database, specify @publisher, @publication, or @publisher_db, respectively.

  3. 배포 데이터베이스의 배포자에서 sp_replmonitorhelpsubscription을 실행합니다.At the Distributor on the distribution database, execute sp_replmonitorhelpsubscription. 이렇게 하면 이 배포자를 사용하는 모든 구독에 대한 모니터링 정보가 반환됩니다.This returns monitoring information for all subscriptions using this Distributor. 결과 집합을 단일 게시자, 게시 또는 게시된 데이터베이스에 속하는 구독으로 제한하려면 각각 @publisher, @publication또는 @publisher_db를 지정합니다.To limit the result set to subscriptions belonging to a single Publisher, publication, or published database, specify @publisher, @publication, or @publisher_db, respectively.

구독자에서 적용 대기 중인 트랜잭션 명령을 모니터링하려면To monitor transactional commands waiting to be applied at the Subscriber

  1. 배포 데이터베이스의 배포자에서 sp_replmonitorsubscriptionpendingcmds를 실행합니다.At the Distributor on the distribution database, execute sp_replmonitorsubscriptionpendingcmds. 이렇게 하면 이 배포자를 사용하는 모든 구독에 대해 보류 중인 모든 명령의 모니터링 정보가 반환됩니다.This returns monitoring information for all commands pending for all subscriptions using this Distributor. 결과 집합을 단일 게시자, 구독자, 게시 또는 게시된 데이터베이스에 속하는 구독에 대해 보류 중인 명령으로 제한하려면 각각 @publisher, @subscriber, @publication또는 @publisher_db를 지정합니다.To limit the result set to commands pending for subscriptions belonging to a single Publisher, Subscriber, publication, or published database, specify @publisher, @subscriber, @publication, or @publisher_db, respectively.

업로드 또는 다운로드 대기 중인 병합 변경 내용을 모니터링하려면To monitor merge changes waiting to be uploaded or downloaded

  1. 게시 데이터베이스의 게시자에서 sp_showpendingchanges를 실행합니다.At the Publisher on the publication database, execute sp_showpendingchanges. 이렇게 하면 구독자에 대해 복제 대기 중인 변경 내용에 대한 정보를 보여 주는 결과 집합이 반환됩니다.This returns a result set showing information on changes that are waiting to be replicated to Subscribers. 결과 집합을 단일 게시 또는 아티클에 속하는 변경 내용으로 제한하려면 각각 @publication 또는 @article를 지정합니다.To limit the result set to changes that belong to a single publication or article, specify @publication or @article, respectively.

  2. 구독 데이터베이스의 구독자에서 sp_showpendingchanges를 실행합니다.At a Subscriber on the subscription database, execute sp_showpendingchanges. 이렇게 하면 게시자에 대해 복제 대기 중인 변경 내용에 대한 정보를 보여 주는 결과 집합이 반환됩니다.This returns a result set showing information on changes that are waiting to be replicated to the Publisher. 결과 집합을 단일 게시 또는 아티클에 속하는 변경 내용으로 제한하려면 각각 @publication 또는 @article를 지정합니다.To limit the result set to changes that belong to a single publication or article, specify @publication or @article, respectively.

병합 에이전트 세션을 모니터링하려면To monitor Merge Agent sessions

  1. 배포 데이터베이스의 배포자에서 sp_replmonitorhelpmergesession을 실행합니다.At the Distributor on the distribution database, execute sp_replmonitorhelpmergesession. 이렇게 하면 이 배포자를 사용하는 모든 구독의 모든 병합 에이전트 세션에 대해 Session_id를 포함한 모니터링 정보가 반환됩니다.This returns monitoring information, including Session_id, on all Merge Agent sessions for all subscriptions using this Distributor. MSmerge_sessions 시스템 테이블을 쿼리하여 Session_id 를 얻을 수도 있습니다.You can also obtain Session_id by querying the MSmerge_sessions system table.

  2. 배포 데이터베이스의 배포자에서 sp_replmonitorhelpmergesessiondetail을 실행합니다.At the Distributor on the distribution database, execute sp_replmonitorhelpmergesessiondetail. @session_id에 1단계에서 얻은 Session_id 값을 지정합니다.Specify a Session_id value from step 1 for @session_id. 이렇게 하면 해당 세션에 대한 세부 모니터링 정보가 표시됩니다.This displays detailed monitor information about the session.

  3. 각 관심 세션에 대해 2단계를 반복합니다.Repeat step 2 for each session of interest.

구독자에서 끌어오기 구독에 대한 병합 에이전트 세션을 모니터링하려면To monitor Merge Agent sessions for pull subscriptions from the Subscriber

  1. 구독 데이터베이스의 구독자에서 sp_replmonitorhelpmergesession을 실행합니다.At the Subscriber on the subscription database, execute sp_replmonitorhelpmergesession. 지정된 구독에 대해 @publisher, @publication을 지정하고 @publisher_db를 실행합니다.For a given subscription, specify @publisher, @publication, and the name of the publication database for @publisher_db. 이렇게 하면 이 구독의 마지막 다섯 개 병합 에이전트 세션에 대한 모니터링 정보가 반환됩니다.This returns monitoring information for the last five Merge Agent sessions for this subscription. 결과 집합에 있는 관심 세션의 Session_id 값을 확인합니다.Note the value of Session_id for sessions of interest in the result set.

  2. 구독 데이터베이스의 구독자에서 sp_replmonitorhelpmergesessiondetail을 실행합니다.At the Subscriber on the subscription database, execute sp_replmonitorhelpmergesessiondetail. @session_id에 1단계에서 얻은 Session_id 값을 지정합니다.Specify a Session_id value from step 1 for @session_id. 이렇게 하면 해당 세션에 대한 세부 모니터링 정보가 표시됩니다.This displays detailed monitoring information about the session.

  3. 각 관심 세션에 대해 2단계를 반복합니다.Repeat step 2 for each session of interest.

게시에 대한 모니터 임계값 메트릭을 보거나 수정하려면To view and modify the monitor threshold metrics for a publication

  1. 배포 데이터베이스의 배포자에서 sp_replmonitorhelppublicationthresholds를 실행합니다.At the Distributor on the distribution database, execute sp_replmonitorhelppublicationthresholds. 이렇게 하면 이 배포자를 사용하는 모든 게시의 모니터링 임계값 집합이 반환됩니다.This returns the monitoring thresholds set for all publications using this Distributor. 결과 집합을 단일 게시자 또는 게시된 데이터베이스에 속하는 게시에 대한 모니터 임계값으로 제한하거나 단일 게시로 제한하려면 각각 @publisher, @publisher_db또는 @publication를 지정합니다.To limit the result set to monitor thresholds to publications belonging to a single Publisher or published database or to a single publication, specify @publisher, @publisher_db, or @publication, respectively. 변경해야 하는 임계값에 대한 Metric_id 값을 확인합니다.Note the value of Metric_id for any thresholds that must be changed. 자세한 내용은 Set Thresholds and Warnings in Replication Monitor를 참조하세요.For more information, see Set Thresholds and Warnings in Replication Monitor.

  2. 배포 데이터베이스의 배포자에서 sp_replmonitorchangepublicationthreshold를 실행합니다.At the Distributor on the distribution database, execute sp_replmonitorchangepublicationthreshold. 다음을 필요한 대로 지정합니다.Specify the following as needed:

    • @metric_id에 1단계에서 얻은 Metric_id 값을 지정합니다.The Metric_id value obtained in step 1 for @metric_id.

    • @value에 모니터 임계값 메트릭의 새 값을 지정합니다.A new value for the monitor threshold metric for @value.

    • 이 임계값에 도달할 때 경고를 기록하려면 @shouldalert 에 값 @shouldalert 을 지정하고, 경고가 필요하지 않은 경우 값 0 을 지정합니다.A value of 1 for @shouldalert for an alert to be logged when this threshold is reached, or a value of 0 if an alert is not needed.

    • 이 임계값에 도달할 때 경고를 기록하려면 @shouldalert 에 값 @mode 을 지정하고 모니터 임계값 메트릭을 사용하지 않으려면 값 2 를 지정합니다.A value of 1 for @mode to enable the monitor threshold metric or a value of 2 to disable it.

RMO(복제 관리 개체) Replication Management Objects (RMO)

구독자에서 병합 게시에 대한 구독을 모니터링하려면To monitor a subscription to a merge publication at the Subscriber

  1. ServerConnection 클래스를 사용하여 구독자 연결을 만듭니다.Create a connection to the Subscriber by using the ServerConnection class.

  2. MergeSubscriberMonitor 클래스의 인스턴스를 만들고, 구독에 대해 Publisher, Publication, PublisherDB, SubscriberDB 속성을 설정한 다음 ConnectionContext 속성을 1단계에서 만든 ServerConnection 으로 설정합니다.Create an instance of the MergeSubscriberMonitor class, and set the Publisher, Publication, PublisherDB, SubscriberDB properties for the subscription, and set the ConnectionContext property to the ServerConnection created in step 1.

  3. 다음 메서드 중 하나를 호출하여 이 구독의 병합 에이전트 세션에 대한 정보가 반환되도록 합니다.Call one of the following methods to return information on Merge Agent sessions for this subscription:

    • GetSessionsSummary - 마지막 다섯 개까지의 병합 에이전트 세션에 대한 정보가 포함된 MergeSessionSummary 개체의 배열을 반환합니다.GetSessionsSummary - returns an array of MergeSessionSummary objects with information on up to the last five Merge Agent sessions. 관심 세션의 SessionId 값을 확인합니다.Note the SessionId value for any sessions of interest.

    • GetSessionsSummary - 마지막 다섯 개까지의 병합 에이전트 세션에 대한 정보가 포함된 MergeSessionSummary 매개 변수로 전달한 시간 동안 발생한 병합 에이전트 세션(최대 마지막 다섯 개)에 대한 정보가 포함된 T:Microsoft.SqlServer.Replication.MergeSessionSummary 개체의 배열을 반환합니다.GetSessionsSummary - returns an array of MergeSessionSummary objects with information on Merge Agent sessions that have occurred during the past number of hours passed in as the hours parameter (up to the last five sessions). 관심 세션의 SessionId 값을 확인합니다.Note the SessionId value for any sessions of interest.

    • GetLastSessionSummary - 마지막 병합 에이전트 세션에 대한 정보가 포함된 MergeSessionSummary 개체를 반환합니다.GetLastSessionSummary - returns a MergeSessionSummary object with information on the last Merge Agent session. 이 세션의 SessionId 값을 확인합니다.Note the SessionId value for this session.

    • GetSessionsSummaryDataSet - 최대 마지막 다섯 개의 병합 에이전트 세션에 대한 정보가 각 행에 하나씩 포함된 DataSet 개체를 반환합니다.GetSessionsSummaryDataSet - returns a DataSet object with information on up to the last five Merge Agent sessions, one in each row. 관심 세션의 Session_id 열 값을 확인합니다.Note the value of the Session_id column for any sessions of interest.

    • GetLastSessionSummaryDataRow - 마지막 병합 에이전트 세션에 대한 정보가 포함된 DataRow 개체를 반환합니다.GetLastSessionSummaryDataRow - returns a DataRow object with information on the last Merge Agent session. 이 세션의 Session_id 열 값을 확인합니다.Note the value of the Session_id column for this session.

  4. (옵션) RefreshSessionSummary 를 호출하여 MergeSessionSummary 로 전달된 T:Microsoft.SqlServer.Replication.MergeSessionSummary 개체의 데이터를 새로 고치거나, RefreshSessionSummary 를 호출하여 DataRow 로 전달된 T:System.Data.DataRow를 실행합니다.(Optional) Call RefreshSessionSummary to refresh the data for the MergeSessionSummary object passed as mss, or call RefreshSessionSummary to refresh the data in the DataRow object passed as drRefresh.

  5. 3단계에서 가져온 세션 ID를 사용하여 다음 메서드 중 하나를 호출합니다. 그러면 특정 세션에 대한 세부 정보가 반환됩니다.Using the session ID obtained in step 3, call one of the following methods to return information on the details of a particular session:

배포자에서 모든 게시에 대한 복제 속성을 모니터링하려면To monitor replication properties for all publications at a Distributor

  1. ServerConnection 클래스를 사용하여 배포자 연결을 만듭니다.Create a connection to the Distributor by using the ServerConnection class.

  2. ReplicationMonitor 클래스의 인스턴스를 만듭니다.Create an instance of the ReplicationMonitor class.

  3. ConnectionContext 속성을 1단계에서 만든 ServerConnection 으로 설정합니다.Set the ConnectionContext property to the ServerConnection created in step 1.

  4. LoadProperties 메서드를 호출하여 개체 속성을 가져옵니다.Call the LoadProperties method to get the properties of the object.

  5. 다음 메서드 중 하나 이상을 실행하여 이 배포자를 사용하는 모든 게시자에 대한 복제 정보가 반환되도록 합니다.Execute one or more of the following methods to return replication information for all Publishers that use this Distributor.

배포자에서 특정 게시자의 게시 속성을 모니터링하려면To monitor publication properties for a specific Publisher at the Distributor

  1. ServerConnection 클래스를 사용하여 배포자 연결을 만듭니다.Create a connection to the Distributor by using the ServerConnection class.

  2. 다음 방법 중 하나로 PublisherMonitor 개체를 가져옵니다.Get a PublisherMonitor object in one of these ways.

  3. 다음 메서드 중 하나 이상을 실행하여 이 배포자에 속해 있는 모든 게시에 대한 복제 정보가 반환되도록 합니다.Execute one or more of the following methods to return replication information for all publications that belong to this Publisher.

배포자에서 특정 게시의 속성을 모니터링하려면To monitor properties for a specific publication at the Distributor

  1. ServerConnection 클래스를 사용하여 배포자 연결을 만듭니다.Create a connection to the Distributor by using the ServerConnection class.

  2. 다음 방법 중 하나로 PublicationMonitor 개체를 가져옵니다.Get a PublicationMonitor object in one of these ways.

  3. 다음 메서드 중 하나 이상을 실행하여 이 게시에 대한 정보가 반환되도록 합니다.Execute one or more of the following methods to return information about this publication.

구독자에서 적용 대기 중인 트랜잭션 명령을 모니터링하려면To monitor transactional commands that are waiting to be applied at the Subscriber

  1. ServerConnection 클래스를 사용하여 배포자 연결을 만듭니다.Create a connection to the Distributor by using the ServerConnection class.

  2. 다음 방법 중 하나로 PublicationMonitor 개체를 가져옵니다.Get a PublicationMonitor object in one of these ways.

  3. TransPendingCommandInfo 개체를 반환하는 PendingCommandInfo 메서드를 실행합니다.Execute the TransPendingCommandInfo method, which returns a PendingCommandInfo object.

  4. PendingCommandInfo 개체의 속성을 사용하여 보류 중인 명령의 예상 개수와 해당 명령의 배달을 완료하는 데 소요될 시간을 확인합니다.Use the properties of this PendingCommandInfo object to determine the estimated number of pending commands and the length of time it will take to complete the delivery of these commands.

게시의 모니터 경고 임계값을 설정하려면To set the monitor warning thresholds for a publication

  1. ServerConnection 클래스를 사용하여 배포자 연결을 만듭니다.Create a connection to the Distributor by using the ServerConnection class.

  2. 다음 방법 중 하나로 PublicationMonitor 개체를 가져옵니다.Get a PublicationMonitor object in one of these ways.

  3. EnumMonitorThresholds 메서드를 실행합니다.Execute the EnumMonitorThresholds method. ArrayList 개체의 반환된 MonitorThreshold 에서 현재 임계값 설정을 확인합니다.Note the current threshold settings in the returned ArrayList of MonitorThreshold objects.

  4. ChangeMonitorThreshold 메서드를 실행합니다.Execute the ChangeMonitorThreshold method. 다음 매개 변수를 전달합니다.Pass the following parameters:

    • metricID - 다음 테이블에서 모니터링 임계값 메트릭을 나타내는 Int32 값입니다.metricID - an Int32 value that represents the monitoring threshold metric from the following table:

      Value 설명Description
      @shouldalert1 expiration - 트랜잭션 게시에 대한 구독의 만료가 임박했는지 모니터링합니다.expiration - monitors for imminent expiration of subscriptions to transactional publications.
      22 latency - 트랜잭션 게시에 대한 구독의 성능을 모니터링합니다.latency - monitors for the performance of subscriptions to transactional publications.
      44 mergeexpiration - 병합 게시에 대한 구독의 만료가 임박했는지 모니터링합니다.mergeexpiration - monitors for imminent expiration of subscriptions to merge publications.
      55 mergeslowrunduration - 저대역폭(전화 접속) 연결을 통한 병합 동기화의 기간을 모니터링합니다.mergeslowrunduration - monitors the duration of merge synchronizations over low-bandwidth (dialup) connections.
      66 mergefastrunduration - 고대역폭(LAN) 연결을 통한 병합 동기화의 기간을 모니터링합니다.mergefastrunduration - monitors the duration of merge synchronizations over high-bandwidth (LAN) connections.
      77 mergefastrunspeed - 고대역폭(LAN) 연결을 통한 병합 동기화의 동기화 속도를 모니터링합니다.mergefastrunspeed - monitors the synchronization rate of merge synchronizations over high-bandwidth (LAN) connections.
      88 mergeslowrunspeed - 저대역폭(전화 접속) 연결을 통한 병합 동기화의 동기화 속도를 모니터링합니다.mergeslowrunspeed - monitors the synchronization rate of merge synchronizations over low-bandwidth (dialup) connections.
    • enable - Boolean 값입니다.enable - Boolean value that indicates whether the metric is enabled for the publication.

    • thresholdValue - 임계값을 설정하는 정수 값입니다.thresholdValue - integer value that sets the threshold.

    • shouldAlert - 이 임계값에서 경고를 생성할지 여부를 나타내는 정수입니다.shouldAlert - integer that indicates whether this threshold should generate an alert.