以编程方式监视复制

复制监视器是一种图形工具,可用于监视复制拓扑。 可以使用 Transact-SQL 复制存储过程或复制管理对象(RMO)以编程方式访问相同的监视数据。 通过这些对象可以编程以下任务:

  • 监视发布者、出版物和订阅的状态。

  • 在一个或多个订阅服务器上监视合并代理会话。

  • 监视在一个或多个订阅服务器上待处理的事务指令。

  • 定义用于确定发布何时需要干预的阈值指标。

  • 监视跟踪令牌的状态。

本主题内容:

Transact-SQL

复制管理对象 (RMO)

Transact-SQL

从发行者监视发布者、出版物和订阅

  1. 在分发数据库的分发服务器上,执行 sp_replmonitorhelppublisher。 这会返回使用此分发服务器的所有发布服务器的监视信息。 若要将结果集限制为单个发布服务器,请指定 @publisher

  2. 在分发服务器上的分发服务器上,执行 sp_replmonitorhelppublication。 这将返回所有使用此分发器的发布的监控信息。 若要将结果集限制为单个发布者、发布或发布的数据库,请分别指定 @publisher@publication@publisher_db

  3. 在分发服务器上的分发服务器上,执行 sp_replmonitorhelpsubscription。 这会返回使用此分发服务器的所有订阅的监视信息。 若要将结果集限制为属于单个发布服务器、发布或已发布数据库的订阅,请分别指定 @publisher@publication@publisher_db

监控等待在订阅者处应用的事务指令

  1. 在分发服务器上的分发服务器上,执行 sp_replmonitorsubscriptionpendingcmds。 这将返回有关使用此分发代理挂起的所有订阅的所有命令的监视信息。 若要将结果集限制为属于单个发布服务器、订阅服务器、发布或已发布数据库的订阅挂起的命令,请分别指定 @publisher@subscriber@publication@publisher_db

跟踪等待上传或下载的合并更改

  1. 在发布服务器上,对发布数据库执行 sp_showpendingchanges。 这会返回一个结果集,其中显示了有关正在等待复制到订阅服务器的更改的信息。 若要将结果集限制为属于单个发布或项目更改,请分别指定 @publication@article

  2. 在订阅数据库的订阅者上,执行 sp_showpendingchanges。 这会返回一个结果集,其中显示了等待复制到发布服务器的更改的相关信息。 若要将结果集限制为属于单个发布或项目更改,请分别指定 @publication@article

监视合并代理会话

  1. 在分发数据库的分发服务器上,执行 sp_replmonitorhelpmergesession。 这会返回使用此分发服务器的所有订阅的所有合并代理会话(包括 Session_id)的监视信息。 还可以通过查询 MSmerge_sessions 系统表来获取 Session_id

  2. 在分发服务器上的分发服务器上,执行 sp_replmonitorhelpmergesessiondetail。 为 @session_id 指定步骤 1 的 Session_id值。 这会显示有关会话的详细监视器信息。

  3. 对每个感兴趣的会话重复步骤二。

监视从订阅服务器请求订阅的合并代理会话

  1. 在订阅服务器上的订阅服务器上,执行 sp_replmonitorhelpmergesession。 对于给定的订阅,请为@publisher_db指定@publisher@publication和发布数据库的名称。 这会返回此订阅的最后五个合并代理会话的监视信息。 请注意在结果集中关注的会话的 Session_id 值。

  2. 在订阅服务器上的订阅服务器上,执行 sp_replmonitorhelpmergesessiondetail。 为 @session_id 指定步骤 1 的 Session_id值。 这会显示有关会话的详细监视信息。

  3. 为每个你感兴趣的会话重复步骤 2。

