以编程方式监视复制
复制监视器是一种可用于监视复制拓扑的图形化工具。 可以使用 Transact-SQL 复制存储过程或复制管理对象以编程方式访问相同的监视数据, (RMO) 。 您可以利用这些对象对以下任务进行编程:
监视发布服务器、发布和订阅的状态。
监视一个或多个订阅服务器上的合并代理会话。
监视等待在一个或多个订阅服务器上应用的事务处理命令。
定义用于确定发布何时需要干预的阈值标准。
监视跟踪令牌的状态。
本主题内容:
Transact-SQL
从分发服务器监视发布服务器、发布和订阅
在分发服务器上,对分发数据库执行 sp_replmonitorhelppublisher。 这将返回使用此分发服务器的所有发布服务器的监视信息。 若要将结果集限制为单个发布服务器, 请指定 @publisher。
在分发服务器上,对分发数据库执行 sp_replmonitorhelppublication. 这将返回使用此分发服务器的所有发布的监视信息。 若要将结果集限制为单个发布服务器、发布或已发布数据库,请分别指定 @publisher、 @publication或 @publisher_db。
在分发服务器上,对分发数据库执行 sp_replmonitorhelpsubscription。 这将返回使用此分发服务器的所有订阅的监视信息。 若要将结果集限制为属于单个发布服务器、发布或已发布数据库的订阅,请分别指定 @publisher、 @publication 或 @publisher_db。
监视等待在订阅服务器上应用的事务处理命令
- 在分发服务器上,对分发数据库执行 sp_replmonitorsubscriptionpendingcmds。 这将返回为使用此分发服务器的所有订阅挂起的所有命令的监视信息。 若要将结果集限制为属于单个发布服务器、订阅服务器、发布或已发布数据库的订阅的挂起命令,请分别指定 @publisher、 @subscriber、 @publication或 @publisher_db。
监视等待上载或下载的合并更改
在发布服务器上,对发布数据库执行 sp_showpendingchanges。 这将返回一个结果集,其中显示了有关等待复制到订阅服务器的更改的信息。 若要将结果集限制为属于单个发布或项目所做的更改,请分别指定 @publication 或 @article。
在订阅服务器上,对订阅数据库执行 sp_showpendingchanges。 这将返回一个结果集,其中显示了有关等待复制到发布服务器的更改的信息。 若要将结果集限制为属于单个发布或项目所做的更改,请分别指定 @publication 或 @article。
监视合并代理会话
在分发服务器上,对分发数据库执行 sp_replmonitorhelpmergesession。 这将为所有使用此分发服务器的订阅返回有关所有合并代理会话的监视信息(包括 Session_id)。 还可以提供查询 MSmerge_sessions 系统表来获得 Session_id 。
在分发服务器上,对分发数据库执行 sp_replmonitorhelpmergesessiondetail。 为 @session_id 指定步骤 1 中的 Session_id值。 这将显示有关该会话的详细监视信息。
为每个相关会话重复步骤 2。
从订阅服务器监视请求订阅的合并代理会话
在订阅服务器上,对订阅数据库执行 sp_replmonitorhelpmergesession。 对于给定的订阅,请指定 @publisher、 @publication以及 @publisher_db的发布数据库的名称。 这将为此订阅的最后五个合并代理会话返回监视信息。 请记下结果集中相关会话的 Session_id 值。
在订阅服务器上,对订阅数据库执行 sp_replmonitorhelpmergesessiondetail。 为 @session_id 指定步骤 1 中的 Session_id值。 这将显示有关该会话的详细监视信息。
为每个相关会话重复步骤 2。
查看和修改发布的监视阈值标准
在分发服务器上,对分发数据库执行 sp_replmonitorhelppublicationthresholds。 这将返回为使用此分发服务器的所有发布设置的监视阈值。 若要将结果集限制为监视属于单个发布服务器或已发布数据库的发布或单个发布的阈值,请分别指定 @publisher、 @publisher_db或 @publication。 请记下任何必须更改的阈值的 Metric_id 值。 有关详细信息,请参阅 Set Thresholds and Warnings in Replication Monitor。
在分发服务器上,对分发数据库执行 sp_replmonitorchangepublicationthreshold。 根据需要指定下列参数:
在步骤 1 中为 @metric_id 获取 的Metric_id值。
@value的监视器阈值指标的新值。
值 1 表示在达到此阈值时要记录的警报 的@shouldalert ;如果不需要警报,则为 0 。
值 1 表示 @mode 启用监视器阈值指标,或值为 2 以禁用它。
复制管理对象 (RMO)
监视对订阅服务器上的合并发布的订阅
使用 ServerConnection 类创建与订阅服务器的连接。
创建 MergeSubscriberMonitor 类的实例,为订阅设置 Publisher、 Publication、 PublisherDB和 SubscriberDB 属性并将 ConnectionContext 属性设置为步骤 1 中创建的 ServerConnection 。
调用以下方法之一返回有关该订阅的合并代理会话的信息:
GetSessionsSummary - 返回一组 MergeSessionSummary 对象,其中包含最后五个合并代理会话的相关信息。 请注意任何相关会话的 SessionId 值。
GetSessionsSummary - 返回一组 MergeSessionSummary 对象,其中包含过去几个小时(作为 hours 参数传入)中发生的合并代理会话(最多是最后五个会话)的相关信息。 请注意任何相关会话的 SessionId 值。
GetLastSessionSummary - 返回 MergeSessionSummary 对象,该对象具有最后一个合并代理会话的相关信息。 请注意此会话的 SessionId 值。
GetSessionsSummaryDataSet - 返回 DataSet 对象,其中包含最多最后五个合并代理会话的相关信息,每个合并代理会话占一行。 请注意任何相关会话的 Session_id 列的值。
GetLastSessionSummaryDataRow - 返回 DataRow 对象,该对象具有最后一个合并代理会话的相关信息。 请注意此会话的 Session_id 列的值。
(可选)调用 RefreshSessionSummary 刷新作为 MergeSessionSummary 传递的 T:Microsoft.SqlServer.Replication.MergeSessionSummary 对象的数据,或调用 RefreshSessionSummary 刷新作为 DataRow 传递的 T:System.Data.DataRow。
使用步骤 3 中获取的会话 ID 调用以下方法之一,以返回有关特定会话的详细信息:
GetSessionDetails- 返回提供的 sessionID 的 MergeSessionDetail 对象的数组。
GetSessionDetailsDataSet - 返回一个 对象, DataSet 其中包含指定 sessionID 的信息。
监视分发服务器上所有发布的复制属性
使用 ServerConnection 类创建与分发服务器的连接。
创建的 ReplicationMonitor 类的实例。
将 ConnectionContext 属性设置为步骤 1 中创建的 ServerConnection 。
调用 LoadProperties 方法获取该对象的属性。
执行以下一种或多种方法返回使用该分发服务器的所有发布服务器的复制信息。
EnumDistributionAgents - 返回 DataSet 对象,该对象包含有关此分发服务器上所有分发代理的信息。
EnumErrorRecords - 返回 DataSet 对象,该对象包含有关存储在分发服务器上的错误的信息。
EnumLogReaderAgents - 返回 DataSet 对象,该对象包含有关分发服务器上的所有日志读取器代理的信息。
EnumMergeAgents - 返回 DataSet 对象,该对象包含分发服务器上的所有合并代理的信息。
EnumMiscellaneousAgents - 返回 DataSet 对象,该对象包含有关分发服务器上的所有其他复制代理的信息。
EnumPublishers - 返回 DataSet 对象,该对象包含有关此分发服务器上的所有发布服务器的信息。
EnumPublishers2 - 返回 DataSet 对象,该对象返回使用此分发服务器的发布服务器。
EnumQueueReaderAgents - 返回 DataSet 对象,该对象包含有关分发服务器上的所有队列读取器代理的信息。
EnumQueueReaderAgentSessionDetails - 返回 DataSet 对象,该对象包含有关指定的队列读取器代理和会话的详细信息。
EnumQueueReaderAgentSessions - 返回 DataSet 对象,该对象包含有关指定的队列读取器代理的会话信息。
EnumSnapshotAgents - 返回 DataSet 对象,该对象包含有关分发服务器上的所有快照代理的信息。
监视分发服务器上特定发布服务器的发布属性
使用 ServerConnection 类创建与分发服务器的连接。
通过下列方法之一获取 PublisherMonitor 对象。
创建的 PublisherMonitor 类的实例。 为发布服务器设置 Name 属性,并将 ConnectionContext 属性设置为步骤 1 中创建的 ServerConnection 。 调用 LoadProperties 方法获取该对象的属性。 如果该方法返回
false
,则表示发布服务器名称定义不正确或表示该发布不存在。从通过现有 PublisherMonitorCollection 对象的 PublisherMonitors 属性访问的 ReplicationMonitor 中获取。
执行以下一种或多种方法返回有关属于该发布服务器的所有发布的复制信息。
EnumDistributionAgentSessionDetails - 返回 DataSet 对象,该对象包含有关指定的分发代理和会话的详细信息。
EnumDistributionAgentSessions - 返回 DataSet 对象,该对象包含有关指定的分发代理的会话信息。
EnumErrorRecords - 返回 DataSet 对象,该对象有关指定的错误的错误记录信息。
EnumLogReaderAgentSessionDetails - 返回 DataSet 对象,该对象包含指定的日志读取器代理和会话的详细信息。
EnumLogReaderAgentSessions - 返回 DataSet 对象,该对象包含指定的日志读取器代理的会话信息。
EnumMergeAgentSessionDetails - 返回 DataSet 对象,该对象包含指定的合并代理和会话的详细信息。
EnumMergeAgentSessionDetails2 - 返回 DataSet 对象,该对象包含有关指定的合并代理和会话的其他详细信息。
EnumMergeAgentSessions - 返回 DataSet 对象,该对象包含指定的合并代理的会话信息。
EnumMergeAgentSessions2 - 返回 DataSet 对象,该对象包含指定的合并代理的其他会话信息。
EnumPublications - 返回 DataSet 对象,该对象包含有关此分发服务器上的所有发布的信息。
EnumPublications2 - 返回 DataSet 对象,该对象包含有关此分发服务器上的所有发布的其他信息。
EnumSnapshotAgentSessionDetails - 返回 DataSet 对象,该对象包含有关指定的快照代理和会话的详细信息。
EnumSnapshotAgentSessions - 返回 DataSet 对象,该对象包含指定的快照代理的会话信息。
EnumSubscriptions - 返回 DataSet 对象,该对象包含有关对此分发服务器上的发布的所有订阅的信息。
监视分发服务器上的特定发布的属性
使用 ServerConnection 类创建与分发服务器的连接。
通过下列方法之一获取 PublicationMonitor 对象。
创建的 PublicationMonitor 类的实例。 为发布设置 DistributionDBName、 PublisherName、 PublicationDBName和 Name 属性,并将 ConnectionContext 属性设置为步骤 1 中创建的 ServerConnection 。 调用 LoadProperties 方法获取该对象的属性。 如果该方法返回
false
,则表示发布属性定义不正确,或表示该发布不存在。从通过现有 PublicationMonitorCollection 对象的 PublicationMonitors 属性访问的 PublisherMonitor 中获取。
执行以下一种或多种方法返回有关此发布的信息。
EnumErrorRecords - 返回 DataSet 对象,该对象包含有关指定的错误的错误记录。
EnumLogReaderAgent - 返回 DataSet 对象,该对象包含有关此发布的日志读取器代理的信息。
EnumMonitorThresholds - 返回 DataSet 对象,该对象包含有关为此发布设置的监视器警告阈值的信息。
EnumQueueReaderAgent - 返回 DataSet 对象,该对象包含有关此发布使用的队列读取器代理的信息。
EnumSnapshotAgent - 返回 DataSet 对象,该对象包含有关此发布的快照代理的信息。
EnumSubscriptions - 返回 DataSet 对象,该对象包含有关对此发布的订阅的信息。
EnumSubscriptions2 - 基于提供的 DataSet 返回 SubscriptionResultOption对象,该对象包含有关对此发布的订阅的其他信息。
EnumTracerTokenHistory - 返回 DataSet 对象,该对象包含有关指定跟踪令牌的滞后时间的信息。
EnumTracerTokens - 返回 DataSet 对象,该对象包含有关插入到此发布的所有跟踪令牌的信息。
监视正等待在订阅服务器上应用的事务处理命令
使用 ServerConnection 类创建与分发服务器的连接。
通过下列方法之一获取 PublicationMonitor 对象。
创建的 PublicationMonitor 类的实例。 为发布设置 DistributionDBName、 PublisherName、 PublicationDBName和 Name 属性,并将 ConnectionContext 属性设置为步骤 1 中创建的 ServerConnection 。 调用 LoadProperties 方法获取该对象的属性。 如果该方法返回
false
,则表示发布属性定义不正确,或表示该发布不存在。从通过现有 PublicationMonitorCollection 对象的 PublicationMonitors 属性访问的 PublisherMonitor 中获取。
执行 TransPendingCommandInfo 方法,这种方法可返回 PendingCommandInfo 对象。
使用该 PendingCommandInfo 对象的属性可估算挂起命令的数目以及完成这些命令的传递所需的时间。
为发布设置监视器警告阈值
使用 ServerConnection 类创建与分发服务器的连接。
通过下列方法之一获取 PublicationMonitor 对象。
创建的 PublicationMonitor 类的实例。 为发布设置 DistributionDBName、 PublisherName、 PublicationDBName和 Name 属性,并将 ConnectionContext 属性设置为步骤 1 中创建的 ServerConnection 。 调用 LoadProperties 方法获取该对象的属性。 如果该方法返回
false
,则表示发布属性定义不正确,或表示该发布不存在。从通过现有 PublicationMonitorCollection 对象的 PublicationMonitors 属性访问的 PublisherMonitor 中获取。
执行 EnumMonitorThresholds 方法。 请注意 ArrayList 对象已返回的 MonitorThreshold 中的当前阈值设置。
执行 ChangeMonitorThreshold 方法。 传递以下参数:
metricID - Int32 值,它表示下表中的监视阈值指标:
值 说明 1 expiration
- 监视对事务发布的订阅是否即将过期。2 latency
- 监视对事务发布的订阅的性能。4 mergeexpiration
- 监视对合并发布的订阅是否即将过期。5 mergeslowrunduration
- 通过低带宽 (拨号) 连接监视合并同步的持续时间。6 mergefastrunduration
- 监视通过高带宽 (LAN) 连接进行的合并同步的持续时间。7 mergefastrunspeed
- 监视通过高带宽 (LAN) 连接进行的合并同步的同步速率。8 mergeslowrunspeed
- 监视通过低带宽(拨号)连接进行的合并同步的同步速率。enable - Boolean 值。
thresholdValue - 用于设置阈值的整数值。
shouldAlert - 用于指示在此阈值是否应生成警报的整数。