BizTalk, Links, Maintenance, Monitoring

Linklist: Installing Microsoft Operations Manager 2007 for BizTalk

The aim of this linklist is to keep track of the links and locations I used to download and install Microsoft Operations Manager 2007 and Management Packs for BizTalk, and thus can be used by others for the same purpose.




  • System Center Operations Manager 2007 – Main site at Microsoft.


  • Review Licensing and for more information about licensing read the informational brief. Operations Manager is not an expensive product. It even comes packaged together with SQL for a reasonable cost. Check the link for the latest updated information, on purpose I wont use precise amounts, but roughly it’s $500 for the server install (or $1300 with SQL) and another $30 – $400 for each machine to monitor, depending on the demands of that machine. If it’s a BizTalk machine it’s $400. Compared to the Enterprise License for BizTalk which is $35,000 – it’s hardly worth mentioning.


  • Get the Eval version – Go here to start the process of downloading the evaluation copy of Microsoft Operations Manager 2007. If you are a TechNet Plus or MSDN subscriber, perhaps you’d rather download the full, non-evaluation, copy from there.

  • Get OpsMgr 2007 MOM 2005 Backward Compatibility Management Pack Update – you need it for the management packs we’ll install later.

  • Management Packs – Get your management packs of choice from here. There are quite a few to choose from and I’ve selected only the few I considered important in my case. Those are…

  • Microsoft Windows Server 2000/2003 Operating System Management Pack – for monitoring the operating system.

  • Microsoft SQL Server 2000/2005 Management Pack – for monitoring the database.

  • Microsoft Biztalk Server 2006 Management Pack for SC Operations Manager 2007 – for monitoring BizTalk Server.

  • You cannot install Operations Manager on your XP or Vista development machine, it must be installed on a machine (or VPC) with Windows Server 2003 and SP1. Consider downloading a Virtual Hard Drive as a starting point, for example one with Microsoft BizTalk Server 2006 R2.

  • SQL Server 2005 is required, SQL Server 2000 is not enough. Get a trial of SQL Server 2005 here or make sure the vhd you get comes with 2005, which as far as I know (at this point in time) all except the ones featuring 2008 CTPs do.

  • Some key points about the server environment you are installing to. It should not have Windows Sharepoint (if you have it uninstall it using Add/Remove Windows Components), but it should have Powershell. It should also have IIS (install using Add/Remove Windows Components), .Net 2.0, .Net 3.0  and a sufficient version of MDAC, equal to or later then 2.80.1022.0. As opposed to some other installs I’ve seen, MOM actually has a very good pre-requisites check complete with links to the installs your specific environment is missing. Above I just mention what I consider are the main ones.

BizTalk, Maintenance, SQL

How-to: Use BizTalkMgmtDb to get referenced assemblies

Sometimes when you are trying to remove an assembly from within the Administration Console you get and error saying that it’s being used. Most often you’ll get information on where it’s being used at the same time, but not always. These queries are for those times. With the help of these queries, and the knowledge gained from working with these tables you could also lookup things like assemblies that aren’t being used or on which ports a particular map or pipeline is used – information that is not easily accesible through the Administration Console.


Get Assemblies referenced by Maps on ReceivePorts

Select    ass.nvcName as Assembly,
itm.Name as Map,
rcv.nvcName as ReceivePort
from bts_receiveport_transform tr
join bt_MapSpec map on tr.uidTransformGUID = map.id
join bts_item itm on map.itemid = itm.id
join bts_assembly ass on map.assemblyid = ass.nID
join bts_receiveport rcv on rcv.nID = tr.nReceivePortID
order by Assembly, Map, ReceivePort

Get Assemblies referenced by Maps on SendPorts

Select    ass.nvcName as Assembly,
itm.Name as Map,
snd.nvcName as SendPort
from bts_sendport_transform tr
join bt_MapSpec map on tr.uidTransformGUID = map.id
join bts_item itm on map.itemid = itm.id
join bts_assembly ass on map.assemblyid = ass.nID
join bts_sendport snd on snd.nID = tr.nSendPortID
order by Assembly, Map, SendPort

Get Assemblies referenced by Pipelines on ReceiveLocations

select    ass.nvcName as Assembly,
pipe.Name as Pipeline,
loc.Name as ReceiveLocation
from adm_receiveLocation loc
join bts_pipeline pipe on pipe.ID = loc.ReceivePipelineId
join bts_assembly ass on ass.nID = nAssemblyID

Get Assemblies referenced by Pipelines on SendPorts

select    ass.nvcName as Assembly,
pipe.Name as Pipeline,
snd.nvcName as SendPort
from bts_sendport snd
join bts_pipeline pipe on pipe.ID = snd.nSendPipelineId
join bts_assembly ass on ass.nID = nAssemblyID

BizTalk, Maintenance, SQL

Clean up the MsgBox

Do you sometimes end up with instances in the admin console that just wont go away? That are pending to be suspended, but doesn’t seem to ever get there. I did just the other day. To solve this I used the SQL way of terminating these messages, which always seems to do the trick. But it’s not without risk. Thats one of the many reason why there is emphasis on not running this against production. As the technet how-to describes this procedure is empty by default, so remember to add the logic by running the msgbox_cleanup_logic.sql script. There is also an issue with this procedure and tracking but there is a kb hotfix available that solves that. Presumably it’s correct from the start in R2 but I haven’t compared the two.


In short the SQL way of doing it involves running the procedure bts_CleanupMsgbox (once it contains logic). This procedure has an optional parameter named @fLeaveActSubs which by default is 1. Running it with the optional parameter set to something other then 1 will cause all subscriptions to be removed. Not something you’d typically want. A special note here is that since SQL checks for <> 0, passing in null will cause it to behave as if you sent in 0, since null compared to anything in SQL is always false. This is an issue because if you do Script As Execute in SQL the code that gets generated will default to you passing in null:

DECLARE @RC int
DECLARE @fLeaveActSubs int
— TODO: Set parameter values here.
EXECUTE @RC = [BizTalkMsgBoxDb].[dbo].[bts_CleanupMsgbox] @fLeaveActSubs

Your ports and orchestrations will still look like their running, and in a way they are, but there are no subscriptions, so you’re likely to get a routing failure. For you to get your subscriptions back you need to unenlist the send ports and then restart them. For orchestrations this isn’t enough, here you have to go the additional length of un-binding them and then re-configure and start them.


The BizTalk Core Engine’s WebLog mentions in this post that it might also be a good idea to run bts_PurgeSubscriptions directly after, but if your SQL Agent and the PurgeSubscriptionsJob is enabled (and it should be) then this will be done as part of that job.