![syspolicy_purge_history 生成失败的登录](https://linux22.com/image/532644/syspolicy_purge_history%20%E7%94%9F%E6%88%90%E5%A4%B1%E8%B4%A5%E7%9A%84%E7%99%BB%E5%BD%95.png)
我有一台开发服务器,它有 3 个实例:默认、A 和 B。它是一台物理服务器,非集群。每当 syspolicy_purge_history 作业在凌晨 2 点运行时,我都会收到登录失败警报。查看作业步骤,所有步骤都已成功完成。似乎在“清除幻影系统健康记录”步骤中的某个时刻发生了登录失败。
实例 B 上的 syspolicy_purge_history 运行正常。
默认实例上的 syspolicy_purge_history 似乎想要连接到实例 B,导致:
Error: 18456, Severity: 14, State: 11. Login failed for user
'Machinename\sqlsvc-B'. Reason: Token-based server access validation
failed with an infrastructure error. Check for previous errors.
[CLIENT: <local machine>] .
Powershell 没有报告任何错误。
A 实例上的 syspolicy_purge_history 似乎想要连接到默认实例,导致
Error: 18456, Severity: 14, State: 11. Login failed for user
'Machinename\sqlsvc-Default'. Reason: Token-based server access
validation failed with an infrastructure error. Check for previous
errors. [CLIENT: <local machine>] .
然后它尝试连接 B 实例,结果
Error: 18456, Severity: 14, State: 11. Login failed for user
'Machinename\sqlsvc-B'. Reason: Token-based server access validation
failed with an infrastructure error. Check for previous errors.
[CLIENT: <local machine>] .
Powershell 没有报告任何错误。
我尝试了这里发布的步骤,希望他们能够修复它。 http://support.microsoft.com/kb/955726 但再次强调,这不是虚拟服务器,也不在集群中。您有什么建议吗?谢谢。
答案1
我使用了发布在连接页面由“Kyle Neier”撰写。这对我有用。
只需将 SQL 代理作业“syspolicy_purge_history”(在默认实例上运行)第 3 步中的 PowerShell 代码替换为以下内容:
$SQLServerConnection = New-Object System.Data.SqlClient.SqlConnection
$SQLServerConnection.ConnectionString = "Data Source=$(ESCAPE_NONE(SRVR));Initial Catalog=master;Integrated Security=SSPI;Application Name=syspolicy_purge_history"
$PolicyStoreConnection = New-Object Microsoft.SqlServer.Management.Sdk.Sfc.SqlStoreConnection($SQLServerConnection)
$PolicyStore = New-Object Microsoft.SqlServer.Management.Dmf.PolicyStore ($PolicyStoreConnection)
$PolicyStore.EraseSystemHealthPhantomRecords()
答案2
几周前我遇到了这个问题。
执行方法 2(重新创建 syspolicy_purge_history 作业)后的结果是什么?
关于您的评论“默认实例上的 syspolicy_purge_history 似乎想要连接到实例 B”,您是否修改了步骤 3(擦除 Phantom 系统健康记录)以便它连接到默认实例而不是 B 实例?
答案3
这是在 Windows Server 2008 上。执行方法 2 后,出现相同的错误。步骤 3 显示连接到相应的实例。
默认实例
SQLSERVER:\SQLPolicy\TEST\DEFAULT).EraseSystemHealthPhantomRecords()
实例 A
SQLSERVER:\SQLPolicy\TEST\A).EraseSystemHealthPhantomRecords()
实例 B
SQLSERVER:\SQLPolicy\TEST\B).EraseSystemHealthPhantomRecords()
答案4
我在一台服务器上有两个 2005 实例和两个 2008R2 实例。它们一直使用 NETWORK SERVICE 来提供所有服务。我将其中一个 2008R2 实例上的 SQL Server Agent 服务更改为使用专门为此目的设置的新域帐户。从那时起,每天晚上 2:00 左右,我都会在其他三个实例上使用这个新服务帐户登录失败。我从未使用过基于策略的管理。
我找到的解决方法这里似乎是将新域帐户的登录名添加到其他三个实例中。真正的解决办法似乎是让 Microsoft 向 syspolicy_purge_history 作业调用的 proc 添加一个选项,以将其范围限制为仅当前实例,将其设为默认值,并将所有这些记录在 Connect 之外的某个地方。