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