CONNECTED Conference 2023 - Aufzeichnungen jetzt hier verfügbar +++                     

Suche

über alle News und Events

 

Alle News

 

Warum wir uns als Sponsor engagieren, warum und...

Weiterlesen

Für einen Kunden sollen Produktkataloge im XML...

Weiterlesen

Nach 2015 wird die QUIBIQ Schweiz im Jahr 2022...

Weiterlesen

Microsoft hat den Mainstream-Support bis zum 11....

Weiterlesen

Zwei Tage im Zeichen der Integration auf der...

Weiterlesen

Die Zertifizierung als attraktiver Arbeitgeber...

Weiterlesen

Ein knackiger und kompakter Überblick auf die...

Weiterlesen

Auch am dritten Tag gab es interessante...

Weiterlesen

Die großen Ankündigungen aus dem ersten Tag...

Weiterlesen

Keynote - Stand der Integration - Jon Fancey:...

Weiterlesen

How-to: BizTalk Zombie Instanzen überwachen, finden und lösen

Wir sind auf ein seltsames Phänomen bei einem alten BizTalk Server gestoßen: In seltenen Fällen sind Prozessinstanzen auf einer Hostinstanz hängengeblieben. Diese wurden zwar dauerhaft als aktiv angezeigt, wurden jedoch nie verarbeitet. Nur ein Hostinstanz-Neustart löst das Problem und arbeitet die hängenden Instanzen ab.

Dieses Phänomen lässt sich zwar in der Group Hub Query herausfinden. Es war jedoch nötig, eine Überwachung zu schreiben, die proaktiv vor solchem Zombies warnt. Aus diesem Grund habe ich die eigentliche Group Hub Query innerhalb eines SQL-Scripts nachgestellt, um so mit verschiedenen Parametermöglichkeiten auf verschiedene Instanzen aufmerksam werden zu können. Die Query lässt sich in alle möglichen Richtungen erweitern: zu langlaufende Instanzen, Seitenbeziehungen zwischen verschiedenen Prozessen, zu lang wartende Instanzen etc. Am besten passt man sich dieses Skript auf seine Bedürfnisse an und ruft es an in einem SQL-Job auf. Dieser sollte natürlich mehrmals täglich laufen. Schlägt dieser Job dann fehl, sollte das in der normalen Überwachung bereits für die nötigen Benachrichtigungen sorgen. Wenn nicht, dann hier schnell nachbessern!

Hier ein ungefiltertes Beispielresultat der Query:

 

-- Temporary Table for SP Result
Declare @TempTable TABLE(
uidInstanceId nvarchar(max),
uidClassId  nvarchar(max),
uidServiceId nvarchar(max),
dtCreated DATETIME,
nState nvarchar(max),
nvcApplicationName nvarchar(max),
nvcUserState nvarchar(max),
nvcName nvarchar(max),
nvcProcessingServer nvarchar(max),
nPendingOperation nvarchar(max),
dtPendingOperationSubmitTime nvarchar(max),
dtSuspendTimeStamp nvarchar(max),
nvcAdapter nvarchar(max),
nvcURI nvarchar(max),
nErrorCategory nvarchar(max),
nvcErrorId nvarchar(max),
nvcErrorDescription nvarchar(max),
nvcErrorProcessingServer nvarchar(max)
)

-- Execute MsgBox Query SP
InsertInto @TempTable
exec BiztalkMsgBoxDB.dbo.ops_OperateOnInstances@snOperation=0,@fMultiMessagebox=0,@uidInstanceID='00000000-0000-0000-0000-000000000000',@nvcApplication=N'',@snApplicationOperator=0,@nvcHost=N'',@snHostOperator=0,@nServiceClass=111,@snServiceClassOperator=0,@uidServiceType='00000000-0000-0000-0000-000000000000',@snServiceTypeOperator=0,@nStatus=495,@snStatusOperator=1,@nPendingOperation=1,@snPendingOperationOperator=0,@dtPendingOperationTimeFrom='1753-01-01 00:00:00',@dtPendingOperationTimeUntil='9999-12-31 22:59:59.997',@dtStartFrom='1753-01-01 00:00:00',@dtStartUntil='9999-12-31 22:59:59.997',@nvcErrorCode=N'',@snErrorCodeOperator=0,@nvcErrorDescription=N'',@snErrorDescriptionOperator=0,@nvcURI=N'',@snURIOperator=0,@dtStartSuspend='1753-01-01 00:00:00',@dtEndSuspend='9999-12-31 22:59:59.997',@nvcAdapter=N'',@snAdapterOperator=0,@nGroupingCriteria=0,@nGroupingMinCount=0,@nMaxMatches=1001,@uidAccessorID='C5C2094C-B8BC-4FE1-9794-46EAD5E5EC78',@nIsMasterMsgBox=0
 

-- Prepare Data for Result
DECLARE @SendPortNames TABLE(
uGUID nvarchar(max),
Namenvarchar(max))

INSERTINTO @SendPortNames
EXEC BiztalkMgmtDb.[dbo].[ops_LoadSendPortServiceNames]

DECLARE @ReceivePortNames TABLE(
uGUID nvarchar(max),
Namenvarchar(max))

INSERTINTO @ReceivePortNames
EXEC BiztalkMgmtDb.[dbo].[ops_LoadReceivePortServiceNames]

DECLARE @OrchestrationNames TABLE(
uGUID nvarchar(max),
Namenvarchar(max))

INSERTINTO @OrchestrationNames
EXEC BiztalkMgmtDb.[dbo].[ops_LoadOrchestrationServiceNames]

Update @TempTable
SET uidServiceId = o.Name
from
@TempTable t
Innerjoin @OrchestrationNames o on o.uGUID = t.uidServiceId

Update @TempTable
SET uidServiceId = s.Name
from
@TempTable t
Innerjoin @SendPortNames s on s.uGUID = t.uidServiceId

Update @TempTable
SET uidServiceId = s.Name
from
@TempTable t
Innerjoin @ReceivePortNames s on s.uGUID = t.uidServiceId

-- Result Query

Select nvcApplicationName as HostInstance, nvcName asApplication,uidServiceId asName, dtCreated as StartTimeStamp,CASE nState
    WHEN 1 THEN'Ready To Run'
    WHEN 2 THEN'Active'
    WHEN 4 THEN'Suspended Resumable'
    WHEN 8 THEN'Dehydrated'
    WHEN 16 THEN'Completed With Discarded Messages'
    WHEN 32 THEN'Suspended Non-Resumable'
      WHEN 64 THEN'In Breakpoint'

    ENDasStatefrom @TempTable

Die Query benutzt die gleichen BizTalk hauseigenen Funktionalitäten, wie es die Group Hub Query auch tun würde.

Man kann sich die Mühe machen und dann noch die Verlinkungen zu den einzelnen Nachrichtenfehlermeldungen herstellen, um so noch gezielter überwachen zu können.

Ich hoffe, dieser Tipp hilft euch weiter und ihr findet viele Einsatzmöglichkeiten in der Überwachung.
Beste Grüße aus Stuttgart
Ben 

Ihre Kontaktmöglichkeiten

Sie haben eine konkrete Frage an uns


 

Bleiben Sie immer auf dem Laufenden


 

Mit meinem "Ja" erkläre ich mich mit der Verarbeitung meiner Daten zur Zusendung von Informationen einverstanden. Ich weiß, dass ich diese Erklärung jederzeit durch einfache Mitteilung widerrufen kann. Bei einem Nein an dieser Stelle erhalte ich zukünftig keine Informationen mehr.

© QUIBIQ GmbH · Impressum · Datenschutz