如何从BizTalkMgmtDB查询BizTalk主机实例的运行状态?
查询BizTalk主机实例的实时运行状态
BizTalkMgmtDB中的adm_HostInstance等静态存储表仅记录主机实例的配置信息(比如是否禁用),并不存储实时的运行/停止状态。要获取主机实例的当前状态,可通过以下方式实现:
1. 使用BizTalk内置存储过程
BizTalk提供了bts_GetRunningHostInstances存储过程,专门用于获取实时运行的主机实例列表,执行后能直接看到正在运行的实例:
EXEC bts_GetRunningHostInstances;
该存储过程返回的结果集包含HostName、ServerName、Running(1表示运行中,0表示未运行)等核心字段。
2. 结合WMI查询(覆盖更全面状态)
如果需要获取“不适用”这类特殊状态(比如隔离主机的状态,其依赖IIS等宿主进程),可以通过WMI查询root/MicrosoftBizTalkServer命名空间下的MSBTS_HostInstance类,示例PowerShell命令:
Get-WmiObject -Namespace root/MicrosoftBizTalkServer -Class MSBTS_HostInstance | Select-Object HostName, ServerName, ServiceState
其中ServiceState对应的状态映射:
- 1: 已停止
- 4: 运行中
- 7: 已暂停
- 其他值对应过渡状态(如启动中、暂停中)
优化原有SQL查询(关联配置与运行状态)
如果需要将配置信息和运行状态整合展示,可以把存储过程的结果与原有查询关联:
SELECT h.Name AS HostInstanceName, CASE WHEN h.HostType = 1 THEN 'In-Process' WHEN h.HostType = 2 THEN 'Isolated' ELSE 'Unknown' END AS HostType, s.Name AS ServerName, CASE WHEN hi.DisableHostInstance = -1 THEN 'Yes' WHEN hi.DisableHostInstance = 0 THEN 'No' ELSE 'Unknown' END AS IsDisabled, CASE WHEN rh.Running = 1 THEN '运行中' ELSE '已停止' END AS CurrentState FROM adm_HostInstance hi JOIN adm_Server2HostMapping shm ON hi.Svr2HostMappingId = shm.Id JOIN adm_Host h ON shm.HostId = h.Id JOIN adm_Server s ON shm.ServerId = s.Id LEFT JOIN ( SELECT HostName, ServerName, Running FROM bts_GetRunningHostInstances() ) rh ON h.Name = rh.HostName AND s.Name = rh.ServerName ORDER BY HostInstanceName;
注意:隔离主机的状态无法通过SQL直接获取“不适用”标识,需通过WMI或BizTalk管理控制台查看。
内容的提问来源于stack exchange,提问作者Sanjay Adkar
相关产品推荐
相关产品推荐

