http://support.microsoft.com/kb/955726/zh-cn
在 Microsoft SQL Server 2008,群集实例上运行 syspolicy_purge_history 作业时,可能无法 syspolicy_purge_history SQL Server 代理作业。 您可能会收到类似于以下 syspolicy_purge_history 作业的历史记录日志文件的:
日期 datetime
记录作业历史记录 (syspolicy_purge_history)
步骤 ID 3
服务器 SQLVirtualName \ instancename
作业名称 syspolicy_purge_history
步骤名称删除虚拟系统健康记录。
持续时间 00:00:33
SQL 严重性 0
SQL 消息 ID 0
Emailed 的运算符
运算符网络发送
分页的运算符
重试尝试 0
消息
作为用户执行: user。 作业脚本遇到以下错误。 这些错误未停止该脚本: A 作业步骤收到 PowerShell 脚本中的错误在第 1 行。 相应的行是 '(get-item SQLSERVER:\SQLPolicy\SQLVirtualName\instancename).EraseSystemHealthPhantomRecords()。
更正该脚本,然后重新安排该作业。 包含由 PowerShell 返回的错误信息: SQL Server PowerShell 提供程序错误: 无法连接到 SQLVirtualName \ instancename。 无法连接到服务器 SQLVirtualName \ instancename 一个连接到服务器时出现--> 出现错误了。
在连接到 SQL Server 2005 时在默认设置下 SQL Server 不允许远程连接的事实可能会导致此失败。 (provider: named pipes provider, error: 40-could not open a connection to SQL Server)] 无法连接到服务器 SQLVirtualName \ instancename。 建立到服务器连接时出错。 在连接到 SQL Server 2005 时在默认设置下 SQL Server 不允许远程连接的事实可能会导致此失败。 (提供程序: 命名的管道提供程序,错误: 40-可能没有打开 SQL Server 连接) '
作业步骤在 PowerShell 脚本中收到第 1 行处的一个错误。 相应的行是 '(get-item SQLSERVER:\SQLPolicy\SQLVirtualName\instancename).EraseSystemHealthPhantomRecords()。 更正该脚本,然后重新安排该作业。 包含由 PowerShell 返回的错误信息: 无法找到路径 SQLSERVER:\SQLPolicy\ SQLVirtualName \ instancename 因为不存在。 在 PowerShell 脚本中的作业步骤收到在第 1 行错误。 相应的行是 '(get-item SQLSERVER:\SQLPolicy\SQLVirtualName\instancename).EraseSystemHealthPhantomRecords()。 更正该脚本,然后重新安排该作业。 包含由 PowerShell 返回的错误信息: 您不能调用方法空值表达式。 '. 进程退出代码为-1。 该步骤失败。
如果 syspolicy_purge_history 作业而不是群集实例的虚拟服务器名称中使用的计算机节点名称,则可能发生此问题。
要解决此问题,请使用以下方法之一。
回到顶端
方法 1: 编辑 syspolicy_purge_history 作业
编辑 syspolicy_purge_history 作业的步骤 3。 要这样做,请按下列步骤操作:
启动 SQL Server Management Studio。
SQL Server 代理 ,依次展开和 作业 。
右键单击 syspolicy_purge_history ,然后单击 属性 。
单击 步骤 。
单击 清除虚拟系统运行状况记录 ,然后单击 编辑 。
在 命令 框通过使用群集实例的虚拟服务器名称替换计算机节点名称。
单击 确定 ,然后单击 关闭 。
回到顶端
方法 2: 重新创建 syspolicy_purge_history 作业
重新创建 syspolicy_purge_history 作业,运行下面的 Transact-SQL 语句。
DECLARE @jobId uniqueidentifier
-- Obtain the current job identifier that is associated with the PurgeHistory
SELECT @jobId = CAST(current_value AS uniqueidentifier)
FROM msdb.dbo.syspolicy_configuration_internal
WHERE name = N'PurgeHistoryJobGuid'
-- Delete the job identifier association in the syspolicy configuration
DELETE FROM msdb.dbo.syspolicy_configuration_internal
WHERE name = N'PurgeHistoryJobGuid'
-- Delete the offending job
EXEC msdb.dbo.sp_delete_job @job_id = @jobId
-- Re-create the job and its association in the syspolicy configuration table
EXEC msdb.dbo.sp_syspolicy_create_purge_job