我开发和设计监控查询至少3个BizTalk项目和它也覆盖你的。在我展示实际查询之前,我尝试先解释我的想法。
这个想法是尽可能多地使用BizTalk工件作为一个同时具有端口状态和消息传递状态的结果表。通过这种方式,可以很容易地监控某件事实际上是否存在错误。港口地位相当简单,因为它只是一个选择。消息状态位于端口的一个实例上。首先我向您展示查询的ERD。
在上面ERD你可以看到我的查询中使用的所有表和字段,下面的图片说明如何表一起使用:
现在在这里,正在监视Sendports,接收位置和编排的查询:
--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
在ab Ove查询I将状态映射到编号,对于我使用与BizTalk相同的消息传递状态,对于端口状态I,将Enabled和Disabled映射到4和5,以便我可以在同一列中看到接收位置状态。
可能的消息传递状态:
- 0:无
- 1:开始
- 2:已完成
- 3:终止
- 4:悬浮
- 5:准备运行
- 6:活性
- 8:脱水
- 16:已完成随着丢弃的消息
- 32:悬浮非可恢复
- 64:在断点
可能的端口状态:
- 0:无
- 1:Unenlisted
- 2:停止
- 3:入门
- 4:启用
- 5:禁用
非常好的答案 – OnTheFly
回答这个问题值得赞扬的努力! –