Per pulire un MessageBox database è possibile utilizzare una stored procedure di nome bts_CleanupMsgbox.
Questa stored si trova chiaramante nel database di messagebox, nel caso non sia disponibile è possibile crearla in questo modo.
Aprire SQL Server Query Analizer e aprire il file msgbox_cleanup_logic.sql che è presente nella directory <Dir di installazione BizTalk>\Schema
Creare la stored eseguendo lo script.
Attenzione perchè questa Stored ha due particolarità, la prima è che cancella tutti i messaggi in suspended di tutte le istanze e applicazioni e
secondo, Microsoft non supporta l' utilizzo di questa stored procedure su un BizTalk Server in produzione ma solo in ambiente di test e sviluppo.
E' chiaramente possibile adattare questa stored per eseguire la pulizia di una sola host application in questo modo.
Modificare questo punto della stored....
declare @nvcAppName nvarchar(256)
declare curse cursor for
SELECT nvcApplicationName FROM Applications
open curse
FETCH NEXT FROM curse INTO @nvcAppName
WHILE (@@FETCH_STATUS = 0)
BEGIN
exec ('truncate table [' + @nvcAppName + 'Q]')
exec ('truncate table [' + @nvcAppName + 'Q_Suspended]')
exec ('truncate table [InstanceStateMessageReferences_' + @nvcAppName + ']')
exec ('truncate table [DynamicStateInfo_' + @nvcAppName + ']')
exec ('truncate table [' + @nvcAppName + '_MessageRefCountLog]')
FETCH NEXT FROM curse INTO @nvcAppName
END
close curse
deallocate curse
in questo modo:
.........
BEGIN
exec ('truncate table [' + @nvcAppName + 'Q]')
exec ('truncate table [' + @nvcAppName + 'Q_Suspended]')
exec ('truncate table [InstanceStateMessageReferences_' + @nvcAppName + ']')
exec ('truncate table [DynamicStateInfo_' + @nvcAppName + ']')
exec ('truncate table [' + @nvcAppName + '_MessageRefCountLog]')
FETCH NEXT FROM curse INTO @nvcAppName
END
.......
E dichiarare un parametro nella stored in questo modo:
ALTER PROCEDURE [dbo].[bts_CleanupMsgbox]
@fLeaveActSubs int = 1,
@nvcAppName nvarchar(256)
AS
..........
Adesso è possibile ripulire la messagebox di BizTalk Server molto velocemente e sulla base di un singolo handler,
per questa ragione in BizTalk Server è consigliabile utilizzare più host Handler di ricezione, invio e processing,
questo metodo offre la possibilità di lavorare in modo più capillare oltre che scalabile.