我最近为客户端在 WSUS 环境中添加了多台下游服务器。所有服务器都运行 WSUS 版本 3 SP2 (3.2.7600.226)。除一台服务器外,所有服务器似乎都运行良好。
有问题的位置可以运行,客户端已注册并正在接收更新。但是,自首次同步以来的每次同步都失败了。WSUS 管理控制台针对每次失败的同步显示以下错误:
SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout)
at Microsoft.UpdateServices.DatabaseAccess.DBConnection.ReadOneRow()
at Microsoft.UpdateServices.Internal.DataAccess.HideUpdatesForReplicaSync(String xmlUpdateIds)
at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.ProcessHiddenUpdates(Guid[] hiddenUpdates)
at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.ReplicaSync()
at Microsoft.UpdateServices.ServerSync.CatalogSyncAgentCore.ExecuteSyncProtocol(Boolean allowRedirect)
这发生在同步结束时,此时服务器已从上游服务器收到新的更新。更改似乎已正确保存,因为新、修订和过期计数并未不断攀升。
每次发生故障时,我还会在事件查看器中看到事件 ID10022
和应用程序日志。10032
我尝试在上游和下游服务器上运行服务器清理向导,但当它进入删除未使用更新的阶段时,它就挂起了。大约一周前,就在配置所有下游服务器之前,我在上游服务器上运行了它,当时它运行良好。
我也成功运行了来自此 Microsoft 论坛讨论的重新索引脚本在两台服务器上。(此后清理向导仍然挂起。)
我在网上搜索了好多关于这个问题的信息,但没能找到任何可以解决这种情况的方法。我不得不认为这个问题是下游服务器出现故障所致,因为其他服务器都运行正常。
有什么方法可以准确确定超时时它在做什么?
答案1
看来我找到了问题的解决方案,尽管我不太清楚为什么在其他机器上没有这个问题。可能是 Windows Server 不同版本/服务包上的内部数据库之间存在差异。
在 SQL Server 配置管理器(包含在 SQL Server Management Studio 中)中,内部数据库实例(MICROSOFT##SSEE)在 SQL Server 网络配置下禁用了命名管道和 TCP/IP。
启用两者后,同步开始正常工作。我现在已经运行了多个同步,它们都运行正常。