发布服务器的订阅状态

Microsoft.SQLServer.2014.Replication.Monitor.PublisherSubscriptionsMonitor (UnitMonitor)

此监视器将检查任何发布是否有任何非活动订阅。

Knowledge Base article:

摘要

如果未在指定保持期内同步,订阅可以停用或过期。发生的操作取决于复制类型和已超出的保持期。

原因

订阅在保持期内未成功同步。

事务:

如果订阅未在最大分发保持期(默认值为 72 小时)内同步,且分发数据库中有尚未传递到订阅服务器的更改,则在分发服务器上运行的分发清除作业会将订阅标记为已停用。订阅必须重新初始化。

合并:

如果发布的保持期为 14 天,则如果订阅未在 14 天内同步,订阅将过期。如果发布服务器在 SQL Server 2005 或更高版本上运行,且订阅代理来自 SQL Server 2005 或更高版本,则仅当该订阅的分区中的数据没有任何更改时订阅才过期。例如,假设订阅服务器仅接收德国客户的客户数据。如果保持期设置为 14 天,则仅当过去 14 天德国客户的数据发生更改时订阅才在第 14 天过期。

解决方法

检查分发/合并代理是否失败并出错。检查作业历史记录并获取详细信息。

对已处于非活动状态的订阅,请检查分发数据库的 Msrepl_errors 表中是否有任何错误。请修复此错误并重新初始化订阅。

如果事务复制中不存在任何错误,请在 MSdistribution_history 表中查看订阅变成非活动状态的原因。如果合并复制中不存在任何错误,请在 msmerge_history 表中查看订阅变成非活动状态的原因。

可替代参数

名称

说明

默认值

警报优先级

定义警报优先级。

正常

警报严重性

定义警报严重性。

警告

已启用

启用或禁用工作流。

生成警报

定义工作流是否生成警报。

间隔(秒)

运行工作流的重复间隔时间(秒)。

900

同步时间

同步时间

 

超时(秒)

指定允许工作流在被关闭并标记为失败之前运行的时间。

300

数据库连接超时(秒)

如果在指定期间无法访问数据库,工作流将失败并注册一个事件。

15

Element properties:

TargetMicrosoft.SQLServer.2014.Replication.Publisher
Parent MonitorSystem.Health.ConfigurationState
CategoryPerformanceHealth
EnabledTrue
Alert GenerateTrue
Alert SeverityWarning
Alert PriorityNormal
Alert Auto ResolveTrue
Monitor TypeMicrosoft.SQLServer.2014.Replication.MonitorType.PublisherSubscriptionsMonitor
RemotableTrue
AccessibilityPublic
Alert Message
MSSQL2014 复制: 检测到发布服务器的非活动订阅。
发布服务器(名称:“{0}”,服务器:“{1}”)已检测到非活动订阅。
信息:
{2}
RunAsMicrosoft.SQLServer.Replication.Monitoring.RunAs.Monitor

Source Code:

<UnitMonitor ID="Microsoft.SQLServer.2014.Replication.Monitor.PublisherSubscriptionsMonitor" Accessibility="Public" Enabled="true" Target="MS2RD!Microsoft.SQLServer.2014.Replication.Publisher" ParentMonitorID="Health!System.Health.ConfigurationState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2014.Replication.MonitorType.PublisherSubscriptionsMonitor" ConfirmDelivery="false" RunAs="MSRL!Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2014.Replication.Monitor.PublisherSubscriptions.AlertMessage">
<AlertOnState>Warning</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Warning</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericPublisher']/InstanceName$</AlertParameter1>
<AlertParameter2>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericPublisher']/ConnectionString$</AlertParameter2>
<AlertParameter3>$Data/Context/Property[@Name='Message']$</AlertParameter3>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Health" MonitorTypeStateID="Health" HealthState="Success"/>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<SqlTimeout>15</SqlTimeout>
<ConnectionString>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericPublisher']/Distributor$</ConnectionString>
<DistributorDbName>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericPublisher']/DistributorDatabaseName$</DistributorDbName>
<PublisherServerName>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericPublisher']/ConnectionString$</PublisherServerName>
<IntervalSeconds>900</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>