<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Nick Heppleston's BizTalk Blog</title>
	
	<link>http://www.modhul.com</link>
	<description>Experiences of a UK BizTalk Consultant</description>
	<lastBuildDate>Sun, 13 Mar 2011 17:01:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/modhul/eSXP" /><feedburner:info uri="modhul/esxp" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Including Custom Databases in the Backup BizTalk Server Job</title>
		<link>http://feedproxy.google.com/~r/modhul/eSXP/~3/bEJuoXSL-Wc/</link>
		<comments>http://www.modhul.com/2010/08/25/including-custom-databases-in-the-biztalk-backup/#comments</comments>
		<pubDate>Wed, 25 Aug 2010 14:04:19 +0000</pubDate>
		<dc:creator>Nick Heppleston</dc:creator>
				<category><![CDATA[Backup]]></category>
		<category><![CDATA[BizTalk 2009]]></category>
		<category><![CDATA[BTARN]]></category>

		<guid isPermaLink="false">http://www.modhul.com/?p=1628</guid>
		<description><![CDATA[I&#8217;m sure its common knowledge that other databases can be backed-up using the Backup BizTalk Server Job, meaning that the transaction consistency that is that is written the the BizTalk databases can be included in your own custom databases. I thought it was pretty easy to include custom databases, simply by adding an entry into [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m sure its common knowledge that other databases can be backed-up using the Backup BizTalk Server Job, meaning that the transaction consistency that is that is written the the BizTalk databases can be included in your own custom databases.</p>
<p>I thought it was pretty easy to include custom databases, simply by adding an entry into the <strong>adm_OtherBackupDatabases</strong> table in the <em>BizTalkMgmtDb </em>database. In the screenshot below, I&#8217;ve added the BizTalk RosettaNet Accelerator (BTARN) databases:</p>
<p><a href="http://www.modhul.com/wp-content/uploads/2010/08/AdmOtherBackupDatabases2.png"><img class="alignnone size-full wp-image-1644" title="AdmOtherBackupDatabases2" src="http://www.modhul.com/wp-content/uploads/2010/08/AdmOtherBackupDatabases2.png" alt="" width="742" height="202" /></a></p>
<p>I <em>thought </em>it was that simple, until I tried it for the first time in real life and was greeted with the following error from SQL Agent (notice the error in bold):</p>
<p style="padding-left: 30px;"><em>﻿﻿﻿Executed as user: NT AUTHORITY\SYSTEM. Processed 17520 pages for database &#8216;BizTalkDTADb&#8217;, file &#8216;BizTalkDTADb&#8217; on file 1. [SQLSTATE 01000] (Message 4035)  Processed 2 pages for database &#8216;BizTalkDTADb&#8217;, file &#8216;BizTalkDTADb_log&#8217; on file 1. [SQLSTATE 01000] (Message 4035)  BACKUP DATABASE successfully processed 17522 pages in 10.454 seconds (13.093 MB/sec). [SQLSTATE 01000] (Message 3014)  Processed 2264 pages for database &#8216;BizTalkMgmtDb&#8217;, file &#8216;BizTalkMgmtDb&#8217; on file 1. [SQLSTATE 01000] (Message 4035)  Processed 3 pages for database &#8216;BizTalkMgmtDb&#8217;, file &#8216;BizTalkMgmtDb_log&#8217; on file 1. [SQLSTATE 01000] (Message 4035)  BACKUP DATABASE successfully processed 2267 pages in 2.284 seconds (7.751 MB/sec). [SQLSTATE 01000] (Message 3014)  Processed 3280 pages for database &#8216;BizTalkMsgBoxDb&#8217;, file &#8216;BizTalkMsgBoxDb&#8217; on file 1. [SQLSTATE 01000] (Message 4035)  Processed 2 pages for database &#8216;BizTalkMsgBoxDb&#8217;, file &#8216;BizTalkMsgBoxDb_log&#8217; on file 1. [SQLSTATE 01000] (Message 4035)  BACKUP DATABASE successfully processed 3282 pages in 2.156 seconds (11.890 MB/sec). [SQLSTATE 01000] (Message 3014)  Processed 256 pages for database &#8216;BizTalkRuleEngineDb&#8217;, file &#8216;BizTalkRuleEngineDb&#8217; on file 1. [SQLSTATE 01000] (Message 4035)  Processed 1 pages for database &#8216;BizTalkRuleEngineDb&#8217;, file &#8216;BizTalkRuleEngineDb_log&#8217; on file 1. [SQLSTATE 01000] (Message 4035) </em><strong><em>Could not find stored procedure &#8216;BTARNARCHIVE.dbo.sp_BackupBizTalkFull&#8217;. [SQLSTATE 42000] (Error 2812)</em></strong><em> BACKUP DATABASE successfully processed 257 pages in 0.326 seconds (6.158 MB/sec). [SQLSTATE 01000] (Error 3014).  The step failed.</em></p>
<p><em>&#8216;Could not find stored procedure &#8216;BTARNARCHIVE.dbo.sp_BackupBizTalkFull&#8217;</em>. Oh really?</p>
<p>It turns out that it isn&#8217;t as simple as adding a custom database to the <em>adm_OtherBackupDatabases</em> table &#8211; a number of stored procedures and tables also need to be added to your custom database to get the backup job to successfully work, however these can be easily added by executing the two SQL scripts <em>Backup_Setup_All_Procs.sql</em> and <em>Backup_Setup_All_Tables.sql</em> against your custom databases (the scripts can be found in the &#8216;[BizTalk Installation Directory]\Schema&#8217; directory). You may want to force a full backup to ensure you have full backups across all of your databases:<!-- code formatted by http://manoli.net/csharpformat/ --><br />
<!-- .csharpcode, .csharpcode pre { font-size: small; color: black; font-family: Consolas, "Courier New", Courier, Monospace; background-color: #ffffff; /*white-space: pre;*/ } .csharpcode pre { margin: 0em; } .csharpcode .rem { color: #008000; } .csharpcode .kwrd { color: #0000ff; } .csharpcode .str { color: #006080; } .csharpcode .op { color: #0000c0; } .csharpcode .preproc { color: #cc6633; } .csharpcode .asp { background-color: #ffff00; } .csharpcode .html { color: #800000; } .csharpcode .attr { color: #ff0000; } .csharpcode .alt { background-color: #f4f4f4; width: 100%; margin: 0em; } .csharpcode .lnum { color: #606060; } --></p>
<pre class="csharpcode"><span class="kwrd">BEGIN</span> <span class="kwrd">TRAN</span>
<span class="kwrd">UPDATE</span> [BizTalkMgmtDb].[dbo].[adm_ForceFullBackup] <span class="kwrd">SET</span> ForceFull = 1
<span class="kwrd">COMMIT</span> TRAN</pre>
<p>Re-run your backup job and you will see your custom databases included in the backup.</p>
<p>The requirement to include additional stored procedures and tables in custom databases is well worth remembering, especially if you are deploying (or re-deploying) custom databases that don&#8217;t include these artifacts by default.</p>
<p>The procedure is <a title="How to Back Up Custom Databases" href="http://msdn.microsoft.com/en-us/library/aa561198(BTS.10).aspx" target="_blank">detailed in more depth on MSDN</a>.</p>
<img src="http://feeds.feedburner.com/~r/modhul/eSXP/~4/bEJuoXSL-Wc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.modhul.com/2010/08/25/including-custom-databases-in-the-biztalk-backup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.modhul.com/2010/08/25/including-custom-databases-in-the-biztalk-backup/</feedburner:origLink></item>
		<item>
		<title>BTARN ‘Service Content’ Error in the RNDisAssembler Component</title>
		<link>http://feedproxy.google.com/~r/modhul/eSXP/~3/W-U-yFVI5aQ/</link>
		<comments>http://www.modhul.com/2010/08/18/btarn-service-content-error-in-the-rndisassembler-component/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 17:16:56 +0000</pubDate>
		<dc:creator>Nick Heppleston</dc:creator>
				<category><![CDATA[BizTalk 2009]]></category>
		<category><![CDATA[BTARN]]></category>
		<category><![CDATA[RNDisAssembler]]></category>
		<category><![CDATA[Service Content]]></category>

		<guid isPermaLink="false">http://www.modhul.com/?p=1618</guid>
		<description><![CDATA[We came across the following error late last night which was a bit of a show-stopper. We were trying to load a custom PIP (specifically a PIDX OrderChange), but kept hitting this issue time and time again: Event Type: Error Event Source: BizTalk Accelerator for RosettaNet Event Category: None Event ID: 4096 Description: Source module: [...]]]></description>
			<content:encoded><![CDATA[<p>We came across the following error late last night which was a bit of a show-stopper. We were trying to load a custom PIP (specifically a PIDX OrderChange), but kept hitting this issue time and time again:</p>
<blockquote><p><em>Event Type:	Error</em><br />
<em>Event Source:	BizTalk Accelerator for RosettaNet</em><br />
<em>Event Category:	None</em><br />
<em>Event ID:	4096</em><br />
<em>Description:</em><br />
<em>Source module:</em><br />
<em>RNDisAssembler</em><br />
<em>Correlation information:</em><br />
<em>Description:</em><br />
<em>Receive pipeline rejected incoming message</em><br />
<em>due to the following RNIF exception:</em><br />
<em>UNP.SCON.VALERR : A failure occurred while validating the service content.</em><br />
<em>Details:</em><br />
<em>Event Type:	ErrorEvent Source:	BizTalk Accelerator for RosettaNetEvent Category:	NoneEvent ID:	4096Date:		18/08/2010Time:		10:33:47User:		N/AComputer:	[COMPUTER NAME]Description:Source module:RNDisAssembler</em><br />
<em>Correlation information:</em></p>
<p><em>Description:</em></p>
<p><em> </em></p>
<p><em>Receive pipeline rejected incoming message due to the following RNIF exception: UNP.SCON.VALERR : A failure occurred while validating the service content.<br />
Details:</em></p></blockquote>
<p>At first I didn&#8217;t quite understand the cause of the error &#8211; the PIDX OrderChange message contained within the Service Content was valid (as far as I was aware), all of the other messages within the payload looked correct and it was 3am&#8230;.</p>
<p>It turns out that the RNDisassembler does in-fact attempt to validate the message contained within the Service Content <em>against a deployed schema</em> just like the standard XmlDisassembler. The message that our trading partner was sending did not validate and hence the RosettaNet Accelerator threw this error message; once we had corrected the schema and redeployed, the error went away.</p>
<p>This is certainly one to be aware of if you are developing custom PIP&#8217;s to use with the RosettaNet Accelerator: ensure that the message in the Service Content validates against your custom PIP schema!</p>
<img src="http://feeds.feedburner.com/~r/modhul/eSXP/~4/W-U-yFVI5aQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.modhul.com/2010/08/18/btarn-service-content-error-in-the-rndisassembler-component/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.modhul.com/2010/08/18/btarn-service-content-error-in-the-rndisassembler-component/</feedburner:origLink></item>
		<item>
		<title>SCOM can cause Unchecked Growth in SSODB</title>
		<link>http://feedproxy.google.com/~r/modhul/eSXP/~3/Z1_YXoDTY14/</link>
		<comments>http://www.modhul.com/2010/06/15/scom-can-cause-unchecked-growth-in-the-ssodb/#comments</comments>
		<pubDate>Tue, 15 Jun 2010 09:32:44 +0000</pubDate>
		<dc:creator>Nick Heppleston</dc:creator>
				<category><![CDATA[Backup]]></category>
		<category><![CDATA[BizTalk 2006]]></category>
		<category><![CDATA[BizTalk 2009]]></category>
		<category><![CDATA[MOM]]></category>
		<category><![CDATA[SCOM]]></category>
		<category><![CDATA[SSO]]></category>
		<category><![CDATA[BizTalk]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[growth]]></category>
		<category><![CDATA[ssodb]]></category>

		<guid isPermaLink="false">http://www.modhul.com/?p=1589</guid>
		<description><![CDATA[Ok, that&#8217;s a bit of an attention grabbing headline, so let me clarify that statement: SCOM can cause unchecked growth in SSODB if you&#8217;re not regularly backing up the SSODB transaction log. We encountered this one today &#8211; a client&#8217;s SSODB ran out of space overnight, causing the BizTalk environment to shut-down. On further investigation, [...]]]></description>
			<content:encoded><![CDATA[<p>Ok, that&#8217;s a bit of an attention grabbing headline, so let me clarify that statement: SCOM can cause unchecked growth in SSODB <em>if you&#8217;re not regularly backing up the SSODB transaction log</em>.</p>
<p>We encountered this one today &#8211; a client&#8217;s SSODB ran out of space overnight, causing the BizTalk environment to shut-down. On further investigation, it would appear that every time SCOM checks the health of Enterprise Single Sign-On, an entry is recorded in the <em>SSOX_AuditXpLookup </em>table:</p>
<p><a href="http://www.modhul.com/wp-content/uploads/2010/06/ssodb_auditxplookup__table.png"><img class="alignnone size-full wp-image-1593" title="ssodb_auditxplookup__table" src="http://www.modhul.com/wp-content/uploads/2010/06/ssodb_auditxplookup__table.png" alt="" width="861" height="339" /></a></p>
<p>ESSO appears to be clever enough to manage the size of this table, truncating it every 30 minutes, however this doesn&#8217;t help if you&#8217;re not managing the size of the database transaction log through backups. To quote the <a title="Transaction Log Truncation" href="http://technet.microsoft.com/en-us/library/ms189085.aspx" target="_blank">SQL Server documentation</a>:</p>
<blockquote><p>If log records were never deleted from the transaction log, it would eventually fill all the disk space that is available to the physical log files. Log truncation automatically frees space in the logical log for reuse by the transaction log.</p></blockquote>
<p><strong>All the more reason to enable and run the supplied Backup BizTalk Server job to help maintain the <em>health </em></strong><strong>of your BizTalk environment.</strong></p>
<p>If you&#8217;re looking for more information on the Backup BizTalk Server Job, take a look at my series of posts on the topic: <em><a title="Configuring BizTalk for Disaster Recovery – Part 1" href="http://www.modhul.com/2009/06/29/configuring-biztalk-for-disaster-recovery-part-1/" target="_blank">http://www.modhul.com/2009/06/29/configuring-biztalk-for-disaster-recovery-part-1/</a></em></p>
<p>Hat-tip to <a title="SCOM polling causing large audit table in SSODB" href="http://social.msdn.microsoft.com/Forums/en/biztalkgeneral/thread/12e88536-28be-4e06-9fc4-9af528bcec13" target="_blank">this MSDN Forums posting</a> that helped us identify the issue.</p>
<img src="http://feeds.feedburner.com/~r/modhul/eSXP/~4/Z1_YXoDTY14" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.modhul.com/2010/06/15/scom-can-cause-unchecked-growth-in-the-ssodb/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.modhul.com/2010/06/15/scom-can-cause-unchecked-growth-in-the-ssodb/</feedburner:origLink></item>
		<item>
		<title>BizTalk Server 2010 Beta Released!</title>
		<link>http://feedproxy.google.com/~r/modhul/eSXP/~3/fVGJibZSy9g/</link>
		<comments>http://www.modhul.com/2010/05/18/biztalk-server-2010-beta-released/#comments</comments>
		<pubDate>Tue, 18 May 2010 16:16:02 +0000</pubDate>
		<dc:creator>Nick Heppleston</dc:creator>
				<category><![CDATA[BizTalk Server 2010]]></category>
		<category><![CDATA[BizTalk Server 2010 Beta]]></category>

		<guid isPermaLink="false">http://www.modhul.com/?p=1546</guid>
		<description><![CDATA[Update 2 (24th May 2010): The beta is back, download it now at the link below. Update: Well, it was there about four hours ago, but the link no longer works&#8230;. I&#8217;m pleased to say that it isn&#8217;t just me who got all excited. I&#8217;ll update this post if the link becomes active again. In [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Update 2 (24th May 2010):</strong> The beta is back, download it now at the link below.</p>
<p><strong>Update:</strong> Well, it was there about four hours ago, but the link no longer works&#8230;. I&#8217;m pleased to say that it <a title="BizTalk Beta 2010" href="http://social.msdn.microsoft.com/Forums/en-US/biztalkgeneral/thread/44752c94-b347-461b-98b5-b13e10be0c99" target="_self">isn&#8217;t just me who got all excited</a>. I&#8217;ll update this post if the link becomes active again. In the meantime, I did manage to download a copy, so will post my experiences here.</p>
<p>Looks like the beta of BizTalk Server 2010 was released today &#8211; three words: <strong>Windows 7 Support</strong>!</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=0f852e77-f792-4784-b2d4-95113d40db64">http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=0f852e77-f792-4784-b2d4-95113d40db64</a></p>
<p>Hat-tip: Nick M.</p>
<img src="http://feeds.feedburner.com/~r/modhul/eSXP/~4/fVGJibZSy9g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.modhul.com/2010/05/18/biztalk-server-2010-beta-released/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.modhul.com/2010/05/18/biztalk-server-2010-beta-released/</feedburner:origLink></item>
		<item>
		<title>Further MS-DTC Issues – Check the Startup Order of Clustered Services</title>
		<link>http://feedproxy.google.com/~r/modhul/eSXP/~3/UVCTT8lG-Fk/</link>
		<comments>http://www.modhul.com/2010/05/17/further-ms-dtc-issues-check-the-startup-order-of-clustered-services/#comments</comments>
		<pubDate>Mon, 17 May 2010 16:50:38 +0000</pubDate>
		<dc:creator>Nick Heppleston</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Clustered]]></category>
		<category><![CDATA[DTCPing]]></category>
		<category><![CDATA[MS-DTC]]></category>

		<guid isPermaLink="false">http://www.modhul.com/?p=1534</guid>
		<description><![CDATA[We&#8217;ve just encountered an obscure MSDTC/SQL Server issue that I thought would be beneficial to the wide-community. Following a failover of our (Windows Server 2008) cluster, we started to encounter unexpected errors when BizTalk attempted to perform any tasks that required a distributed transaction, even though everything appeared to be running correctly: MS-DTC was running and [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve just encountered an obscure MSDTC/SQL Server issue that I thought would be beneficial to the wide-community.</p>
<p>Following a failover of our (Windows Server 2008) cluster, we started to encounter unexpected errors when BizTalk attempted to perform any tasks that required a distributed transaction, even though everything appeared to be running correctly: MS-DTC was running and we could <em>DTCPing </em>the BizTalk Server from the SQL Server (and vice-a-versa), so no issues with DTC; SQL Server was also running as we could connect to the instance via Management Studio and BizTalk could read the Management Database etc., yet DTC operations still failed with the following error:</p>
<pre style="padding-left: 30px; font-size: 1.2em;">Enlist operation failed: 0x8004d01c(XACT_E_CONNECTION_DOWN). SQL Server could not register with Microsoft Distributed Transaction Coordinator (MS DTC) as a resource manager for this transaction. The transaction may have been stopped by the client or the resource manager.</pre>
<pre style="padding-left: 30px; font-size: 1.2em;">A severe error occurred on the current command.  The results, if any, should be discarded. (Microsoft SQL Server, Error: 8510)</pre>
<p>It turns out that when clustered services are brought online, <strong>they must be started in a specific order</strong>, with the DTC service being started before SQL Server. If they are not brought online in this order, SQL Server fails to register itself and DTC transactions cannot be initiated, <em>even though both the DTC and SQL service&#8217;s are running and everything looks correct.</em></p>
<p>Thanks to this forum post for providing us with the much needed pointer: <a href="http://www.ureader.com/msg/1142121.aspx">http://www.ureader.com/msg/1142121.aspx</a>.</p>
<img src="http://feeds.feedburner.com/~r/modhul/eSXP/~4/UVCTT8lG-Fk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.modhul.com/2010/05/17/further-ms-dtc-issues-check-the-startup-order-of-clustered-services/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.modhul.com/2010/05/17/further-ms-dtc-issues-check-the-startup-order-of-clustered-services/</feedburner:origLink></item>
		<item>
		<title>Team Explorer 2010 ‘narks’ Enterprise Single Sign-On</title>
		<link>http://feedproxy.google.com/~r/modhul/eSXP/~3/2ASlnATbefY/</link>
		<comments>http://www.modhul.com/2010/05/13/team-explorer-2010-narks-enterprise-single-sign-on/#comments</comments>
		<pubDate>Thu, 13 May 2010 16:10:00 +0000</pubDate>
		<dc:creator>Nick Heppleston</dc:creator>
				<category><![CDATA[BizTalk 2009]]></category>
		<category><![CDATA[TFS2010]]></category>
		<category><![CDATA[Visual Studio 2010]]></category>
		<category><![CDATA[ESSO]]></category>
		<category><![CDATA[VS2010]]></category>

		<guid isPermaLink="false">http://www.modhul.com/?p=1521</guid>
		<description><![CDATA[This post discusses how to fix a broken Enterprise Single Sign-On (ESSO) installation following an install of Visual Studio 2010 Team Explorer.]]></description>
			<content:encoded><![CDATA[<p><strong>Update 20th July 2010:</strong> There is now a Hotfix from Microsoft that resolves this issue, see <a href="http://support.microsoft.com/kb/2252691">http://support.microsoft.com/kb/2252691</a>; thanks for the pointer Daniel.</p>
<p>If you&#8217;re developing BizTalk projects and using TFS 2010, you&#8217;ll probably need to install <a title="Microsoft Download: Visual Studio Team Explorer 2010 RC" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3d651e2b-b817-4a67-b0f9-d600a07980e0&amp;displaylang=en" target="_blank">Team Explorer 2010</a> to leverage some of the new functionality not accessible through the Visual Studio 2008 TFS hooks. Team Explorer 2010 is a stripped down version of the Visual Studio 2010 environment used solely to access Team Foundation Server services.</p>
<p>Be aware that if you do install Team Explorer 2010, you&#8217;ll nark your Enterprise Single Sign-On installation, meaning you can&#8217;t make any changes to BizTalk &#8211; when ESSO attempts to start, you&#8217;ll probably receive the following error in the Application Event Log:</p>
<pre style="padding-left: 30px; font-size: 1.2em;">Could not create SSOSQL. To fix the problem, reinstall SSO or try 'regasm SSOSQL.dll' from a Visual Studio command prompt.</pre>
<pre style="padding-left: 30px; font-size: 1.2em;">Error Code: 0x80131700</pre>
<div>To correct the missing SSOSQL assembly, simply run the following command in a Visual Studio command prompt as suggested:</div>
<pre style="padding-left: 30px; font-size: 1.2em;">regasm "C:\Program Files\Common Files\Enterprise Single Sign-On\SSOSQL.dll"</pre>
<div><a href="http://www.modhul.com/wp-content/uploads/2010/05/regasm-entsso.png"><img class="alignnone size-full wp-image-1526" title="regasm Enterprise Single Sign-On SQL Assembly" src="http://www.modhul.com/wp-content/uploads/2010/05/regasm-entsso.png" alt="" width="903" height="307" /></a></div>
<div>ESSO should now start as expected.</div>
<img src="http://feeds.feedburner.com/~r/modhul/eSXP/~4/2ASlnATbefY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.modhul.com/2010/05/13/team-explorer-2010-narks-enterprise-single-sign-on/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.modhul.com/2010/05/13/team-explorer-2010-narks-enterprise-single-sign-on/</feedburner:origLink></item>
		<item>
		<title>Accouncing the New BizTalk Message Archiving Pipeline Component</title>
		<link>http://feedproxy.google.com/~r/modhul/eSXP/~3/dmYygX_Ikgo/</link>
		<comments>http://www.modhul.com/2009/12/08/accouncing-the-new-biztalk-message-archiving-pipeline-component/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 14:24:45 +0000</pubDate>
		<dc:creator>Nick Heppleston</dc:creator>
				<category><![CDATA[Atomic-Scope]]></category>
		<category><![CDATA[BizTalk 2006]]></category>
		<category><![CDATA[BizTalk 2009]]></category>
		<category><![CDATA[Pipeline Components]]></category>
		<category><![CDATA[Archiving]]></category>
		<category><![CDATA[Pipeline Component]]></category>

		<guid isPermaLink="false">http://www.modhul.com/?p=1409</guid>
		<description><![CDATA[It gives me great pleasure to announce Version 1.0 of the BizTalk Message Archiving Pipeline Component and my new venture, Atomic-Scope. The component allows you to archive Xml, flat-file, EDI and binary messages as they pass thru receive and send pipelines, without the need for complex &#8216;archiving&#8217; Send Port configurations, additional load on the MessageBox [...]]]></description>
			<content:encoded><![CDATA[<p>It gives me great pleasure to announce Version 1.0 of the <strong>BizTalk Message Archiving Pipeline Component</strong> and my new venture, <a title="Atomic-Scope" href="http://www.atomic-scope.com" target="_blank">Atomic-Scope</a>.</p>
<p>The component allows you to archive Xml, flat-file, EDI and binary messages as they pass thru receive and send pipelines, without the need for complex &#8216;archiving&#8217; Send Port configurations, additional load on the MessageBox database and requires zero developer time &#8211; just plug-in, configure and use! Archive filenames are created at <em>runtime </em>from Context-Properties written to the message by receive adapters, custom properties defined in your solution or with the standard Send Port &#8216;macros&#8217;. <strong><a title="Download BizTalk Message Archiving Pipeline Component Trial" href="http://www.atomic-scope.com/downloadtrial/?t=1c8ddf2c-bb09-46eb-8b9d-7697558a4b60" target="_blank"> A free 14-day trial is available &#8211; download your copy now.</a></strong></p>
<p>This new version of the component builds on the excellent feedback received following the launch of the original version on Codeplex and has spent many months in development &#8211; this release is a complete re-write and incorporates many of the community requested features, including:</p>
<ul>
<li>The ability to enable and disable the component at runtime;</li>
<li>The promotion of the archive filename into the Message Context for use in orchestrations, Send Port filters etc.;</li>
<li>Full streaming support, even for messages that fail when being processed by downstream components (such as flat-file or EDI messages);</li>
<li>Support for a wide-range of adapter Context-Properties &#8216;out-of-the-box&#8217; and custom, user-defined Context-Properties;</li>
<li>Native 32- and 64-bit versions;</li>
<li>Support for all versions of BizTalk Server 2006, BizTalk Server 2006 R2 &amp; BizTalk Server 2009;</li>
</ul>
<p>The component is also backed by our business-class <a href="http://www.atomic-scope.com/purchase/purchase.php">Enterprise Support Agreement</a>. You can also read more about <a href="http://www.atomic-scope.com/blog/">Atomic-Scope</a> and see how we are supported by the <a title="Microsoft BizSpark" href="http://www.microsoft.com/BizSpark/">Microsoft BizSpark Programme</a>.</p>
<p>A short video if available which gives an overview of how the component works when archiving files in receive pipelines (opens in a new window):</p>
<p><a href="http://www.atomic-scope.com/videos/archiving-component-intro/archiving-component-intro.swf"></a></p>
<p><a href="http://www.atomic-scope.com/videos/archiving-component-intro/archiving-component-intro.swf"><img class="aligncenter" title="Atomic-Scope: An Introduction to the BizTalk Message Archiving Pipeline Component" src="http://www.atomic-scope.com/style/images/atomicscope-videoimage.png" alt="" width="493" height="200" /></a></p>
<p>I plan on posting more information about the Message Archiving Component over the coming weeks. In the meantime, why not <a title="Download BizTalk Message Archiving Pipeline Component Trial" href="http://www.atomic-scope.com/downloadtrial/?t=484a8111-c0d5-42e5-962c-617989618c31" target="_blank">download the component and try it out yourself?</a></p>
<img src="http://feeds.feedburner.com/~r/modhul/eSXP/~4/dmYygX_Ikgo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.modhul.com/2009/12/08/accouncing-the-new-biztalk-message-archiving-pipeline-component/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.modhul.com/2009/12/08/accouncing-the-new-biztalk-message-archiving-pipeline-component/</feedburner:origLink></item>
		<item>
		<title>Applying BizTalk Hotfixes – Guidelines for Administrators</title>
		<link>http://feedproxy.google.com/~r/modhul/eSXP/~3/xXym3vf4gQM/</link>
		<comments>http://www.modhul.com/2009/10/22/applying-biztalk-hotfixes-guidelines-for-administrators/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 21:25:47 +0000</pubDate>
		<dc:creator>Nick Heppleston</dc:creator>
				<category><![CDATA[BizTalk 2004]]></category>
		<category><![CDATA[BizTalk 2006]]></category>
		<category><![CDATA[BizTalk 2009]]></category>
		<category><![CDATA[BizTalk Hotfixes]]></category>

		<guid isPermaLink="false">http://www.modhul.com/?p=1446</guid>
		<description><![CDATA[Microsoft Support have just a published a helpful support article discussing some of the general guidelines that need to be followed when applying BizTalk Server Hotfixes, applicable to all versions from BizTalk Server 2004 onwards. The article covers some of the more salient points we need to remember as BizTalk Adminstrators, including: Considerations when installing [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft Support have just a published a helpful support article discussing some of the general guidelines that need to be followed when applying BizTalk Server Hotfixes, applicable to all versions from BizTalk Server 2004 onwards.</p>
<p>The article covers some of the more salient points we need to remember as BizTalk Adminstrators, including:</p>
<ul>
<li>Considerations when installing Hotfixes on 32-bit and 64-bit servers;</li>
<li>Considerations when installing Hotfixes in a multi-server BizTalk Group;</li>
<li>Considerations when un-installing or rolling-back Hotfixes, including how to roll-back SQL scripts.</li>
<li>Restart requirements after installing Hotfixes;</li>
</ul>
<p>The <a title="Information on BizTalk Server Hotfixes" href="http://support.microsoft.com/default.aspx?scid=kb;en-us;2003907&amp;sd=rss&amp;spid=9774" target="_blank">&#8216;Information on BizTalk Server Hotfixes&#8217;</a> article can be found on Microsoft&#8217;s Support Site. Well worth a read.</p>
<h6 class="zemanta-related-title" style="font-size: 1em;">Related articles by Zemanta</h6>
<ul class="zemanta-article-ul">
<li class="zemanta-article-ul-li"><a title="The BizTalk Ops Team – Maintaining a Healthy, Responsive and Available BizTalk Environment" href="http://www.modhul.com/2008/12/22/the-biztalk-ops-team-maintaining-a-healthy-responsive-and-available-biztalk-environment/" target="_blank">The BizTalk Ops Team – Maintaining a Healthy, Responsive and Available BizTalk Environment</a></li>
</ul>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/e6d366bf-e0e5-4ad4-bc94-293538f1165b/"><img class="zemanta-pixie-img" style="border: none; float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=e6d366bf-e0e5-4ad4-bc94-293538f1165b" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://feeds.feedburner.com/~r/modhul/eSXP/~4/xXym3vf4gQM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.modhul.com/2009/10/22/applying-biztalk-hotfixes-guidelines-for-administrators/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.modhul.com/2009/10/22/applying-biztalk-hotfixes-guidelines-for-administrators/</feedburner:origLink></item>
		<item>
		<title>Easily Shutdown a Windows Server 2008 Core VM in VirtualBox</title>
		<link>http://feedproxy.google.com/~r/modhul/eSXP/~3/dLYZayn5HJg/</link>
		<comments>http://www.modhul.com/2009/10/20/easily-shutdown-a-windows-server-2008-core-vm-in-virtualbox/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 10:49:04 +0000</pubDate>
		<dc:creator>Nick Heppleston</dc:creator>
				<category><![CDATA[VirtualBox]]></category>
		<category><![CDATA[Windows Server 2008 Core]]></category>
		<category><![CDATA[Windows Server 2008]]></category>

		<guid isPermaLink="false">http://www.modhul.com/?p=1429</guid>
		<description><![CDATA[I run Windows Server 2008 Core in a VirtualBox virtual machine as my Active Directory Domain Controller for a small BizTalk test environment and I&#8217;ve discovered that it doesn&#8217;t take kindly to being &#8216;saved&#8217; &#8211; when the server is resumed my other servers seem to be unable to communicate with it and do AD type [...]]]></description>
			<content:encoded><![CDATA[<p>I run Windows Server 2008 Core in a VirtualBox virtual machine as my Active Directory Domain Controller for a small BizTalk test environment and I&#8217;ve discovered that it doesn&#8217;t take kindly to being &#8216;saved&#8217; &#8211; when the server is resumed my other servers seem to be unable to communicate with it and do AD type &#8216;stuff&#8217;.</p>
<p>Shutting the sever down seems the best way to go, but given that Server Core is the window-less version of the OS, the shutdown command needs to be issued from the command-prompt. Unfortunately, I&#8217;m lazy and can&#8217;t be bothered to log-in <em>just to shutdown</em>&#8230;.</p>
<p>I&#8217;ve recently discovered that Server Core will shutdown cleanly when sent the VirtualBox shutdown signal, issued when closing the VM &#8211; to  bring up the <strong>Close Virtual Machine</strong> dialog (shown below), simply close the Window the VM is running in, type <strong>[Host Key]+Q</strong>, or issue the <strong>Machine-&gt;Close</strong> menu-command:</p>
<p><img class="alignnone size-full wp-image-1430" title="VirtualBox - Send Shutdown Signal" src="http://www.modhul.com/wp-content/uploads/2009/10/VirtualBox-SendShutdownSignal.png" alt="VirtualBox - Send Shutdown Signal" width="811" height="670" /></p>
<p>Select the <strong>&#8216;Send the shutdown signal&#8217;</strong> option and click <strong>Ok</strong> (the VM <em>sometimes</em> doesn&#8217;t respond to the first attempt, but the second attempt is usually recognised).</p>
<p>Windows Server 2008 Core will kindly oblige and shutdown cleanly.</p>
<img src="http://feeds.feedburner.com/~r/modhul/eSXP/~4/dLYZayn5HJg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.modhul.com/2009/10/20/easily-shutdown-a-windows-server-2008-core-vm-in-virtualbox/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.modhul.com/2009/10/20/easily-shutdown-a-windows-server-2008-core-vm-in-virtualbox/</feedburner:origLink></item>
		<item>
		<title>BizTalk DR: Configuring BizTalk Backup for Disaster Recovery – Part 2</title>
		<link>http://feedproxy.google.com/~r/modhul/eSXP/~3/0R-qfuXtYGY/</link>
		<comments>http://www.modhul.com/2009/09/04/configuring-biztalk-backup-for-disaster-recovery-part-2/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 11:04:19 +0000</pubDate>
		<dc:creator>Nick Heppleston</dc:creator>
				<category><![CDATA[Backup]]></category>
		<category><![CDATA[BizTalk 2004]]></category>
		<category><![CDATA[BizTalk 2006]]></category>
		<category><![CDATA[BizTalk 2009]]></category>
		<category><![CDATA[Virtualisation]]></category>
		<category><![CDATA[Backup and Restore]]></category>
		<category><![CDATA[BizTalk]]></category>
		<category><![CDATA[BizTalk Backup]]></category>
		<category><![CDATA[BizTalk Log Shipping]]></category>
		<category><![CDATA[Disaster Recovery]]></category>
		<category><![CDATA[Microsoft SQL Server]]></category>

		<guid isPermaLink="false">http://www.modhul.com/?p=1275</guid>
		<description><![CDATA[Originally posted by Nick Heppleston at: http://www.modhul.com/2009/09/04/configuring-biztalk-backup-for-disaster-recovery-part-2/ This is the second of a three-part series covering the BizTalk Backup Process, where I&#8217;m looking at one of the two supported methods to backup and restore a BizTalk Server environment – Log Shipping. The series will cover the following topics: In Part 1, I’ll provide a high-level [...]]]></description>
			<content:encoded><![CDATA[<p><em>Originally posted by Nick Heppleston at: <a title="Configuring BizTalk for Disaster Recovery – Part 1" href="http://www.modhul.com/2009/09/04/configuring-biztalk-backup-for-disaster-recovery-part-2/" target="_blank">http://www.modhul.com/2009/09/04/configuring-biztalk-backup-for-disaster-recovery-part-2/</a></em></p>
<p>This is the second of a three-part series covering the BizTalk Backup Process, where I&#8217;m looking at one of the two supported methods to backup and restore a BizTalk Server environment – Log Shipping. The series will cover the following topics:</p>
<ul>
<li>In <strong>Part 1</strong>, I’ll provide a high-level overview of the backup and restore process. <a title="Configuring BizTalk Backup for Disaster Recovery – Part 1" href="http://www.modhul.com/2009/06/29/configuring-biztalk-for-disaster-recovery-part-1/" target="_blank">Part 1 is already published, go an read it now!</a></li>
<li>In <strong>Part 2</strong>, I’ll walk through an actual backup and restore setup, looking at the configuration steps as we go.<em><br />
</em></li>
<li>In <strong>Part 3</strong>, I’ll demonstrate a long-running BizTalk application that is restored on a sample disaster recovery environment using the backup and restore process configured in Part 2.</li>
</ul>
<p>Please accept my apologies for the wide screenshots in this part of the series. Please also note that I have not repeated the configuration steps on the MSDN website &#8211; this is an excellent resource and I do not wish to repeat or plagarise this work. In this part of the series, I have simply added my own observations that I thought were lacking from the MSDN text.</p>
<h3><strong>BizTalk Log Shipping – A Quick Recap</strong></h3>
<p>Before we look at how the BizTalk Log Shipping process is configured, let us quickly recap on the process; for a more detailed overview, I recommend that you read Part One of this series of blog posts, specifically the section which covers <a title="Configuring BizTalk Backup for Disaster Recovery – Part 1 - The Backup and Restore Process" href="http://www.modhul.com/2009/06/29/configuring-biztalk-for-disaster-recovery-part-1/#TheBackupAndRestoreProcess" target="_blank">The Backup and Restore Process</a>.</p>
<p>The backup and restore process (BizTalk Log Shipping) is as follows:</p>
<ul>
<li>The BizTalk Backup SQL Agent Job creates data and transaction-log backups from the production environment, placing log marks into the transaction-log backups. An audit table is maintained which lists the backups that have been created, the type of backup (data or transaction-log backup) and details the location of the backup files. The physical data- and log-files are then pushed to a UNC share, as shown below:</li>
</ul>
<p><img class="size-full wp-image-1200" title="The BizTalk Backup Process - Log Shipping" src="http://www.modhul.com/wp-content/uploads/2009/06/BizTalkBackupProcess.png" alt="BizTalk Backup Process Overview" width="515" height="170" /></p>
<ul>
<li>The standby environment reads the audit table maintained by the production environment, using this information to determine which data- and transaction-log files need to be restored. These files are restored from the UNC share using the SQL ‘NORECOVERY’ option, leaving the databases in a non-operational state, allowing additional transaction-logs to be applied. <em><strong>Note:</strong> the transaction-logs are <strong>not restored to the transaction-log mark in this step</strong>, instead the full transaction-log is restored:</em></li>
</ul>
<p><img class="size-full wp-image-1200" title="The BizTalk Restore Process" src="http://www.modhul.com/wp-content/uploads/2009/06/BizTalkRestoreProcess.png" alt="BizTalk Backup Process Overview" width="682" height="231" /></p>
<p>These two steps continue throughout live operations. In the event of a disaster recovery situation, where the production environment has been lost and the standby environment needs to be brought online, three recovery steps must be performed on the standby environment:</p>
<ul>
<li>The most recent transaction-log backup is restored to its transaction-log mark using the SQL ‘WITH RECOVERY’ option, placing the databases into an operationally ready state.</li>
<li>Database and registry updates statements are run to re-configure the restored databases to use the standby environment.</li>
<li>BizTalk services are brought online (including the Enterprise Single Sing-On server and Business Rules Engine service etc.) and the standby environment is made live as the production environment.</li>
</ul>
<p>Once the live environment is recovered and the switch from the standby environment back to the live environment is ready to be made, the process is reversed, with the standby environment creating backups that are restored to the live environment.</p>
<p>In this post, we&#8217;ll look at how to configure each of these steps.</p>
<h3><strong>BizTalk Log Shipping – Prerequisites</strong></h3>
<p>Several prerequisites need to be setup before configuring BizTalk Log Shipping. I would recommend that you spend time to ensure that these areas work, as they will save you a great deal of pain when configuring log shipping. They include:</p>
<ol>
<li>Before starting to configure the BizTalk Log Shipping process, ensure that the production and standby servers can communicate with each other over the network;</li>
<li>The production and standby SQL Server instances need to communicate with each other via MSDTC (Microsoft Distributed Transaction Coordinator). There are a number of excellent resources on the internet addressing MSDTC configuration issues including <a title="Troubleshooting Problems with MSDTC" href="http://msdn.microsoft.com/en-us/library/aa561924%28BTS.10%29.aspx" target="_blank">Troubleshooting Problems with MSDTC</a> on the MSDN website. <strong>Ensure that the two serverscan communicate over MSDTC before starting to configure Log Shipping;</strong></li>
<li>The BizTalk backup and restore SQL Agent jobs should run as under an isolated user account &#8211; choose a Windows user account for this purpose and create a SQL Server login for this account. Map this SQL Server login to the <em>BTS_BACKUP_USERS</em> database role in the BizTalk Server databases; and finally</li>
<li>It is recommend that the data- and transaction-log backup files are written to a highly-available UNC share. Ensure that an UNC share is created that is accessible by both the production and standby servers and that the necessary permissions are assigned. Check that you can read, write and delete files from this share using Windows Explorer on both  servers.</li>
</ol>
<h3><strong>Configuring The Backup Job</strong></h3>
<p>The first task in configuring BizTalk Log Shipping is to configure the SQL Agent <em>&#8216;Backup BizTalk Server (BizTalkMgmtDb)&#8217;</em> backup job on the production environment. This job is created by the BizTalk installer and is responsible for a number of tasks, including:</p>
<ul>
<li>Creating a full database backup at the specified interval;</li>
<li>Writing a transaction-log mark to the transaction-log and creating a backup of the transaction-log; and finally</li>
<li>Clearing the backup history table, based on specified criteria.</li>
</ul>
<p>To configure the job, follow the instructions detailed in the excellent <a title="How to Configure the Backup BizTalk Server Job" href="http://msdn.microsoft.com/en-us/library/aa546765%28BTS.10%29.aspx" target="_blank">How to Configure the Backup BizTalk Server Job</a> on the MSDN website.</p>
<p>When configuring the backup job, remember the following:</p>
<ul>
<li>The <strong>Frequency</strong> parameter denotes the frequency at which a <em>full backup</em> is taken. By default, this is set to <strong>d</strong> (daily) which is sufficient for most BizTalk environments. If you require more frequent <em>full</em> backups, change this accordingly &#8211; other values include <strong>h</strong> (hourly), <strong>w</strong> (weekly), <strong>m</strong> (monthly), or <strong>y</strong> (yearly). <strong>Note that irrespective of what frequency you set here, transaction log backups will occur every time this job is run.</strong></li>
<li>The (optional) <strong>Force full backup after partial backup failures</strong> parameter instructs the backup job to create a full backup if a transaction-log backup failed the last time the job ran, ignoring the <em>Frequency</em> setting. For example, if you use a setting of &#8216;daily&#8217; for the <em>Frequency </em>parameter and the job fails to create a full set of transaction-log backups, the next time the job runs, it will create a full-backup followed by a further transaction-log backup; a second full-backup followed by a transaction-log backup will be created when the job runs again at midnight (UTC time) to honour the <em>Frequency</em> setting.</li>
<li>When setting the <strong>Location of backup files</strong> parameter, ensure that the user who is running this SQL Agent job has sufficient privileges to write to that location.</li>
</ul>
<p>By default, this job runs once every fifteen minutes; this means that a transaction-log backup will be created and restored once every fifteen minutes (once you have configured the log shipping restore jobs, which execute once every minute). If you want to reduce delay in restoring these transaction-logs to your standby environment, reduce the scheduled frequency of the backup job. I would however recommend that this job is run <em>no more frequently</em> than once every three minutes; you will however need to find a happy medium that works best in your environment &#8211; this will be based on the load on your BizTalk Server and the rate at which your SQL Server transaction-logs grow.</p>
<p>Once you have configured the backup job, execute it starting at step one and ensure you have backup data- and log-files in your UNC share location, and entries in the <em>BizTalkMgmtDb.dbo.adm_BackupHistory</em> table, as follows:</p>
<p><img class="alignnone size-full wp-image-1326" title="BackupHistory" src="http://www.modhul.com/wp-content/uploads/2009/09/BackupHistory.png" alt="BackupHistory" width="1313" height="309" /></p>
<p>These entries in the Backup History table will be read by the restore jobs on the standby SQL Server and used to identify which data and log files need to be restored. Of particular interest in the above screenshot of the Backup History table are the following columns:</p>
<ul>
<li>The <strong>BackupSetId</strong> column, which is used during the restore to identify an entire backup-set;</li>
<li>The <strong>MarkName</strong> column, which details the Transaction-Log Mark Name given to transaction-logs (Notice how the full database-backup has a value of NULL instead of a a log mark name, as these cannot be applied to full backups);</li>
<li>The <strong>BackupFilename</strong> and <strong>BackupFileLocation</strong> columns, which are used by the restore jobs to locate the data- and log-files to restore;</li>
<li>The <strong>BackupType</strong> column, which is used by the restore jobs to identify the type of backup the backup set relates to; and finally</li>
<li>The <strong>SetComplete</strong> column, which is used by the (optional) <strong>Force full backup after partial backup failures</strong> parameter of the backup job to determine whether a full or partial backup was taken during the last execution.</li>
</ul>
<p>One final point to note about the <em>&#8216;Backup BizTalk Server (BizTalkMgmtDb)&#8217;</em> backup job: if the SQL Agent Service or the backup-job is disabled and misses the time-window in which the full-backup should be taken (based on the Frequency parameter), the next execution of the job will cause a full backup to be created. For example, if you use a setting of &#8216;daily&#8217; for the <em>Frequency </em>parameter and the job is disabled between 2000 and 0200 (i.e. during the time window that the daily full-backup will occur &#8211; 0000UTC), when the job is enabled, it will detect that its &#8216;frequency&#8217; has been missed and cause a full-back to be created, followed by a transaction-log backup.</p>
<h4><a style="text-decoration: none; color: #444444;" name="ForcingAFullBackup">Forcing a Full Backup</a></h4>
<p>There may be cases where you wish to perform an ad-hoc full-backup, outside of the <em>Frequency</em> window specified in <em>Backup BizTalk Server</em> SQL Agent Job &#8211; for example, you may want to take a full backup before applying a hotfix or service pack, or when replacing hardware.</p>
<p>When a backup is forced, the <em>Frequency</em> window is ignored next time the Backup BizTalk Server job executes and both data- and log-file backups are generated. If a problem occurs in the scenarios described above and the databases need to be recovered, only one transaction log needs to be restored for each database, reducing the recovery time significantly.</p>
<p>To force a full backup, execute the <em>BizTalkMgmtDb.dbo.sp_ForceFullBackup</em> stored procedure; the next time the Backup BizTalk Server job executes, both data- and log-file backups will be generated.</p>
<h3><strong>Configuring BizTalk Log Shipping &#8211; The Restore Jobs</strong></h3>
<p>We&#8217;re now ready to configure the standby environment to automagically restore our data- and log-file backups that are created by our production environment.</p>
<p>Several new jobs will be created in the standby SQL Server environment to handle the restoring of backups (along with a number of tables and stored procedures in the <em>master</em> database, which are used to hold information about the Log Shipping process). The jobs in particular are responsible for a number of tasks, including:</p>
<ul>
<li>Retrieving the backup history from the production environment;</li>
<li>Restoring the data- and transaction-log backup files to the standby SQL Server in a non-operational state, allowing further transaction-logs to be restored; and finally</li>
<li>Restoring all of the databases to an operational state, by restoring the next available transaction-log to their last log mark <em>only when disaster recovery is invoked and the standby SQL Server environment is to be made operational</em>.</li>
</ul>
<p>For more detailed information on these jobs, I recommend that you read the first part of this series, specifically the section which covers <a title="Configuring BizTalk Backup for Disaster Recovery – Part 1 - The Restore Process : The BizTalk Log Shipping Jobs" href="http://www.modhul.com/2009/06/29/configuring-biztalk-for-disaster-recovery-part-1/#TheRestoreProcessTheBizTalkLogShippingJobs" target="_blank">the Restore Process and the BizTalk Log Shipping Jobs</a>.</p>
<p>To configure log shipping on the standby environment, follow the instructions detailed in the excellent <a title="How to Configure the Destination System for Log Shipping" href="http://msdn.microsoft.com/en-us/library/aa560961%28BTS.10%29.aspx" target="_blank">How to Configure the Destination System for Log Shipping</a> on the MSDN website.</p>
<p>When configuring the backup job, remember the following:</p>
<ul>
<li>The standby environment will try and read the data- and log-files from the same location as they were written to by the backup job; it is therefore prudent to use a UNC share location (mapped to a drive letter if necessary) that both the standby and production environments have read/write permissions to.</li>
<li>If you encounter problems executing the <em>bts_ConfigureBizTalkLogShipping</em> stored procedure, ensure that you have correctly configured MSDTC between the production and standby environments; additionally, check that you have enabled <em>Ad Hoc Distributed Queries</em> on the standby SQL Server (if using SQL Server 2005/2008) as this stored procedure executes distributed queries over a linked server to the production SQL Server.</li>
<li>If you need to re-configure your standby environment, re-run the configuration process including starting with the <em>LogShipping_Destination_Schema.sql</em> and <em>LogShipping_Destination_Logic.sql</em> before executing the <em>bts_ConfigureBizTalkLogShipping</em> stored procedure.</li>
</ul>
<h4><strong>A note about the Physical Location of Database Files when Restoring</strong></h4>
<p>If you have been around SQL Server for any length of time, you will have come across some of the more &#8216;helpful&#8217; features of restoring data- and transaction-log files &#8211; when you restore a backup, <strong>SQL Server will attempt to re-create the database on the standby environment in exactly the same directory structure as the data- and log-file/s appeared on the production SQL Server</strong>.</p>
<p>If the directory structure doesn&#8217;t exist on the standby server <em>exactly</em> as it did on the production server, you will receive an error similar to the following and the restore will fail:</p>
<blockquote><p>Executed as user: BIZTALKDR\BizTalkBackup. Directory lookup for the file “D:\MSSQL.4\MSSQL\DATA\BizTalkMgmtDb.mdf” failed with the operating system error 3(The system cannot find the path specified.). [SQLSTATE 42000] (Error 5133) <strong>File ‘BizTalkMgmtDb’ cannot be restored to ‘D:\MSSQL.4\MSSQL\DATA\BizTalkMgmtDb.mdf’</strong>. Use WITH MOVE to identify a valid location for the file. [SQLSTATE 42000] (Error 3156) Directory lookup for the file “D:\MSSQL.4\MSSQL\DATA\BizTalkMgmtDb_log.LDF” failed with the operating system error 3(The system cannot find the path specified.). [SQLSTATE 42000] (Error 5133) <strong>File ‘BizTalkMgmtDb_log’ cannot be restored to ‘D:\MSSQL.4\MSSQL\DATA\BizTalkMgmtDb_log.LDF’</strong>. Use WITH MOVE to identify a valid location for the file. [SQLSTATE 42000] (Error 3156) Problems were identified while planning for the RESTORE statement. Previous messages provide details. [SQLSTATE 42000] (Error 3119) <strong>RESTORE DATABASE is terminating abnormally.</strong> [SQLSTATE 42000] (Error 3013). The step failed.</p></blockquote>
<p>There are a number of ways we can resolve this, including using the <em>WITH MOVE</em> statement, as suggested in the error text, however this would require us to make changes to the stored procedure that is invoked by the <em>Restore Databases</em> SQL Agent job &#8211; this would invalidate our warranty with Microsoft as changes to the SQL Server portion of the codebase are not supported.</p>
<p>SQL Server uses several techniques to determine the physical location that databases should be restored to (further information can be found in <a title="INF: Using the WITH MOVE Option with the RESTORE Statement" href="http://support.microsoft.com/kb/221465" target="_blank">Microsoft Knowledgebase Article 221465</a>); the easiest method is to perform an <em>implicit</em> &#8216;MOVE&#8217; &#8211; if the database already exists on the standby environment, but at a different location than specified in the backup set, the location on the server is used during the restore.</p>
<p>I would therefore recommend that you create the various BizTalk databases (including the Business Rules Engine Db and SSO Db) in their correct locations on the standby environment before you enable the restore job, this way SQL Server will restore the databases to your preferred location.</p>
<h4>Testing the Restore Functionality<strong><br />
</strong></h4>
<p>With log shipping successfully configured, enable the <strong>BTS Log Shipping &#8211; Get Backup History (DBServer: </strong><strong>&#8220;[Database Server Name]&#8220;, DBName: &#8220;[Database Name]&#8220;</strong><strong>)</strong> SQL Agent job to retrieve backup history information from the production environment.</p>
<p>If everything is configured correctly, you will see entries in the standby SQL Server <em>master.dbo.bts_LogShippingHistory</em> table which show the backups that are yet to be restored (see the <strong>Restored</strong> and <strong>RestoredDateTime</strong> columns highlighted in <span style="color: #008000;"><strong>Green</strong></span>). In the following screenshot, there is one full database backup, plus three transaction-log backups to be restored.</p>
<p><img class="alignnone size-full wp-image-1312" title="LogShippingHistory-DatabasesToBeRestoredv2" src="http://www.modhul.com/wp-content/uploads/2009/09/LogShippingHistory-DatabasesToBeRestoredv2.png" alt="LogShippingHistory-DatabasesToBeRestoredv2" width="1539" height="475" /></p>
<p>With the backup history successfully retrieved from the production environment, we&#8217;re now ready to start restoring the data- and log-files to our standby environment.</p>
<p>Enable the <strong>BTS Log Shipping &#8211; Restore Databases (DBServer: &#8220;[Database Server Name]&#8220;, DBName: &#8220;[Database Name]&#8220;)</strong> SQL Agent job. As described in the first post of this series, this job restores the BizTalk databases to a non-operational state, allowing further transaction-logs to be restored. The job uses the  ‘NORECOVERY’ option, leaving each database in the ‘Restoring…’ state, thereby allowing additional transaction-logs to be applied.</p>
<p>In the screenshot below, the Restore Databases job has been enabled and has executed, restoring the full backup set (<strong>BackupType</strong> &#8216;Db&#8217;) and two transaction-log backup sets (<strong>BackupType</strong> &#8216;Lg&#8221;) as highlighted in <span style="color: #008000;"><strong>Green</strong></span>; the transaction log set that has not been restored &#8211; highlighted in <span style="color: #ff6600;"><strong>Orange</strong></span> &#8211; is the N-1 backup-set that is only restored when the standby environment is to be brought online as the new production environment; this is to ensure that we always have one transaction-log that can be restored to the <em>transaction-log mark</em>. Also note that the <strong>RestoredDateTime</strong> column is populated with the UTC time, not the actual system time.</p>
<p><img class="alignnone size-full wp-image-1313" title="LogShippingHistory-RestoredDatabasesv2" src="http://www.modhul.com/wp-content/uploads/2009/09/LogShippingHistory-RestoredDatabasesv2.png" alt="LogShippingHistory-RestoredDatabasesv2" width="1564" height="475" /></p>
<p>One final point to take away when restoring databases is the way in which the restore job handles full backups (<strong>BackupType</strong> &#8216;Db&#8217;). If the production environment creates a full backup &#8211; either because the Backup job has crossed its <em>Frequency</em> window, or the BizTalk Administrator has forced a full backup &#8211; the Log Shipping Restore job will <strong>only restore the transaction log created during the full backup</strong> &#8211; it skips the data-file backup as this isn&#8217;t required to maintain database integrity. As demonstrated in the screenshot below, the transaction logs before and after the full backup have been restored (highlighted in <strong><span style="color: #008000;">Green</span></strong>), however the data-file backup hasn&#8217;t been restored (highlighted in <strong><span style="color: #333399;">Purple</span></strong>); finally, the N-1 transaction log set is yet to be restored (highlighted in <span style="color: #ff6600;"><strong>Orange</strong></span>):</p>
<p><img class="alignnone size-full wp-image-1319" title="LogShippingHistory-RestoredDatabasesFullBackupNotRestored" src="http://www.modhul.com/wp-content/uploads/2009/09/LogShippingHistory-RestoredDatabasesFullBackupNotRestored.png" alt="LogShippingHistory-RestoredDatabasesFullBackupNotRestored" width="1564" height="475" /></p>
<h4>Cleaning the Standby Environment<strong><br />
</strong></h4>
<p>You may want to clean the standby environment <strong>without performing a full reconfiguration of BizTalk Log Shipping</strong>, so that the restore process starts from scratch: the databases are re-created and restoration starts as if it is the first time it has run.</p>
<p>To achieve this, execute the <em>master.dbo.bts_LogShippingClean</em> stored procedure on the standby environment. This stored procedure deletes all references to the previously restored backup-sets and physically deletes the databases that are in the &#8216;restoring&#8217; state. The <em>bts_LogShippingClean</em> stored proc accepts a single parameter <em>@SourceId</em>; the value you should use for this  parameter is based on your log shipping configuration which is available in the <em>master.dbo.bts_LogShippingDatabases</em> table, an example of which is shown below:</p>
<p><img class="alignnone size-full wp-image-1359" title="CleanupLogShipping-SourceId" src="http://www.modhul.com/wp-content/uploads/2009/09/CleanupLogShipping-SourceId.png" alt="CleanupLogShipping-SourceId" width="622" height="190" /></p>
<p>These two actions force the <strong>BTS Log Shipping &#8211; Restore Databases</strong> job to re-create the databases in a restoring state by applying the last full backup, followed by subsequent transaction log backups the next time it runs. This is demonstrated in the screenshot below &#8211; the data-file and transaction-log backups are restored (highlighted in <span style="color: #008000;"><strong>Green</strong></span>), with the N-1 transaction log set is yet to be restored (highlighted in <span style="color: #ff6600;"><strong>Orange</strong></span>); also notice how the full- and transaction log backups <em>are restored sequentially at t</em><em>he same time</em>, within a few seconds of each other (see the <strong>RestoredDateTime</strong> column):</p>
<p><img class="alignnone size-full wp-image-1323" title="LogShippingHistory-LogShippingCleanFullBackupRestored" src="http://www.modhul.com/wp-content/uploads/2009/09/LogShippingHistory-LogShippingCleanFullBackupRestored.png" alt="LogShippingHistory-LogShippingCleanFullBackupRestored" width="1564" height="475" /></p>
<h4>Handling Partial Backup-Sets</h4>
<p>One of the most common errors I encountered while putting together this series of blog posts related to <em>partially restored backups-sets</em>. The SQL Agent <em>BTS Log Shipping &#8211; Restore Databases</em> job automagically detects this condition and raises an error in the Event Log similar to the following:</p>
<blockquote><p>Executed as user: BIZTALKDR\SqlAgent. A partial set has been detected but a valid full backup set does not exist yet.  Please force a full backup on the source server. [SQLSTATE 42000] (Error 50000)  @LastSetId: 487 [SQLSTATE 01000] (Error 0)  @RestoredToMark: 0 [SQLSTATE 01000] (Error 0)  Here101 [SQLSTATE 01000] (Error 0)  @NextSetId: 488 [SQLSTATE 01000] (Error 0)  Here102 [SQLSTATE 01000] (Error 0)   [SQLSTATE 01000] (Error 0)  Statement2: 1 [SQLSTATE 01000] (Error 0)  Statement3: 1 [SQLSTATE 01000] (Error 0).  The step failed.</p></blockquote>
<p>The restore job identifies this error condition by simply checking for a backup set that has both restored and non-restored entries, as shown in the screenshot below (highlighted in <span style="color: #ff6600;"><strong>Orange</strong></span>):</p>
<p><img class="alignnone size-full wp-image-1344" title="LogShippingHistory-PartialRestore" src="http://www.modhul.com/wp-content/uploads/2009/09/LogShippingHistory-PartialRestore.png" alt="LogShippingHistory-PartialRestore" width="1533" height="380" /></p>
<p>When a partially restored backup-set is detected, the restore job will attempt to identify and restore a more recent full data- and transaction-log backup, thereby minimizing the synchronization gap between the production and standby environments. If a more recent full backup cannot be found, the job will fail reporting the error detailed above and either wait until a new full backup is created as the backup job passes its <em>Frequency</em> window, or when the BizTalk Administration <a title="Forcing a Full Backup" href="#ForcingAFullBackup" target="_self">forces a full backup</a>.</p>
<h3><strong>Wrap-Up</strong></h3>
<p>So that’s the end of Part 2. We’ve walked through configuring the backup and restore jobs and looked at how to check that these jobs are working correctly, how to force full backups and problems caused by partial restores.</p>
<p>In Part 3, we’ll demonstrate a long-running BizTalk application that is restored and brought operational on a standby environment using the instructions detailed here.</p>
<h3><strong>Postscript: Creating a Sandbox Environment to Test Log Shipping<br />
</strong></h3>
<p>Before jumping into configuring Log Shipping on a production environment, I would suggest that you become familiar with how the process itself works, either in a test or sandboxed environment. In writing this series of blog posts, I created a small VirtualBox based virtual-machine sandbox with which I could test the various scenario&#8217;s I planned on writing about. This sandbox consisted of:</p>
<ul>
<li>A &#8216;production&#8217; server hosting BizTalk and the BizTalk databases in an operational state;</li>
<li>A &#8216;standby&#8217; server hosting BizTalk and the restored BizTalk databases;</li>
<li>A standalone server acting as an Active Directory Domain Controller.</li>
</ul>
<p>All three servers communicate through a private VirtualBox network and cannot be seen outside of the physical host machine. The &#8216;production&#8217; and &#8216;standby&#8217; servers run Windows Server 2008, plus BizTalk Server 2009 and SQL Server 2008 (all Enterprise Edition), running with 512Mb RAM; the AD server runs Windows Server 2008 Core, running with 256Mb RAM. All three virtual-machines run extremely well given their small amount of RAM, however they need to be located on a separate HDD to the physical machine&#8217;s OS otherwise heavy I/O thrashing causes a significant degradation in performance.</p>
<div class="zemanta-pixie" style="margin-top: 10px; height: 15px;"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/26fea57a-1442-4826-b44e-8e369e422953/"><img class="zemanta-pixie-img" style="float: right;" src="http://img.zemanta.com/reblog_e.png?x-id=26fea57a-1442-4826-b44e-8e369e422953" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<img src="http://feeds.feedburner.com/~r/modhul/eSXP/~4/0R-qfuXtYGY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.modhul.com/2009/09/04/configuring-biztalk-backup-for-disaster-recovery-part-2/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		<feedburner:origLink>http://www.modhul.com/2009/09/04/configuring-biztalk-backup-for-disaster-recovery-part-2/</feedburner:origLink></item>
	</channel>
</rss>

