是否可以通过一个查询监视BizTalk工件?

是否可以通过一个查询监视BizTalk工件?,biztalk,Biztalk,是否有人编写了一个查询来同时监视所有BizTalk工件 我的查询不起作用,我似乎无法完成: 这是我的: select RL.Name AS rlName , ('Url: ' + RL.InboundTransportURL + ' | Receiveport: ' + RP.nvcName) AS rlDescription , RL.Disabled AS rlStatus , RL.uidCustomCfgID as uidGuid from BizTalk

是否有人编写了一个查询来同时监视所有BizTalk工件

我的查询不起作用,我似乎无法完成:

这是我的:

select
    RL.Name AS rlName
    , ('Url: ' + RL.InboundTransportURL + ' | Receiveport: ' + RP.nvcName) AS rlDescription
    , RL.Disabled AS rlStatus
    , RL.uidCustomCfgID as uidGuid
from BizTalkMgmtDb.dbo.adm_ReceiveLocation AS RL WITH(READPAST, ROWLOCK)
    left join BizTalkMgmtDb.dbo.bts_receiveport AS RP WITH(READPAST, ROWLOCK)
        ON RL.ReceivePortId = RP.nID
--Readpast and Rowlock are needed to avoid lock escalation.

我为至少3个BizTalk构件开发并设计了一个监视查询,它也涵盖了您的构件。在显示实际查询之前,我尝试先解释我的想法

其思想是使用尽可能多的BizTalk构件作为一个结果表,同时包含端口状态和消息状态。通过这种方式,可以很容易地监控某件事情是否真的出了问题。端口状态相当简单,因为它只是一个选择。消息状态位于端口的实例上。首先,我向您展示查询的ERD

在上面的ERD中,您可以看到我的查询中使用的所有表和字段,下图说明了如何将这些表一起使用:

现在,该查询正在监视发送端口、接收位置和业务流程:

--sendports, receive locations and orchestrations combined into one query
Declare @PortStatus as bigint  = null
Declare @MessagingStatus as bigint  = null
Declare @Name as Varchar(500) = null
Declare @Type as Varchar(500) = null
Declare @UniqueID as Varchar(500) = null 

;with combined as 
(
     (
        select s.uidGUID as uidGuid, s.nvcName AS Name, nPortStatus as PortStatus, 'SENDPORT' as [Type], nvcDescription as Description
        from dbo.[bts_sendport] AS s
     )
     union all
     (  
        select o.uidGUID as uidGuid, o.nvcName AS Name, nOrchestrationStatus as PortStatus, 'ORCHESTRATION' as [Type], nvcDescription as Description
        from dbo.[bts_Orchestration] AS o
     )
     union all
     (
        select
        RL.uidCustomCfgID as UniqueKey, RL.Name AS Name,
        CASE WHEN RL.Disabled = 0 THEN 4 ELSE 5 END as [PortStatus],
        'RECEIVELOCATION' as [Type]
        , ('Url: ' + RL.InboundTransportURL + ' | Receiveport: ' + RP.nvcName) as Description
        from BizTalkMgmtDb.dbo.adm_ReceiveLocation AS RL WITH(READPAST, ROWLOCK)
        left join BizTalkMgmtDb.dbo.bts_receiveport AS RP WITH(READPAST, ROWLOCK)
        ON RL.ReceivePortId = RP.nID 
     )
)

select uidGuid as UniqueKey, Name, Description,
CASE WHEN i.nState is NULL THEN 0 ELSE COUNT(*) END as [MessageCount],
[Type], i.nState as MessagingStatus, c.PortStatus
from [BizTalkMsgboxDb].dbo.[Instances] AS i WITH (NOLOCK)
    right join combined c ON i.uidServiceID = c.uidGuid
    WHERE 
    (@Type is null OR [Type] like '%' + @Type + '%') 
    AND uidGuid = COALESCE(@UniqueID, uidGuid) 
group by uidGUID, Name, i.nState, [Type], c.PortStatus, Description
having  c.PortStatus = COALESCE(@PortStatus, c.PortStatus) 
    AND (@MessagingStatus is NULL OR i.nState = @MessagingStatus) 
order by [Type], c.PortStatus, i.nState
在上面的查询中,我将状态映射为number,对于消息状态,我使用与BizTalk相同的方法;对于端口状态,我将Enabled和Disabled映射为4和5,以便在同一列中查看接收位置状态

可能的消息状态:

  • 0:无
  • 1:开始
  • 2:已完成
  • 3:终止
  • 4:暂停
  • 5:准备好运行了吗
  • 6:主动
  • 8:脱水
  • 16:使用丢弃的消息完成
  • 32:暂停不可恢复
  • 64:在断点中
可能的港口国:

  • 0:无
  • 1:未上市
  • 2:停止
  • 3:开始
  • 4:启用
  • 5:残疾人士

您可以参考下面的文章,它解释了如何跟踪所有主机实例,并在停止时启动它们。同样的技术也可以应用于其他BizTalk构件:

回答这个问题的努力值得称赞!