查看和修改发布的监视器阈值指标

  1. 在分发服务器上,对分发数据库执行 sp_replmonitorhelppublicationthresholds。 这会返回使用此发布服务器为所有出版物设置的监控阈值。 若要将结果集限制为监视属于单个发布服务器或已发布数据库或单个发布的发布的阈值,请分别指定 @publisher@publisher_db@publication。 请注意必须更改的任何阈值的 Metric_id 值。 有关详细信息,请参阅 复制监视器中的设置阈值和警告

  2. 在分发服务器上,对分发数据库执行 sp_replmonitorchangepublicationthreshold。 根据需要指定以下内容:

    • 在步骤 1 中为@metric_id获取的Metric_id值。

    • @value的监视器阈值指标的新值。

    • 如果达到此阈值时需要记录警报,则@shouldalert值为1;如果不需要警报,则该值为0

    • @mode的值为1时,用于启用焦点阈值指标;值为2时则禁用它。

复制管理对象 (RMO)

在订阅服务器上监视合并发布的订阅

  1. 使用 ServerConnection 类创建与订阅服务器的连接。

  2. 创建MergeSubscriberMonitor类的实例,为订阅设置PublisherPublicationPublisherDBSubscriberDB 属性,并将ConnectionContext属性设置为在步骤 1 中创建的ServerConnection

  3. 调用以下方法之一以返回有关此订阅的合并代理会话的信息:

  4. (可选)调用RefreshSessionSummary以刷新作为 mss 传递的对象的数据MergeSessionSummary,或调用RefreshSessionSummary以刷新作为 drRefresh 传递的对象中的数据DataRow

  5. 使用步骤 3 中获取的会话 ID,调用以下方法之一以返回有关特定会话的详细信息的信息:

在分发服务器上监控所有发布的复制属性

  1. 使用 ServerConnection 类创建与分发服务器的连接。

  2. 创建 ReplicationMonitor 类的一个实例。

  3. ConnectionContext 属性设置为 ServerConnection 在步骤 1 中创建的属性。

  4. 调用 LoadProperties 方法获取该对象的属性。

  5. 执行以下一个或多个方法,以返回使用此分发服务器的所有发布服务器的复制信息。

监视分发者上特定发布者的发布属性

  1. 使用 ServerConnection 类创建与分发服务器的连接。

  2. 通过以下方法之一 PublisherMonitor 获取对象。

  3. 执行以下一个或多个方法,以返回属于此发布服务器的所有发布的复制信息。

监视分发服务器上特定发布的属性

  1. 使用 ServerConnection 类创建与分发服务器的连接。

  2. 获取 PublicationMonitor 对象的方式如下。

  3. 执行以下一个或多个方法以返回有关此发布的信息。

监视正在等待在订阅服务器上应用的事务命令

  1. 使用 ServerConnection 类创建与分发服务器的连接。

  2. 通过以下方法之一 PublicationMonitor 获取对象。

  3. 执行 TransPendingCommandInfo 方法,该方法返回一个 PendingCommandInfo 对象。

  4. 使用此对象的属性 PendingCommandInfo 来确定挂起命令的估计数量以及完成这些命令传递所需的时间长度。

设置发布的监视器警告阈值

  1. 使用 ServerConnection 类创建与分发服务器的连接。

  2. 通过以下方法之一 PublicationMonitor 获取对象。

  3. 执行EnumMonitorThresholds方法。 请注意返回 ArrayList 的对象 MonitorThreshold 中的当前阈值设置。

  4. ChangeMonitorThreshold执行方法。 传递以下参数:

    • metricID - 一个 Int32 值,表示下表中的监视阈值指标:

      价值 DESCRIPTION
      1 expiration - 监视事务发布的订阅即将过期。
      2 latency - 监视事务发布的订阅的性能。
      4 mergeexpiration - 监视合并发布的订阅即将过期。
      5 mergeslowrunduration - 通过低带宽(拨号)连接监视合并同步的持续时间。
      6 mergefastrunduration - 通过高带宽(LAN)连接监视合并同步的持续时间。
      7 mergefastrunspeed - 通过高带宽(LAN)连接监视合并同步的同步速率。
      8 mergeslowrunspeed - 通过低带宽(拨号)连接监视合并同步的同步速率。
    • 启用 - Boolean 指示该指标是否为发布启用的值。

    • thresholdValue - 设置阈值的整数值。

    • shouldAlert - 指示此阈值是否应生成警报的整数。