将大多数BT-Applications从BizTalk 2009迁移到BizTalk 2010环境后,我们开始删除旧应用程序和未使用的主机。在这个过程中,我们最终得到了一个僵尸主机实例。
这导致bts_CleanupDeadProcesses startet失败并显示错误“Executed as user:RH \ sqladmin。找不到存储过程'dbo.int_ProcessCleanup_ProcessLabusHost'。 [SQLSTATE 42000](错误2812)。这一步失败了。“
在查看CleanupDeatProcess进程后,我发现在BTMsgBox.ProcessHeartBeats表中找到了僵尸主机实例,dtNextHeartbeatTime设置为删除主机的时间。
答案 0 :(得分:0)
(我假设您的服务中不再存在主机实例进程,并且SQL代理作业失败)
从查看[dbo].[bts_CleanupDeadProcesses]
作业的来源,它通过dbo.ProcessHeartbeats
表循环,用光标(btsProcessCurse
,lol)寻找'死'的听觉声。
每个流程实例都有自己的清理sproc int_ProcessCleanup_[HostName]
和心跳监视器调用的sproc,即bts_ProcessHeartbeat_[HostName]
(尽管FROR SPROC将其称为@ApplicationName),由WHERE (s.dtNextHeartbeatTime < @dtCurrentTime)
过滤
因此很有可能只删除已删除/僵尸主机的记录(或者,如果你不是那么勇敢,只需在某个时间更新死主机实例的心跳记录上的下一个dtNextHeartbeatTime
下个世纪)。无论哪种方式,SQL代理作业都应该跳过死实例。
另一种方法是尝试通过管理控制台重新创建具有相同名称的主机和实例,只是再次(正确地)删除它们。但是,由于未删除的对象,BizTalk将无法在上面创建2个SPROC,因此可能会导致其他问题。
但是,在你确认这项工作首先是试运行之前,我显然不会在你的生产环境中这样做。
看起来其他人遇到类似情况here
朱小东here
对心跳机制的工作原理也有很好的了解。答案 1 :(得分:0)
你试过BTSTerminator吗?这适用于一次性清理。
http://www.microsoft.com/en-us/download/details.aspx?id=2846