此监视器将检查此分发服务器服务的所有发布的分发代理的状态。
一个或多个分发代理失败。
可以解释分发代理失败的部分原因包括:
订阅未初始化且快照不可用。
分发代理正在没有足够权限的帐户下运行。
查询超时值。
订阅服务器上存在主键冲突或“找不到行”错误。
无法连接到分发或订阅服务器数据库。
非交互式桌面堆栈内存耗尽。 http://support.microsoft.com/kb/949296
分发代理无法在“C:\Program Files\Microsoft SQL Server\100\COM”目录中创建临时文件(适用于 SQL 2008 和 SQL 2008 R2) http://support.microsoft.com/kb/956032
分发代理无法查看快照文件
SQL 代理服务没有所需的权限。
传递给分发代理的参数不正确。
分发代理正在没有足够权限的帐户下运行。
如果复制拓扑中涉及多个服务器,SQL Server 代理需要在域帐户下运行。
分发代理帐户必须是分发和订阅服务器数据库上的 [db_owner] 固定角色的成员。
查询超时。
检查分发服务器和订阅服务器上的阻塞,并检查分发代理是否已阻塞。请解决阻塞问题并重启代理。
将分发代理的查询超时增加到一个较大的值。
订阅服务器上存在主键冲突或“找不到行”错误。
检查项目属性以确认正在复制所有插入、更新和删除命令以便不跳过任何内容。
验证用户是否没有写入订阅服务器数据库的权限。
将分发服务器代理配置为使用 -skiperrors 参数以忽略此错误(使用此方法作为临时修复方法并解决基本问题)。
无法连接到分发或订阅服务器数据库。
分发代理帐户必须是分发和订阅服务器数据库上的 [db_owner] 固定角色的成员。检查是否可以从 SQL Server Management Studio 同时连接到订阅服务器和分发数据库。
在分发服务器和发布服务器上,在防火墙中启用 SQL Server 使用的 TCP 和 UDP 端口。
非交互式桌面堆栈内存耗尽。
使用此 KB 中的以下解决方案来解决问题。
分发代理无法在 "C:\Program Files\Microsoft SQL Server\100\COM" 目录中创建临时文件(适用于 SQL 2008 和 SQL 2008 R2)
使用此 KB 中的解决方案来解决此问题。
分发代理无法读取快照文件。
使用 UNC 路径来存储快照文件夹。共享该文件夹并为分发代理帐户授予读取权限。
SQL 代理服务没有所需的权限。
遵循 http://msdn.microsoft.com/library/ms143504.aspx 并确保 SQL 代理服务 SID 具有以下权限:
以服务身份登录(SeServiceLogonRight)
替换进程级令牌(SeAssignPrimaryTokenPrivilege)
绕过遍历检查(SeChangeNotifyPrivilege)
调整进程的内存配额(SeIncreaseQuotaPrivilege)
传递到分发代理命令的参数不正确。
检查传递给分发代理命令行的参数。
该进程无法大容量复制到表中
减少在分发代理作业中传递到 –BCPBatchSize 参数的值
重新运行分发代理,并添加参数 -OutputVerboseLevel 2。 此操作将提供有关哪些语句失败的详细信息。
仅 sysadmin 或 db_owner 角色的成员可以执行此操作。
如果分发数据库和订阅服务器在不同的域中,且域之间不存在信任关系(特别是订阅服务器域不信任分发域),则必须使用指定的命名帐户。
在订阅服务器上查看 SQL Server 代理的错误详细信息,订阅服务器名称必须为显示的“订阅”的第一部分。
在订阅服务器上,检查此代理登录帐户是否为有效登录。
在订阅服务器上,检查代理登录帐户是否有被复制数据库上的“sysadmin”或“db_owner”角色。
http://technet.microsoft.com/library/ms147328.aspx
名称 | 说明 | 默认值 |
警报优先级 | 定义警报优先级。 | 正常 |
警报严重性 | 定义警报严重性。 | 错误 |
已启用 | 启用或禁用工作流。 | 是 |
估计作业周期 | 用来检查作业计划合规性的阈值 | 15 |
生成警报 | 定义工作流是否生成警报。 | 是 |
间隔(秒) | 运行工作流的重复间隔时间(秒)。 | 300 |
显示具有未知状态的作业 | 包括具有未知状态的作业,以监视输出和警报上下文。将影响运行状况。 | 否 |
同步时间 | 同步时间 |
|
超时(秒) | 指定允许工作流在被关闭并标记为失败之前运行的时间。 | 300 |
数据库连接超时(秒) | 如果在指定期间无法访问数据库,工作流将失败并注册一个事件。 | 15 |
Target | Microsoft.SQLServer.2016.Replication.Distributor | ||
Parent Monitor | System.Health.PerformanceState | ||
Category | PerformanceHealth | ||
Enabled | True | ||
Alert Generate | True | ||
Alert Severity | Error | ||
Alert Priority | Normal | ||
Alert Auto Resolve | True | ||
Monitor Type | Microsoft.SQLServer.2016.Replication.MonitorType.ReplicationAgentState | ||
Remotable | True | ||
Accessibility | Public | ||
Alert Message |
| ||
RunAs | Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor |
<UnitMonitor ID="Microsoft.SQLServer.2016.Replication.Monitor.DistributionAgentState" Accessibility="Public" Enabled="true" Target="MS2RD!Microsoft.SQLServer.2016.Replication.Distributor" ParentMonitorID="Health!System.Health.PerformanceState" Remotable="true" Priority="Normal" TypeID="Microsoft.SQLServer.2016.Replication.MonitorType.ReplicationAgentState" ConfirmDelivery="false" RunAs="MSRL!Microsoft.SQLServer.Replication.Monitoring.RunAs.Monitor">
<Category>PerformanceHealth</Category>
<AlertSettings AlertMessage="Microsoft.SQLServer.2016.Replication.Monitor.DistributionAgentState.AlertMessage">
<AlertOnState>Error</AlertOnState>
<AutoResolve>true</AutoResolve>
<AlertPriority>Normal</AlertPriority>
<AlertSeverity>Error</AlertSeverity>
<AlertParameters>
<AlertParameter1>$Data/Context/Property[@Name='Message']$</AlertParameter1>
</AlertParameters>
</AlertSettings>
<OperationalStates>
<OperationalState ID="Health" MonitorTypeStateID="Health" HealthState="Success"/>
<OperationalState ID="Error" MonitorTypeStateID="Error" HealthState="Error"/>
<OperationalState ID="Warning" MonitorTypeStateID="Warning" HealthState="Warning"/>
</OperationalStates>
<Configuration>
<SqlTimeout>15</SqlTimeout>
<ConnectionString>$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericDistributor']/ConnectionString$</ConnectionString>
<XPathName>Distribution$Target/Property[Type='MSRL!Microsoft.SQLServer.Replication.Library.GenericDistributor']/ConnectionString$</XPathName>
<ShowJobsWithUnknownState>false</ShowJobsWithUnknownState>
<EstimatedJobDuration>15</EstimatedJobDuration>
<IntervalSeconds>300</IntervalSeconds>
<SyncTime/>
<TimeoutSeconds>300</TimeoutSeconds>
</Configuration>
</UnitMonitor>