<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Esoteric</title><link>http://blogs.msdn.com/arvindsh/default.aspx</link><description>All esoteric things about SQL Server and Microsoft Developer Tools</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Priority boost details – and why it’s not recommended</title><link>http://blogs.msdn.com/arvindsh/archive/2010/01/27/priority-boost-details-and-why-it-s-not-recommended.aspx</link><pubDate>Wed, 27 Jan 2010 07:04:17 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9953913</guid><dc:creator>arvindsh</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9953913.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9953913</wfw:commentRss><description>&lt;p&gt;Some times, we see customer has (accidentally or otherwise) enabled the option ‘boost priority’ for SQL Server worker threads. In general Microsoft does not recommend that you set this option. Why?&lt;/p&gt;  &lt;p&gt;First a bit of background. When we set the ‘priority boost’ option using sp_configure what is happening is that after restart the SQL engine will call Win32 API SetPriorityClass() and passes in HIGH_PRIORITY_CLASS (if you are debugger savvy, you can set breakpoints on these APIs and check what is happening – that’s what I did, no source code is required to verify this). From MSDN:&lt;/p&gt;  &lt;p&gt;   &lt;table border="1" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign="top"&gt;           &lt;p&gt;HIGH_PRIORITY_CLASS&lt;/p&gt;            &lt;p&gt;0x00000080&lt;/p&gt;         &lt;/td&gt;          &lt;td valign="top"&gt;           &lt;p&gt;Process that performs time-critical tasks that must be executed immediately. The threads of the process preempt the threads of normal or idle priority class processes. An example is the Task List, which must respond quickly when called by the user, regardless of the load on the operating system. Use extreme care when using the high-priority class, because a high-priority class application can use nearly all available CPU time.&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;It then proceeds to call SetThreadPriority() with priority as THREAD_PRIORITY_HIGHEST. For this combination of Process Priority Class and Thread Priority Level, the base priority level of these worker threads is 15. The only ones higher than this in the hierarchy of the OS are any threads which have process priority class set to REALTIME_PRIORITY_CLASS (which should be a very rare case for any application.) this means that many SQL worker threads are running at a priority level which is close to the highest on the system. Hence, they will tend to be selected frequently by kernel dispatcher to execute on the CPU.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;So what is the effect?&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;There is clear precedent in the support teams of priority boost causing unresponsive servers. Sluggish UI / mouse / keyboard movements are other common symptoms if this setting is interfering with the capability of the OS to give (non-SQL) threads their desired quantum on the CPU. On a cluster, having priority boosted SQL threads can cause other critical threads such as the resource monitor’s IsAlive poll thread to timeout, thereby causing unwanted failover. Therefore we do not recommend to set priority boost to 1, &lt;a href="http://support.microsoft.com/kb/319942"&gt;especially in clustered instances&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Reference links:&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;SetPriorityClass: &lt;a href="http://msdn.microsoft.com/en-us/library/ms686219(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms686219(VS.85).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;SetThreadPriority: &lt;a href="http://msdn.microsoft.com/en-us/library/ms686277(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms686277(VS.85).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Effective Base Priority: &lt;a href="http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms685100(VS.85).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Windows Priority levels: &lt;a href="http://www.microsoft.com/mspress/books/sampchap/4354c.aspx"&gt;http://www.microsoft.com/mspress/books/sampchap/4354c.aspx&lt;/a&gt; and &lt;a href="http://www.microsoft.com/mspress/books/sampchap/4354d.aspx"&gt;http://www.microsoft.com/mspress/books/sampchap/4354d.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9953913" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/SQL+Architecture/default.aspx">SQL Architecture</category></item><item><title>WARNING: Stack unwind information not available. Following frames may be wrong.</title><link>http://blogs.msdn.com/arvindsh/archive/2009/12/23/warning-stack-unwind-information-not-available-following-frames-may-be-wrong.aspx</link><pubDate>Wed, 23 Dec 2009 04:52:48 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9940388</guid><dc:creator>arvindsh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9940388.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9940388</wfw:commentRss><description>&lt;p&gt;I’m sure if you have ever used the WinDbg family of debuggers sometime, you must have seen the above message. What does it really mean? How does it affect you?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Quick Background on stack operation&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;In x86, the way the stack is built up, the entry point of the function (a.k.a. prolog) generated by the compiler contains some key instructions including one which saves the previous value of the EBP register for that thread on the stack. The next instruction sets the EBP register to point to the current stack pointer (ESP).&lt;/p&gt;  &lt;p&gt;What am I talking about? If you don’t know what EBP and ESP are, I recommend you take a quick look at the links in the reference section at the end.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Frame Pointer Omission&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;So in some cases the compiler may choose to omit the setting of the EBP register and may instead directly use ESP to reference locals and parameters. In such cases the EBP register (a.k.a. ‘frame pointer’) is deemed as ‘omitted’ and the generated code is called FPO (Frame Pointer Omission) code.&lt;/p&gt;  &lt;p&gt;In such cases the debugger will typically complain that it cannot unwind the stack based on the EBP (unless it has symbol files which match the module whose function has FPO enabled). Under those cases it will emit the warning which is the title of this post.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Recommendation&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;For builds which have /Oy enabled, it is necessary to have symbol files to successfully reconstruct the stack.&lt;/li&gt;    &lt;li&gt;In the real world the most common reason to encounter the above message is faulty symbol paths. Check your symbol path.&lt;/li&gt;    &lt;li&gt;In cases where you can tolerate the overhead of setting up the frame pointer, leave FPO off (/Oy-). See the last reference in my post for something which Windows team has supposedly done regarding this.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;strong&gt;References&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc267845.aspx" target="_blank"&gt;Anatomy of a stack trace&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc267328.aspx" target="_blank"&gt;Stack Unwind message&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/6xy06s51.aspx" target="_blank"&gt;Considerations for prolog / epilog code&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/k2b2ssfy.aspx" target="_blank"&gt;Calling conventions&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/2kxx5t2c.aspx" target="_blank"&gt;The /Oy switch to control FPO&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/larryosterman/archive/2007/03/12/fpo.aspx" target="_blank"&gt;Reference to FPO no longer in use for Windows builds&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9940388" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/Production+debugging/default.aspx">Production debugging</category></item><item><title>YADCU - Yet another dump capture utility</title><link>http://blogs.msdn.com/arvindsh/archive/2009/12/23/yadcu-yet-another-dump-capture-utility.aspx</link><pubDate>Wed, 23 Dec 2009 04:32:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9940382</guid><dc:creator>arvindsh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9940382.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9940382</wfw:commentRss><description>&lt;p&gt;The plethora of dump capture tools is amazing and sometimes confusing. But here is one from Mark Russinovich which looks interesting: &lt;a href="http://technet.microsoft.com/en-us/sysinternals/dd996900.aspx" target="_blank"&gt;ProcDump&lt;/a&gt;. Some unique capabilities I can see in this tool are things like CPU threshold based triggers, the ability to clone a process so that it is suspended for minimum time when dump is captured, ability to launch another image on the event trigger, etc. Take a look at it, it should add to your debugging toolbox!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9940382" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/Production+debugging/default.aspx">Production debugging</category></item><item><title>Low Fragmentation heap details</title><link>http://blogs.msdn.com/arvindsh/archive/2009/12/18/low-fragmentation-heap-details.aspx</link><pubDate>Fri, 18 Dec 2009 05:42:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9938554</guid><dc:creator>arvindsh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9938554.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9938554</wfw:commentRss><description>&lt;p&gt;Quick post here: I recently came across a &lt;a href="http://rjohnson.uninformed.org/Presentations/200703%20EuSecWest%20-%20Windows%20Vista%20Exploitation%20Countermeasures/rjohnson%20-%20Windows%20Vista%20Exploitation%20Countermeasures.ppt" target="_blank"&gt;great presentation&lt;/a&gt; by Richard Johnson which among other things talks about the implementation details behind ntdll’s Low Fragmentation Heap. While officially not much documentation is available on this subject, I believe Richard’s presentation offers pretty much the most accurate publicly available details on the same.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9938554" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/Production+debugging/default.aspx">Production debugging</category></item><item><title>The meaning of CID in output of kernel debugger commands</title><link>http://blogs.msdn.com/arvindsh/archive/2009/10/30/the-meaning-of-cid-in-output-of-kernel-debugger-commands.aspx</link><pubDate>Fri, 30 Oct 2009 04:26:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9915099</guid><dc:creator>arvindsh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9915099.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9915099</wfw:commentRss><description>&lt;p&gt;Recently someone asked me what was the real meaning of the ‘Cid’ field which appears in the output of commands such as !process and !thread in the kernel debugger (kd). Though from a practical perspective I was aware that these represent the Process ID and Thread ID, I was unsure of what Cid stands for. In course of a search, I found a public source which answers the question. Cid is short for CLIENT_ID which in turn is an undocumented structure.&lt;/p&gt;  &lt;p&gt;The public source is a free PDF version of the excellent “Undocumented Windows 2000 Secrets: A Programmer's Cookbook” book, which you can now find at &lt;a title="http://undocumented.rawol.com/" href="http://undocumented.rawol.com/"&gt;http://undocumented.rawol.com/&lt;/a&gt;. I think this resource is a very useful one for all those interested in Windows Internals and debugging as well. Go take a look at it!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9915099" width="1" height="1"&gt;</description></item><item><title>Quick Tip: vfbasics!_AVRF_EXCEPTION_LOG_ENTRY symbol not resolved?</title><link>http://blogs.msdn.com/arvindsh/archive/2009/08/21/quick-tip-vfbasics-avrf-exception-log-entry-symbol-not-resolved.aspx</link><pubDate>Fri, 21 Aug 2009 13:17:31 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9878428</guid><dc:creator>arvindsh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9878428.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9878428</wfw:commentRss><description>&lt;p&gt;I was debugging some issues with the help of Application Verifier and WinDbg. Since I was onsite I did not have any access to Microsoft’s private symbol servers, so I was using the public symbol server (&lt;a href="http://msdl.microsoft.com/download/symbols"&gt;http://msdl.microsoft.com/download/symbols&lt;/a&gt;). On executing the !avrf extension command in WinDbg I was presented with the following error message in WinDbg:&lt;/p&gt;  &lt;p&gt;&lt;font face="courier new"&gt;***&amp;#160;&amp;#160;&amp;#160; Your debugger is not using the correct symbols&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ***     &lt;br /&gt;***&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ***      &lt;br /&gt;***&amp;#160;&amp;#160;&amp;#160; In order for this command to work properly, your symbol path&amp;#160;&amp;#160; ***      &lt;br /&gt;***&amp;#160;&amp;#160;&amp;#160; must point to .pdb files that have full type information.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ***      &lt;br /&gt;***&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ***      &lt;br /&gt;***&amp;#160;&amp;#160;&amp;#160; Certain .pdb files (such as the public OS symbols) do not&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ***      &lt;br /&gt;***&amp;#160;&amp;#160;&amp;#160; contain the required information.&amp;#160; Contact the group that&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ***      &lt;br /&gt;***&amp;#160;&amp;#160;&amp;#160; provided you with these symbols if you need this command to&amp;#160;&amp;#160;&amp;#160; ***      &lt;br /&gt;***&amp;#160;&amp;#160;&amp;#160; work.&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ***      &lt;br /&gt;***&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ***      &lt;br /&gt;***&amp;#160;&amp;#160;&amp;#160; Type referenced: vfbasics!_AVRF_EXCEPTION_LOG_ENTRY&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ***&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;It turns out that my WinDbg symbol path was as follows, and due to it pointing just to the public symbol server it was loading public symbols for vfbasics.dll:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;0:001&amp;gt; .sympath     &lt;br /&gt;Symbol search path is: SRV*c:\localsymbols*&lt;/font&gt;&lt;a href="http://msdl.microsoft.com/download/symbols"&gt;&lt;font face="Courier New"&gt;http://msdl.microsoft.com/download/symbols&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font face="Courier New"&gt;Expanded Symbol search path is: srv*c:\localsymbols*&lt;/font&gt;&lt;a href="http://msdl.microsoft.com/download/symbols"&gt;&lt;font face="Courier New"&gt;http://msdl.microsoft.com/download/symbols&lt;/font&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font face="Courier New"&gt;0:001&amp;gt; lml     &lt;br /&gt;start&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; module name      &lt;br /&gt;00000000`76dc0000 00000000`76f68000&amp;#160;&amp;#160; ntdll&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (pdb symbols)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c:\localsymbols\ntdll.pdb\FDAD9EE7D6E44F4F9672ECB401A802192\ntdll.pdb      &lt;br /&gt;000007fe`f0e50000 000007fe`f0ebe000&amp;#160;&amp;#160; verifier&amp;#160;&amp;#160; (pdb symbols)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c:\localsymbols\verifier.pdb\43FCE2D63C4544F9B1C67110EB3406951\verifier.pdb      &lt;br /&gt;000007fe`f1660000 000007fe`f1693000&amp;#160;&amp;#160; vrfcore&amp;#160;&amp;#160;&amp;#160; (pdb symbols)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c:\localsymbols\vrfcore.pdb\751D23CCD6504794AF2F18C1E547FE371\vrfcore.pdb      &lt;br /&gt;000007fe`f28e0000 000007fe`f292a000&amp;#160;&amp;#160; vfbasics&amp;#160;&amp;#160; (pdb symbols)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c:\localsymbols\vfbasics.pdb\01ABCDFEFF9F4602A7F055801457A7D61\vfbasics.pdb&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;To resolve the issue, I explicitly pre-pended the path to private symbols for vfbasics (which is c:\windows\system32 or in general %WINDIR%\System32:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;.sympath &lt;/font&gt;&lt;a title="c:\windows\system32*SRV*c:\localsymbols*http://msdl.microsoft.com/download/symbols" href="http://msdl.microsoft.com/download/symbols"&gt;&lt;font face="Courier New"&gt;c:\windows\system32*SRV*c:\localsymbols*http://msdl.microsoft.com/download/symbols&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;.reload&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;ld vfbasics&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;0:001&amp;gt; lml     &lt;br /&gt;start&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; end&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; module name      &lt;br /&gt;00000000`76dc0000 00000000`76f68000&amp;#160;&amp;#160; ntdll&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (export symbols)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; C:\Windows\SYSTEM32\ntdll.dll      &lt;br /&gt;000007fe`f28e0000 000007fe`f292a000&amp;#160;&amp;#160; vfbasics&amp;#160;&amp;#160; (private pdb symbols)&amp;#160; C:\Windows\SYSTEM32\vfbasics.pdb&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Then !avrf works just fine!&lt;/p&gt;  &lt;p&gt;If you liked this post, please do rate it and try to leave some comments if you can!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9878428" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/Production+debugging/default.aspx">Production debugging</category></item><item><title>RESOURCE GOVERNOR: Difference between MAX_MEMORY_PERCENT and REQUEST_MAX_MEMORY_GRANT_PERCENT settings</title><link>http://blogs.msdn.com/arvindsh/archive/2009/07/26/resource-governor-difference-between-max-memory-percent-and-request-max-memory-grant-percent-settings.aspx</link><pubDate>Sun, 26 Jul 2009 10:42:07 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9848972</guid><dc:creator>arvindsh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9848972.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9848972</wfw:commentRss><description>&lt;p&gt;Resource governor is a useful feature in SQL Server 2008 which can provide instance-level throttling of CPU and memory resources. I will not dwell into the basic details and architecture, as they are very well documented in Books Online and also in the reference links mentioned at the end of this post. However, I do want to briefly discuss the difference between two different settings which control memory allocations:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The REQUEST_MAX_MEMORY_GRANT_PERCENT setting which is a property of the workload group&lt;/li&gt;    &lt;li&gt;The MAX_MEMORY_PERCENT which is a property of the resource pool&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;From the available resources on this topic it may not be totally apparent as to what is the difference between these two, apart from the fact that they are applied to different entities: one to the workload group and one to the resource pool. &lt;strong&gt;However, the more important thing is that they actually control 2 different aspects of SQL Server memory.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MAX_MEMORY_PERCENT&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This controls the total amount of memory (including data and plan cache) used by a resource pool. Here is the expected result if your request running in workload group ‘mygroup’ and therefore in resource pool ‘mypool’ exceeds this value:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Msg 701, Level 17, State 123, Line 2     &lt;br /&gt;There is insufficient system memory in resource pool 'mypool' to run this query.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;It is also interesting to see that setting this parameter effectively affects plan cache size. The resource governor will aggressively evict plans from cache if the above limit is reached. I arrived at this finding based on a very interesting Microsoft Connect feedback item involving Boris Baryshnikov, and the same is documented at the link at the end of the references section. You can easily test the same by providing a lot of adhoc queries to the engine, such as what the sample script below does:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;declare @i int     &lt;br /&gt;select @i&amp;#160; = 1      &lt;br /&gt;declare @s nvarchar(500)      &lt;br /&gt;while @i &amp;lt; 100000      &lt;br /&gt;begin      &lt;br /&gt;select @s = N'select * from Person.Contact where ContactID = ' + convert(varchar, @i)      &lt;br /&gt;exec sp_executesql @s       &lt;br /&gt;select @i = @i + 1       &lt;br /&gt;end&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you run this query without resource governor enabled, you will find that sys.dm_exec_cached_plans is quickly filled with a lot of ‘junk’ plans, one for each iteration above:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;select plan_handle, text from sys.dm_exec_cached_plans     &lt;br /&gt;cross apply sys.dm_exec_sql_text(plan_handle)&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;In my simple test, with resource governor enabled, the plan cache is kept small as older plans are more aggressively evicted from cache. So in my opinion this is a very interesting ‘side effect’ of the MAX_MEMORY_PERCENT setting.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;REQUEST_MAX_MEMORY_GRANT_PERCENT &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This controls the amount of workspace memory granted to the workload group. Workspace memory is required for operations such as hash join, sorts etc. which need active memory to work within. If you exceed this value, here is the typical error message you can expect:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Msg 8657, Level 17, State 1, Line 2     &lt;br /&gt;Could not get the memory grant of 1736 KB because it exceeds the maximum configuration limit in workload group 'mygroup' (256) and resource pool 'mypool' (256).&amp;#160; Contact the server administrator to increase the memory usage limit.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Now, there is a small but important point regarding REQUEST_MAX_MEMORY_GRANT_PERCENT. Reproducing text from Books Online: &lt;em&gt;If the query memory requirements exceed the limit that is specified by this parameter, the server does the following: &lt;/em&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;For user-defined workload groups, the server tries to reduce the query degree of parallelism until the memory requirement falls under the limit, or until the degree of parallelism equals 1. If the query memory requirement is still greater than the limit, error 8657 occurs. &lt;/em&gt;&lt;/li&gt;    &lt;li&gt;&lt;em&gt;For internal and default workload groups, the server permits the query to obtain the required memory.&lt;/em&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The important thing to note is that the internal and default workload groups will NOT prevent the query from running.&lt;/p&gt;  &lt;p&gt;That’s it! I recommend you dig further with some useful reference links:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a title="Managing SQL Server Workloads with Resource Governor" href="http://msdn.microsoft.com/en-us/library/bb933866.aspx"&gt;Managing SQL Server Workloads with Resource Governor&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.technet.com/sqlos/archive/2007/12/14/part-1-anatomy-of-sql-server-2008-resource-governor-cpu-demo.aspx"&gt;http://blogs.technet.com/sqlos/archive/2007/12/14/part-1-anatomy-of-sql-server-2008-resource-governor-cpu-demo.aspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.technet.com/sqlos/archive/2008/01/18/part-2-resource-governor-cpu-demo-on-multiple-cpus.aspx"&gt;http://blogs.technet.com/sqlos/archive/2008/01/18/part-2-resource-governor-cpu-demo-on-multiple-cpus.aspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/psssql/archive/2008/01/10/sql-server-2008-resource-governor-questions.aspx"&gt;http://blogs.msdn.com/psssql/archive/2008/01/10/sql-server-2008-resource-governor-questions.aspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.msdn.com/psssql/archive/2009/02/23/how-it-works-resource-governor-internal-group.aspx"&gt;http://blogs.msdn.com/psssql/archive/2009/02/23/how-it-works-resource-governor-internal-group.aspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="Amount of RAM for procedure cache should be configurable Microsoft" href="https://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx?FeedbackID=293188"&gt;Amount of RAM for procedure cache should be configurable&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;If you liked this post, please take a minute to rate it and if you can provide some comments, I’d appreciate it very much!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9848972" width="1" height="1"&gt;</description></item><item><title>t-SQL Anti-Pattern: Index Key Order and Query Expression Order</title><link>http://blogs.msdn.com/arvindsh/archive/2009/07/06/t-sql-anti-pattern-index-key-order-and-query-expression-order.aspx</link><pubDate>Mon, 06 Jul 2009 14:52:18 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9819574</guid><dc:creator>arvindsh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9819574.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9819574</wfw:commentRss><description>&lt;p&gt;This is really not a T-SQL anti-pattern as much as it is a database design issue, but we see it so often that it’s worthwhile bringing it up and clarifying things.&lt;/p&gt;  &lt;p&gt;For illustrating the scenario, let’s examine the table Person.Contact in the AdventureWorks database. It has 2 columns called FirstName and LastName. Let’s say an application frequently queries this table with these columns in the WHERE clause. The query looks like this:&lt;/p&gt;  &lt;p&gt;SELECT ContactID from Person.Contact &lt;/p&gt;  &lt;p&gt;WHERE FirstName = ‘Carla’ and LastName = ‘Adams’&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In order to support the query for seeking to the data, we create this index:&lt;/p&gt;  &lt;p&gt;create nonclustered index idx_contact_names on Person.Contact(FirstName, LastName)&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Now, let’s say there’s another application which fires another query on this table, and that query looks like this:&lt;/p&gt;  &lt;p&gt;SELECT ContactID from Person.Contact &lt;/p&gt;  &lt;p&gt;WHERE LastName = ‘Alberts’ and FirstName = ‘Amy’ &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Notice the difference between the 2 queries: the predicate ordering in the expression is different. Now, for the problem: some developers will now create another index, with the column order as (LastName, FirstName). That is not required. If you view the execution plan for both the queries, you will notice that the index is being used!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/tSQLAntiPatternIndexKeyOrderandQueryExpr_F43A/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/tSQLAntiPatternIndexKeyOrderandQueryExpr_F43A/image_thumb.png" width="644" height="279" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;If you end up creating 2 indexes for the above scenario, SQL Server will effectively use only one of them for queries such as the above. The other index will only add to the overhead of index maintenance required during DML operations. So it is a redundant index and as such should be dropped.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Conclusion&lt;/p&gt;  &lt;p&gt;The predicate order is independent of the choice of index to be created / the choice of index being used. SQL Server will use the index which yields a good plan.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9819574" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/T-SQL+Anti-patterns/default.aspx">T-SQL Anti-patterns</category></item><item><title>Tip of the day: "An attempt was made to load a program with an incorrect format" .NET P/INVOKE issue</title><link>http://blogs.msdn.com/arvindsh/archive/2009/06/21/tip-of-the-day-an-attempt-was-made-to-load-a-program-with-an-incorrect-format-net-p-invoke-issue.aspx</link><pubDate>Sun, 21 Jun 2009 07:20:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9794490</guid><dc:creator>arvindsh</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9794490.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9794490</wfw:commentRss><description>&lt;p&gt;The other day I was using a 3rd party utility which was built on the .NET platform. My primary work computer happens to be a x64 installation. So on this computer when I fired the utility up, and tried to perform some tasks it would error with a .NET Exception which basically had the following characteristics:&lt;/p&gt; &lt;p&gt;- Message: "An attempt was made to load a program with an incorrect format"&lt;/p&gt; &lt;p&gt;- Exception: System.BadImageFormatException&lt;/p&gt; &lt;p&gt;After some troubleshooting it turned out that this utility was trying to load a plain-old DLL (which exported some functions) presumably using P/Invoke. The DLL was built for 32-bit platforms. Now it turns out that by design a 64-bit process (the 3rd party utility would run as a 64-bit process owing to the 64-bit .NET runtime) would be prevented from loading a non-COM 32-bit DLL (32-bit COM DLLs are loaded in a DLLHOST.EXE surrogate when invoked from a 64-bit client process, BTW...) with the above exception.&lt;/p&gt; &lt;p&gt;To configure the utility to run as a 32-bit .NET process, it turns out you can use the &lt;a href="http://msdn.microsoft.com/en-us/library/ms164699(VS.80).aspx" target="_blank"&gt;CORFLAGS&lt;/a&gt; utility. You run it as follows to switch the 32-bit execution mode ON:&lt;/p&gt; &lt;p&gt;corflags utility.exe /32Bit+&lt;/p&gt; &lt;p&gt;To turn it off, just use /32Bit- in the above command line.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9794490" width="1" height="1"&gt;</description></item><item><title>VISUAL STUDIO REMOTE DEBUGGER HISTORY</title><link>http://blogs.msdn.com/arvindsh/archive/2009/05/23/visual-studio-remote-debugger-history.aspx</link><pubDate>Sat, 23 May 2009 15:52:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9637294</guid><dc:creator>arvindsh</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9637294.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9637294</wfw:commentRss><description>&lt;p&gt;Let's say you use the Visual Studio Remote Debugger extensively, and with a wide variety of remote targets. Very quickly the list of qualifiers (see the image below to understand what I refer to) can grow quickly with 'noise' items.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/VISUALSTUDIOREMOTEDEBUGGERHISTORY_10236/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/VISUALSTUDIOREMOTEDEBUGGERHISTORY_10236/image_thumb.png" width="644" height="81"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If you were curious about where these are stored, they happen to be under one of the sub-keys of the following registry key:&lt;/p&gt; &lt;p&gt;HKCU\Software\Microsoft\VisualStudio\9.0\Debugger\Port MRU&lt;/p&gt; &lt;p&gt;Before you get any further ideas, I must include the statutory warning:  &lt;p&gt;&lt;u&gt;WARNING: Using Registry Editor incorrectly can cause serious problems that may require you to reinstall Windows. Microsoft cannot guarantee that problems resulting from the incorrect use of Registry Editor can be solved. Use Registry Editor at your own risk. If you edit the registry, click the following article number to view the article in the Microsoft Knowledge Base:&lt;/u&gt;  &lt;p&gt;&lt;a href="http://support.microsoft.com/kb/256986" target="_blank"&gt;Description of the Microsoft Windows Registry&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9637294" width="1" height="1"&gt;</description></item><item><title>Rolling upgrade of 1 instance from 2-node, 2-instance sql failover cluster to slipstreamed sql 2008 SP1</title><link>http://blogs.msdn.com/arvindsh/archive/2009/04/11/rolling-upgrade-of-1-instance-from-2-node-2-instance-sql-failover-cluster-to-slipstreamed-sql-2008-sp1.aspx</link><pubDate>Sat, 11 Apr 2009 15:00:45 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9545247</guid><dc:creator>arvindsh</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9545247.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9545247</wfw:commentRss><description>&lt;p&gt;Now that &lt;a href="http://blogs.msdn.com/sqlreleaseservices/archive/2009/04/08/sql-server-2008-sp1-released.aspx" target="_blank"&gt;SQL Server 2008 SP1 is released&lt;/a&gt; (download link &lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=66ab3dbb-bf3e-4f46-9559-ccc6a4f9dc19" target="_blank"&gt;here&lt;/a&gt;), it is time to test a very interesting capability: Service Pack slipstreaming. That means that you can save some time by doing an 'integrated' installation of SQL 2008 which includes the SP1 binaries and avoid having to apply SP1 later on. Windows had this capability for some time but only now is it officially supported for SQL Server 2008.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This walk-through was conducted on a 2-node, 2-SQL instance Windows 2003 x86 cluster. The 2 instances were:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;VIRSQL2K - default instance of SQL Server 2000 SP4 (2039 build)  &lt;li&gt;VIRSQL2K5\SQL2K5 - named instance of SQL Server 2005 SP2 (3042 build)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Objective and Tools&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;We want to upgrade the SQL 2000 instance to SQL 2008, in-place. Currently we will not be touching the SQL 2005 instance (maybe I will do another blog post for that if there are any specific observations.) The objective was to minimize downtime of either instance while performing an in-place upgrade to SQL Server 2008 SP1. To achieve the objective, we use 2 new features which are available in SQL Server 2008:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Rolling upgrades - by using this approach to upgrade, we minimize the time that the instance which is being upgraded is not available to end users. Typically in SQL 2005 or 2000, both version and service pack / hotfix upgrades required total downtime wherein the instance will not be available. Comparatively with rolling upgrade to SQL 2008 we can have minimum downtime, which is restricted to the amount of time it takes to upgrade system databases and the user databases to the SQL 2008 format. In my testing this minimum downtime was measured at around a minute.  &lt;ul&gt; &lt;li&gt;&lt;a title="http://support.microsoft.com/kb/958734" href="http://support.microsoft.com/kb/958734" target="_blank"&gt;http://support.microsoft.com/kb/958734&lt;/a&gt; talks about rolling updates / upgrades&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Slipstreamed setup - this is a new feature introduced in SQL Server 2008 SP1. If you were not aware about this capability, I would request you to study the details from the following resources:  &lt;ul&gt; &lt;li&gt;&lt;a title="http://blogs.msdn.com/petersad/archive/2009/02/25/sql-server-2008-creating-a-merged-slisptream-drop.aspx" href="http://blogs.msdn.com/petersad/archive/2009/02/25/sql-server-2008-creating-a-merged-slisptream-drop.aspx" target="_blank"&gt;http://blogs.msdn.com/petersad/archive/2009/02/25/sql-server-2008-creating-a-merged-slisptream-drop.aspx&lt;/a&gt;  &lt;li&gt;&lt;a title="http://blogs.msdn.com/psssql/archive/2009/03/17/how-to-fix-your-sql-server-2008-setup-before-you-run-setup-part-ii.aspx" href="http://blogs.msdn.com/psssql/archive/2009/03/17/how-to-fix-your-sql-server-2008-setup-before-you-run-setup-part-ii.aspx" target="_blank"&gt;http://blogs.msdn.com/psssql/archive/2009/03/17/how-to-fix-your-sql-server-2008-setup-before-you-run-setup-part-ii.aspx&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Step-by-step&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;1. Pre-requisites&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Install the Windows Installer 4.5 (found on SQL 2008 DVD) prior to your actual downtime. Do not reboot at this stage.&lt;/li&gt; &lt;li&gt;Install the hotfix for KB article 937444 (from &lt;a href="http://support.microsoft.com/kb/937444" target="_blank"&gt;http://support.microsoft.com/kb/937444&lt;/a&gt;). The SQL issue pertaining to this OS hotfix is documented in &lt;a title="http://support.microsoft.com/kb/955828" href="http://support.microsoft.com/kb/955828" target="_blank"&gt;http://support.microsoft.com/kb/955828&lt;/a&gt;&lt;/li&gt; &lt;li&gt;Review all the cluster specific best practices documented in &lt;a href="http://blogs.msdn.com/arvindsh/archive/2009/01/03/sql-server-2000-2005-failover-cluster-pre-installation-checklist.aspx" target="_blank"&gt;my previous post&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Install .NET Framework 3.5 SP1 (found on SQL 2008 DVD) prior to your actual downtime.&lt;/li&gt; &lt;li&gt;At a suitable window (you may couple this with your actual upgrade downtime) you need to reboot to complete the process.&lt;/li&gt; &lt;li&gt;Do these steps on both nodes. Take care to stagger the reboots mentioned above to avoid total non-availability of your SQL instances.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;1. Prepare the merged (slipstreamed) media&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;In my case I was just dealing with x86 instances, so I optimized some steps from the blogs above&lt;/p&gt; &lt;ul&gt; &lt;li&gt;From SQL 2008 DVD, copy the x86 subfolder and the files from the root (setup.exe etc.), I did not copy the IA64 and x64 folders. I copied these to c:\sql2008 on my local nodes  &lt;li&gt;Extract the SQL 2008 SP1 contents to c:\sql2008\pcu on each of the nodes. To do this I used  &lt;ul&gt; &lt;li&gt;SQLServer2008SP1-KB968369-x86-ENU.exe /x:c:\sql2008\pcu /q&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;I then copied setup.exe and setup.rll from the c:\sql2008\pcu folder to c:\sql2008, overwriting the older ones  &lt;li&gt;I then copied the FILEs (NOT the sub-folders, and also ignore the Microsoft.SQL.Chainer.PackageData.dll from c:\sql2008\pcu\x86) of the c:\sql2008\pcu\x86 folder, into the c:\sql2008\x86 folder.  &lt;ul&gt; &lt;li&gt;If you accidentally copied Microsoft.SQL.Chainer.PackageData.dll (like I did once) you will receive an error message when you launch setup: 'specified action LandingPage is not supported for the sql server patching operation'. (In fact the blog post from Peter also talks about this error.)&lt;/li&gt;&lt;/ul&gt; &lt;li&gt;Peter's original blog post and also the current one from Bob Ward mention copying the sqlsupport.msi files over. I did do that, though Peter mentioned it is no longer required. Copy the sqlsupport.msi from c:\sql2008\pcu\x86\setup\1033 to c:\sql2008\x86\setup (note that there is no 1033 in the destination, that is not a typo.) You can overwrite the older version and you may note that the older version was actually larger than the new one!  &lt;li&gt;At this time you are ready to roll.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;2. Run setup on passive node&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I ran setup from the command prompt, specifying the PCUSource by hand:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;cd c:\sql2008  &lt;li&gt;setup.exe /Action=UPGRADE /PCUSource=c:\sql2008\pcu&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Initially I select the SQL 2000 instance, which is active on the other node:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_8.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb_3.png" width="644" height="178"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In the cluster security policy screen, you need to enter the service account domain group names. Now something related to this step caused a problem for later on, I will explain it later:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_6.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb_2.png" width="644" height="144"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;At the Upgrade Rules screen in setup, you can verify that we are slipstreaming:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_2.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb.png" width="644" height="367"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Also in Upgrade Rules you might be warned that any other SQL instances active on this node will be restarted due to cluster resource DLL update. This is very important if you have not planned on those other instances being restarted. So you should note it and factor it into your upgrade plans:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_4.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb_1.png" width="644" height="187"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Later the cluster upgrade report clearly tells us it is going to upgrade just this (passive) node:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_10.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb_4.png" width="644" height="172"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Once again we check we are slipstreaming:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_12.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb_5.png" width="644" height="469"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The rest of setup was fairly uneventful and at the end I checked the sqlservr.exe version on this (passive) node:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_14.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb_6.png" width="644" height="436"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;If you check the old SQL 2000 installation folder, you will note that the binaries and other folders have been cleaned up.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;3. Change group for failed Full-Text Search resource&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;At this stage you may notice that the full-text search service cluster resource is either stopped or plain does not even show up. In my case I received the following message in cluster admin. I just moved out the fulltext resource into another cluster group for the moment.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_16.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb_7.png" width="644" height="364"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;4. Failover and watch the upgrade of system databases happen&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;At this stage, you are ready to failover the SQL 2000 instance from (let's say) NodeA (which is still running SQL 2000 and has not been touched by upgrade process) to the NodeB (on which the SQL 2000 service has been upgraded, binaries-only, to SQL 2008). What is supposed to happen after the move group, is that the SQL 2000 instance is temporarily unavailable, SQL 2008 service starts up on NodeB, it then upgrades the system databases to SQL 2008 'format' and also upgrades the user databases to SQL 2008 'format'. This is technically a point of 'no-return' from which roll back means reinstalling SQL 2000 and restoring from backups.&lt;/p&gt; &lt;p&gt;In my case, things did not go well initially, and on failover from NodeA to NodeB, SQL 2008 instance failed to come online on NodeB, restarted and couple of times and then flipped back to NodeA. Checking the event log showed this message:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;initerrlog: Could not open error log file ''. Operating system error = 3(The system cannot find the path specified.). &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;I verified the startup parameters using Configuration Manager on NodeB and also double-checked using Enterprise Manager on NodeA, and they were correct. The only other possibility was a permissions issue, and I used &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx" target="_blank"&gt;Process Monitor&lt;/a&gt; from SysInternals to track down the issue. It turned out that my SQL 2008 service account (which was the same as what the 2000 version used) did not have access to a registry key. Then it dawned on me that the domain group membership I referred to previously, was not granted. To fix this was easy, used AD Users and Computers and added my service account into this group:  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_18.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb_8.png" width="644" height="438"&gt;&lt;/a&gt;  &lt;p&gt;After this was fixed, I was able to move group again to NodeB at which stage the database upgrades happened and the instance was online. Here are some random snippets from the SQL errorlog at the time of upgrade, just to show you what happened under the hood:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;2009-04-11 04:08:06.43 Server Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86)  &lt;li&gt;2009-04-11 04:08:17.14 spid7s Database 'master' running the upgrade step from version 654 to version 655.  &lt;li&gt;2009-04-11 04:08:18.84 spid8s Converting database 'model' from version 539 to the current version 655.  &lt;li&gt;2009-04-11 04:08:33.61 spid7s Database 'master' is upgrading script 'sqlagent90_msdb_upgrade.sql' from level 0 to level 2.  &lt;li&gt;2009-04-11 04:09:26.75 spid7s Recovery is complete.&amp;nbsp; This is an informational message only.&amp;nbsp; No user action is required.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Total time from start to finish: 1:01 minutes. That means that my instance was potentially unavailable just for this long. That is pretty impressive!&lt;/p&gt; &lt;p&gt;&lt;strong&gt;5. Run setup on previously active node&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The process on NodeA was pretty much the same as described above. All of the steps described above are relevant, except for #4 above, because the databases are already upgraded once. The only thing you may come across if you have not handled the full-text search resource issue would be an error in setup: 'The device is not ready':&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_22.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb_10.png" width="644" height="156"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;I am not 100% sure, but it seems related to the fact that full text was not moved out to another group. Moving it out fixed the above setup error on NodeA.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;6. Verify setup&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Just a casual check here using Management Studio (yes, the management tools get upgraded from Query Analyzer / Enterprise Manager to SSMS) and verify that we are indeed on SQL 2008 SP1:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_24.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Rollingupgradeof2node2instancesqlfailove_E0FF/image_thumb_11.png" width="644" height="368"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Key Learnings&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Read the blog posts mentioned above very carefully while preparing the merged drop  &lt;li&gt;Watch out for the exact DLL to be excluded (Microsoft.SQL.Chainer.PackageData.dll).  &lt;li&gt;Pre-create the domain group for SQL Server 2008 service account in the AD (only required if you are on Windows 2003)  &lt;li&gt;Add the SQL 2000 service account to the SQL 2008 domain group before you run the setup program  &lt;li&gt;Change group for the failed Full-Text Search resource from the SQL group to any other group  &lt;li&gt;Due to resource DLL update, be prepared for a restart of any other SQL instance on the node you are upgrading (such as in a N-instance cluster)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;I hope you enjoyed this blog post and if you do like it, please do take a second to rate this post and also leave a few comments if you can. See you later!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9545247" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/SQL+High+Availability/default.aspx">SQL High Availability</category></item><item><title>Debugging Toolbox</title><link>http://blogs.msdn.com/arvindsh/archive/2009/01/30/debugging-toolbox.aspx</link><pubDate>Fri, 30 Jan 2009 22:51:01 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9385198</guid><dc:creator>arvindsh</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9385198.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9385198</wfw:commentRss><description>&lt;p&gt;This one is a quickie for an easy reference to most commonly used debugging tools and links. I hope you find it useful, and kindly indicate your feedback on this page by using the comments section or by rating the post!&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;Debugging Toolbox&lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;table style="border-collapse: collapse; mso-yfti-tbllook: 1184; mso-padding-alt: 0in 0in 0in 0in" class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0"&gt; &lt;tbody&gt; &lt;tr style="height: 3.5pt; mso-yfti-irow: 0; mso-yfti-firstrow: yes"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; height: 3.5pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;Tool&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; height: 3.5pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;Key Usage Scenarios&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; height: 3.5pt; border-top: black 1pt solid; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;Download location&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 1"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;WinDbg&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Interactive production debugging&lt;/p&gt; &lt;p class="MsoNormal"&gt;Dump analysis&lt;/p&gt; &lt;p class="MsoNormal"&gt;Local kernel debugging&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top" rowspan="3"&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"&gt;http://www.microsoft.com/whdc/devtools/debugging/default.mspx&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 2"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;CDB&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Scriptable, low overhead capture of dumps&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Low overhead interactive debugging&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 3"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;ADPlus&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Scripted automation for capturing dumps&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 4"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;DebugDiag&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Can setup rules for capturing dumps in an unattended, logged-off scenario&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Automated analysis of basic crash, hang and leak scenarios&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.iis.net"&gt;http://www.iis.net&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 5"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;SysInternals Process Monitor&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Interactive process and thread level details&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Handle usage&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.sysinternals.net"&gt;http://www.sysinternals.net&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 6"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;TLIST&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Listing services&lt;/p&gt; &lt;p class="MsoNormal"&gt;Listing process tree&lt;/p&gt; &lt;p class="MsoNormal"&gt;Listing which processes have loaded a module&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.microsoft.com/whdc/devtools/debugging/default.mspx"&gt;http://www.microsoft.com/whdc/devtools/debugging/default.mspx&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 7"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Performance Monitor&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Interactive display of performance data on the system (System Monitor)&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Logged-off unattended capturing of performance logs&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Shipped with the OS&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 8"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Application Verifier&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Enable various checks to trap deep rooted issues earlier such as &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;Orphaned critical sections&lt;/p&gt; &lt;p class="MsoNormal"&gt;Heap corruption&lt;/p&gt; &lt;p class="MsoNormal"&gt;Unsafe API usage&lt;/p&gt; &lt;p class="MsoNormal"&gt;Simulate low memory conditions&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/aa480483.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa480483.aspx&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=C4A25AB9-649D-4A1B-B4A7-C9D8B095DF18&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=C4A25AB9-649D-4A1B-B4A7-C9D8B095DF18&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 9"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;PREFast&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Static source code analysis to detect potential buffer / stack overruns etc.&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.microsoft.com/whdc/devtools/tools/prefast.mspx"&gt;http://www.microsoft.com/whdc/devtools/tools/prefast.mspx&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 10"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;XPerf / XPerfInfo&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Profiler / tracing of user mode applications&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc305187.aspx"&gt;http://msdn.microsoft.com/en-us/library/cc305187.aspx&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://msdn.microsoft.com/en-us/performance/cc825801.aspx"&gt;http://msdn.microsoft.com/en-us/performance/cc825801.aspx&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/seema/archive/2008/10/08/xperf-a-cpu-sampler-for-silverlight.aspx"&gt;http://blogs.msdn.com/seema/archive/2008/10/08/xperf-a-cpu-sampler-for-silverlight.aspx&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 11"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;UserDump&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Automated capture of dumps&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=e089ca41-6a87-40c8-bf69-28ac08570b7e&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=e089ca41-6a87-40c8-bf69-28ac08570b7e&amp;amp;DisplayLang=en&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr style="mso-yfti-irow: 12; mso-yfti-lastrow: yes"&gt; &lt;td style="border-bottom: black 1pt solid; border-left: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;LeakDiag&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;Leak diagnostics&lt;/p&gt;&lt;/td&gt; &lt;td style="border-bottom: black 1pt solid; border-left: medium none; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; border-top: medium none; border-right: black 1pt solid; padding-top: 0in" valign="top"&gt; &lt;p class="MsoNormal"&gt;&lt;a href="ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20Tools/LeakDiag"&gt;ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20Tools/LeakDiag&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;Native code debugging sites and blogs&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.advancedwindowsdebugging.com"&gt;http://www.advancedwindowsdebugging.com&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/ntdebugging"&gt;http://blogs.msdn.com/ntdebugging&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.osronline.com"&gt;http://www.osronline.com&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.alex-ionscu.com"&gt;http://www.alex-ionscu.com&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.dumpanalysis.org"&gt;http://www.dumpanalysis.org&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.nynaeve.net/"&gt;http://www.nynaeve.net/&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.thinktecture.com/ingo/archive/2006/08/05/414674.aspx"&gt;http://blogs.thinktecture.com/ingo/archive/2006/08/05/414674.aspx&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;.NET articles:&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms954594.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms954594.aspx&lt;/a&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/03/06/Bugslayer"&gt;http://msdn.microsoft.com/msdnmag/issues/03/06/Bugslayer&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/05/03/Bugslayer"&gt;http://msdn.microsoft.com/msdnmag/issues/05/03/Bugslayer&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://support.microsoft.com/kb/892277"&gt;http://support.microsoft.com/kb/892277&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/05/07/Debugging/"&gt;http://msdn.microsoft.com/msdnmag/issues/05/07/Debugging/&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://msdn.microsoft.com/msdnmag/issues/06/11/CLRInsideOut/default.aspx"&gt;http://msdn.microsoft.com/msdnmag/issues/06/11/CLRInsideOut/default.aspx&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;b&gt;.NET debugging blogs:&lt;o:p&gt;&lt;/o:p&gt;&lt;/b&gt;&lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/yunjin/"&gt;http://blogs.msdn.com/yunjin/&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/tess/"&gt;http://blogs.msdn.com/tess/&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/jmstall/"&gt;http://blogs.msdn.com/jmstall/&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/mvstanton/"&gt;http://blogs.msdn.com/mvstanton/&lt;/a&gt;&amp;nbsp; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/cbrumme/"&gt;http://blogs.msdn.com/cbrumme/&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/maoni/"&gt;http://blogs.msdn.com/maoni/&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/toddca/"&gt;http://blogs.msdn.com/toddca/&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://blogs.msdn.com/suzcook/"&gt;http://blogs.msdn.com/suzcook/&lt;/a&gt; &lt;/p&gt; &lt;p class="MsoNormal"&gt;&lt;a href="http://www.debugtricks.com"&gt;http://www.debugtricks.com&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9385198" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/Production+debugging/default.aspx">Production debugging</category></item><item><title>SQL Server 2000 / 2005 Failover Cluster Pre-installation Checklist</title><link>http://blogs.msdn.com/arvindsh/archive/2009/01/03/sql-server-2000-2005-failover-cluster-pre-installation-checklist.aspx</link><pubDate>Sat, 03 Jan 2009 09:12:08 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9270113</guid><dc:creator>arvindsh</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9270113.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9270113</wfw:commentRss><description>&lt;p&gt;Here's a quick checklist before you install an instance of SQL Server on a failover cluster; or any service pack or hotfix for an instance. Following this list should eliminate 90% of the most common causes of setup failure.&lt;/p&gt; &lt;p&gt;Please note that this checklist does not cover all the 'normal' requirements for installation of a SQL Server failover cluster instance. For that you may refer to this excellent &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=818234dc-a17b-4f09-b282-c6830fead499&amp;amp;DisplayLang=en"&gt;white paper on the subject&lt;/a&gt;. I also recommend that you view my colleague &lt;a href="http://support.microsoft.com/kb/953170"&gt;Uttam Parui's webcast&lt;/a&gt; as well prior to attempting any installations on Windows Server 2008. He covers many issues specific to Windows 2008 as well.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Common points for all SQL 200x versions&lt;/strong&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="746" border="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;&lt;strong&gt;Checklist item&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="470"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;1. Name resolution&lt;/td&gt; &lt;td valign="top" width="470"&gt;Verify network name resolution of physical nodes using machine name and FQDN (fully qualified DNS name) using PING&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;&amp;nbsp;&lt;/td&gt; &lt;td valign="top" width="470"&gt;Verify network name resolution of SQL Server virtual network name using PING of network name and FQDN&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;2. Verify admin shares&lt;/td&gt; &lt;td valign="top" width="470"&gt;From each node, try to access the C$ and ADMIN$ shares of each of the other nodes.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;3. Verify network binding order&lt;/td&gt; &lt;td valign="top" width="470"&gt; &lt;ul&gt; &lt;li&gt;Click &lt;strong&gt;Start&lt;/strong&gt;, point to &lt;strong&gt;Settings&lt;/strong&gt;, click &lt;strong&gt;Control Panel&lt;/strong&gt;, and then double-click &lt;strong&gt;Network and Dial-up Connections&lt;/strong&gt;.  &lt;li&gt;On the &lt;strong&gt;Advanced&lt;/strong&gt; menu, click &lt;strong&gt;Advanced Settings&lt;/strong&gt;.  &lt;li&gt;In the &lt;strong&gt;Connections&lt;/strong&gt; box, make sure that your bindings are in the following order, and then click &lt;strong&gt;OK&lt;/strong&gt;: &lt;/li&gt; &lt;ul&gt; &lt;li&gt;External public network  &lt;li&gt;Internal private network (Heartbeat)  &lt;li&gt;[Remote Access Connections] &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt; &lt;p&gt;The idea is to have the public network as the highest in the binding order.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;4. Verify the cluster network priority and ensure that private network is for internal communications only.&lt;/td&gt; &lt;td valign="top" width="470"&gt; &lt;ul&gt; &lt;li&gt;Start Cluster Administrator.  &lt;li&gt;Click the cluster name at the root of Administrator. On the &lt;strong&gt;File&lt;/strong&gt; menu, click &lt;strong&gt;Properties&lt;/strong&gt;.  &lt;li&gt;On the &lt;strong&gt;Network Priority&lt;/strong&gt; tab, verify that the private network is listed at the top. If it is not, use the &lt;strong&gt;Move Up&lt;/strong&gt; button to increase its priority.  &lt;li&gt;Click the private network, and then click &lt;strong&gt;Properties&lt;/strong&gt;.  &lt;li&gt;Click to select the &lt;strong&gt;Enable this network for cluster use&lt;/strong&gt; check box.  &lt;li&gt;Click &lt;strong&gt;Internal cluster communications only (private Network)&lt;/strong&gt;.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;The idea here is to make sure that the private network only carries internal cluster traffic and that it is listed as the #1 preferred network to carry that traffic.&lt;/p&gt; &lt;p&gt;Refer to &lt;a href="http://support.microsoft.com/kb/"&gt;http://support.microsoft.com/kb/258750&lt;/a&gt; for this and the previous point.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;5. Ensure that all the nodes are in perfect time synchronization with your DC&lt;/td&gt; &lt;td valign="top" width="470"&gt;Using NET TIME command you can check (and optionally set) the local time on each node. Failure to synchronize the time on the nodes will cause Kerberos authentication failures which in some cases can cause setup to fail.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;6. Verify that there are no 'special' characters in resource names&lt;/td&gt; &lt;td valign="top" width="470"&gt;Avoid the following special characters in the resource names:&lt;br&gt;&lt;br&gt; &lt;ul&gt; &lt;li&gt;&amp;gt;  &lt;li&gt;&amp;lt;  &lt;li&gt;"  &lt;li&gt;'  &lt;li&gt;&amp;amp;  &lt;li&gt;(, )  &lt;li&gt;+  &lt;li&gt;Characters with a dieresis, a tilde, or a space character. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Reference: &lt;a href="http://support.microsoft.com/kb/"&gt;http://support.microsoft.com/kb/302491&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;7. Ensure all the physical disk resources in the cluster are online&lt;/td&gt; &lt;td valign="top" width="470"&gt;Though this issue primarily has been observed for SQL Server 2005, it may be a good idea to check it for all versions.&lt;br&gt;&lt;br&gt;Reference: &lt;a title="http://blogs.msdn.com/sqlserverfaq/archive/2008/12/17/sql-server-2005-setup-failing-to-install-on-cluster-with-unexpected-failure-while-performing-the-scc-checks.aspx" href="http://blogs.msdn.com/sqlserverfaq/archive/2008/12/17/sql-server-2005-setup-failing-to-install-on-cluster-with-unexpected-failure-while-performing-the-scc-checks.aspx"&gt;http://blogs.msdn.com/sqlserverfaq/archive/2008/12/17/sql-server-2005-setup-failing-to-install-on-cluster-with-unexpected-failure-while-performing-the-scc-checks.aspx&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;8. Remote Registry&lt;/td&gt; &lt;td valign="top" width="470"&gt;Ensure that the remote registry service is started&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;9. Service Account User Rights Assignment&lt;/td&gt; &lt;td valign="top" width="470"&gt;Ensure that your SQL Server service account has the following privileges:&lt;br&gt; &lt;ul&gt; &lt;li&gt;Act as part of the operating system (Microsoft Windows 2000 only&lt;/li&gt; &lt;li&gt;Adjust memory quotas for a process&lt;/li&gt; &lt;li&gt;Bypass traverse checking&lt;/li&gt; &lt;li&gt;Log on as a batch job&lt;/li&gt; &lt;li&gt;Log on as a service&lt;/li&gt; &lt;li&gt;Replace a process-level token&lt;/li&gt; &lt;li&gt;Lock Pages in Memory (Only for SQL Server Service account to use AWE on 32-bit)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Reference: &lt;a title="http://support.microsoft.com/kb/283811" href="http://support.microsoft.com/kb/283811"&gt;http://support.microsoft.com/kb/283811&lt;/a&gt;, &lt;a title="http://support.microsoft.com/kb/840219" href="http://support.microsoft.com/kb/840219"&gt;http://support.microsoft.com/kb/840219&lt;/a&gt; and &lt;a title="http://support.microsoft.com/kb/254321" href="http://support.microsoft.com/kb/254321"&gt;http://support.microsoft.com/kb/254321&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="274"&gt;10. Service Account should be member of local administrators&lt;/td&gt; &lt;td valign="top" width="470"&gt;Unfortunately the SQL Server 2000 program mandates this pre-requisite. But if you carefully follow the steps to assign the user rights, NTFS permissions and registry permissions as per the above mentioned KB articles, then you can change the account later on post setup.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;strong&gt;SQL Server 2005 specific points&lt;/strong&gt;&lt;/p&gt; &lt;table cellspacing="0" cellpadding="2" width="747" border="1"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" width="271"&gt;&lt;strong&gt;Checklist item&lt;/strong&gt;&lt;/td&gt; &lt;td valign="top" width="474"&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="271"&gt;1. Verify required services are started&lt;/td&gt; &lt;td valign="top" width="474"&gt;The following services must be started on both nodes:&lt;br&gt; &lt;ul&gt; &lt;li&gt;Task Scheduler &lt;li&gt;Remote Registry &lt;li&gt;COM+ System Application &lt;li&gt;Server &lt;li&gt;Cryptographic services&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="271"&gt;2. MSDTC cluster resource requirement&lt;/td&gt; &lt;td valign="top" width="474"&gt;If you are installing anything other than the database engine component on Windows Server 2003, then you must create the MSDTC resource in the cluster prior to running setup.&lt;br&gt;&lt;br&gt;Reference: &lt;a href="http://support.microsoft.com/kb/"&gt;http://support.microsoft.com/kb/301600&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="271"&gt;3. Folder structure for installation files&lt;/td&gt; &lt;td valign="top" width="474"&gt;If you are installing from a network dump, make sure that the Servers and Tools sub-folders are preserved correctly. For example in the D:\SQLServer2005 folder, create the following two subfolders:  &lt;ul&gt; &lt;li&gt;Servers&lt;/li&gt; &lt;li&gt;Tools&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="271"&gt;4. Remote desktop connections on passive nodes.&lt;/td&gt; &lt;td valign="top" width="474"&gt;Except for the node from where the installation is being run, please log off from any Remote Desktop or Terminal Services sessions on all the other nodes. It may be a good idea to log off from the console session as well.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td valign="top" width="271"&gt;5. Non-administrator Service Account&lt;/td&gt; &lt;td valign="top" width="474"&gt;The SQL Server 2005 service account need not be a member of local administrators. As long as it has the user rights (from point #9 in the previous table) assigned to it, it will work without any local administrative privileges. The SQL 2005 setup program automatically grants the necessary permissions and user rights to the service accounts chosen.&lt;br&gt;&lt;br&gt; &lt;p&gt;Reference: &lt;a title="http://support.microsoft.com/kb/283811" href="http://support.microsoft.com/kb/283811"&gt;http://support.microsoft.com/kb/283811&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;Please let me know if you liked this article and if it was useful for your purposes, by rating the article and optionally providing any comments. If you have any questions as well please leave them as comments; I will respond to them!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9270113" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/SQL+High+Availability/default.aspx">SQL High Availability</category></item><item><title>Some notes on database snapshots</title><link>http://blogs.msdn.com/arvindsh/archive/2008/12/31/some-notes-on-database-snapshots.aspx</link><pubDate>Wed, 31 Dec 2008 10:29:35 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9258192</guid><dc:creator>arvindsh</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9258192.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9258192</wfw:commentRss><description>&lt;p&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I recently conducted some tests to double check the exact behavior of database snapshots when:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Snapshots are created on volumes which are much smaller than the actual database size&lt;/li&gt; &lt;li&gt;Metadata-only operations such as DROP TABLE are executed&lt;/li&gt; &lt;li&gt;DDL operations execute on the main database and the snapshot runs out of disk space&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Here is my testing methodology and the customary summary of observations.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Drive C: contains the original data file for database TestSS. Data file size = 1.95GB &lt;/li&gt; &lt;li&gt;TestSS.dbo.T1 is a table which contains 1GB of data &lt;/li&gt; &lt;li&gt;TestSS_1 is a snapshot which was created on TestSS after the 1GB data insert was completed.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Test Case A: Can we create a snapshot on volume smaller than the database size?&lt;/strong&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;The snapshot TestSS_1 was created on volume T: which is 10MB in size.&lt;/li&gt; &lt;li&gt;Size on disk for snapshot at creation = 192KB&lt;/li&gt; &lt;li&gt;&lt;u&gt;The snapshot creation succeeded without any errors.&lt;/u&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;If you are curious as to what I mean by 'size on disk', please refer to this snapshot:&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Somenotesondatabasesnapshots_B574/image_2.png"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="484" alt="image" src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/Somenotesondatabasesnapshots_B574/image_thumb.png" width="357" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;It is a property of the &lt;a href="http://msdn.microsoft.com/en-us/library/ms175823.aspx"&gt;NTFS sparse file&lt;/a&gt; that the actual space occupied on disk is much lesser initially than the 'Size' which is displayed for that file in Explorer.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Test Case B: Metadata-only operations and snapshot files&lt;/strong&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Next, I executed a DROP TABLE T1 on TestSS, which &lt;u&gt;returned immediately without any errors&lt;/u&gt;. At this time the snapshot did not have a large ‘on disk size’ – just 1.48MB&lt;/li&gt; &lt;li&gt;At this time the data is accessible through the snapshot just fine. If you do a select count(1) from testSS..T1 it fails (as expected). So the main operation (DROP TABLE) worked just fine.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;How is this possible? It turns out that certain operations such as TRUNCATE TABLE, DROP TABLE etc. &lt;a href="http://blogs.msdn.com/sqlserverstorageengine/archive/2006/06/24/645803.aspx"&gt;directly operate on the IAM chain&lt;/a&gt; and possibly other internal allocation pages to efficiently 'clean up' data and metadata. In such cases the copy-on-write to the snapshot is deferred till such time that the actual data page and extent are touched.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Test Case 3: What effect does failure to write to the snapshot have on the main database?&lt;/strong&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Next, I reverted the database TestSS to the snapshot TestSS_1 and then dropped the TestSS_1 snapshot. How do you revert a database to a snapshot? You use the RESTORE DATABASE ... command like this: &lt;em&gt;RESTORE DATABASE TestSS FROM DATABASE_SNAPSHOT &lt;b&gt;=&lt;/b&gt; TestSS_1&lt;/em&gt;&lt;/li&gt; &lt;li&gt;I recreated TestSS_1 immediately using the &lt;em&gt;CREATE DATABASE ... AS SNAPSHOT ... &lt;/em&gt;&lt;/li&gt; &lt;li&gt;Next, I executed &lt;em&gt;DELETE T1&lt;/em&gt; to force a logged data operation and it executed for some time before finally returning these errors:&lt;/li&gt;&lt;/ol&gt; &lt;blockquote&gt; &lt;p&gt;Msg 5128, Level 17, State 2, Line 1 &lt;p&gt;Write to sparse file 't:\Data\testss_1.ss' failed due to lack of disk space. &lt;p&gt;Msg 5128, Level 17, State 2, Line 1 &lt;p&gt;Write to sparse file 't:\Data\testss_1.ss' failed due to lack of disk space. &lt;p&gt;Msg 5128, Level 17, State 2, Line 1 &lt;p&gt;Write to sparse file 't:\Data\testss_1.ss' failed due to lack of disk space.&lt;/p&gt;&lt;/blockquote&gt; &lt;blockquote&gt; &lt;p&gt;&lt;u&gt;Though, interestingly the main DELETE did not fail; all rows from the table T1 have been deleted.&lt;/u&gt; It is by-design that any failures to write to the snapshot are not going to affect the primary operation on the database. &lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;So in conclusion this is what we can learn from the above. Most of it is logical when you think about it, but it is better to be sure than to guess!&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Database snapshots can most definitely be created on volumes which are much smaller than the original database size&lt;/li&gt; &lt;li&gt;Metadata only operations initially do not affect the snapshot. Only when the underlying pages are really 'cleaned up' by subsequent system processes, will the copy of the affected pages be moved into the database snapshot's sparse file&lt;/li&gt; &lt;li&gt;Failures to write to the snapshot will never affect the original database on which the DDL is being executed&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;strong&gt;Additional Reading&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Please also refer to the excellent white paper on &lt;a href="http://download.microsoft.com/download/d/9/4/d948f981-926e-40fa-a026-5bfcf076d9b9/DBSnapshotPerf.docx"&gt;Database Snapshots Performance Considerations Under IO Intensive Workloads&lt;/a&gt; for some more information on snapshots and their effect on performance.&lt;/li&gt; &lt;li&gt;Paul Randal's blogs about &lt;a href="http://www.sqlskills.com/blogs/paul/category/Database-Snapshots.aspx"&gt;snapshots&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;Good information on snapshot internals is at the &lt;a href="http://sqlcat.com/technicalnotes/archive/2007/09/11/querying-a-database-snapshot.aspx"&gt;SQL CAT Team website&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9258192" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/SQL+Architecture/default.aspx">SQL Architecture</category></item><item><title>Howto: Have a Clustered instance of SQL Server listen on multiple virtual IP addresses</title><link>http://blogs.msdn.com/arvindsh/archive/2008/12/30/howto-have-a-clustered-instance-of-sql-server-listen-on-multiple-virtual-ip-addresses.aspx</link><pubDate>Tue, 30 Dec 2008 14:03:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9256928</guid><dc:creator>arvindsh</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/arvindsh/comments/9256928.aspx</comments><wfw:commentRss>http://blogs.msdn.com/arvindsh/commentrss.aspx?PostID=9256928</wfw:commentRss><description>&lt;P&gt;Recently a colleague asked me if there were any changes specific to Windows Server 2008 which allow SQL Server (clustered instance) to listen on multiple subnets. There was only one change in Windows 2008 to my knowledge (which I have detailed in this post later on) but that had nothing specific to do with SQL listening on different subnets. I did some testing and have posted the results below.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Network configuration&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Assuming the following network configuration on the local nodes, there are 3 networks on this cluster:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Cluster_Public: subnet is 255.255.255.0 (used only for mixed communications in the cluster) 
&lt;LI&gt;Second_Public: subnet is 255.255.0.0 (used only for public communications in the cluster) 
&lt;LI&gt;Cluster_Private: subnet is 255.0.0.0 (used only for private communications in the cluster)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image001_2.png" mce_href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image001_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=386 alt=clip_image001 src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image001_thumb.png" width=504 border=0 mce_src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image001_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;SQL Server 2000&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;This version had the capability to bind to multiple virtual IP addresses. When setting up SQL Server, on the following page, you can specify both the IP addresses. The same page can also be subsequently accessed by re-running the setup program and selecting the Advanced option to Maintain Failover Clustering.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image002_2.png" mce_href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image002_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=484 alt=clip_image002 src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image002_thumb.png" width=605 border=0 mce_src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image002_thumb.png"&gt;&lt;/A&gt; 
&lt;P&gt;Assuming that setup succeeds, you can check the SQL Server error log (shown below) and verify that the SQL instance is successfully listening on both virtual IPs: 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image003_2.png" mce_href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image003_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=51 alt=clip_image003 src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image003_thumb.png" width=644 border=0 mce_src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image003_thumb.png"&gt;&lt;/A&gt; 
&lt;P&gt;The key to this is actually that the SQL Server resource in the cluster is now dependent on the 2 VIPs: 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image004_2.png" mce_href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image004_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=379 alt=clip_image004 src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image004_thumb.png" width=644 border=0 mce_src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image004_thumb.png"&gt;&lt;/A&gt; 
&lt;P&gt;However, due to &lt;A href="http://support.microsoft.com/kb/244980" mce_href="http://support.microsoft.com/kb/244980"&gt;a limitation in SQL 2000&lt;/A&gt;, we cannot directly do this in the cluster administrator, you always have to use the setup program to do the same. As we will see later on the limitation no longer exists in SQL 2005 or 2008. 
&lt;P&gt;&lt;STRONG&gt;SQL Server 2005 / 2008&lt;/STRONG&gt; 
&lt;P&gt;Things are different and easier in these versions. One option is at setup time, if you want to configure SQL Server to listen on multiple virtual IPs, you need to specify them in the setup program: 
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image005_2.png" mce_href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image005_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=484 alt=clip_image005 src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image005_thumb.png" width=532 border=0 mce_src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image005_thumb.png"&gt;&lt;/A&gt; 
&lt;P&gt;However, later on if you want to maintain the cluster and ADD a new virtual IP, all you need to do to have SQL listen on multiple Virtual IP addresses is to follow the steps below: 
&lt;UL&gt;
&lt;LI&gt;Take the SQL Server network name offline 
&lt;LI&gt;Add an additional&amp;nbsp; IP resource with the new (additional) VIP for SQL to listen on 
&lt;LI&gt;Add the new IP resource as an additional dependency for the sql network name resource 
&lt;LI&gt;Bring the SQL Server resource online, the errorlog should show sql listening on the 2 IPs:&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image006_2.png" mce_href="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image006_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=44 alt=clip_image006 src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image006_thumb.png" width=644 border=0 mce_src="http://blogs.msdn.com/blogfiles/arvindsh/WindowsLiveWriter/HowtoHaveaClusteredinstanceofsqllistenon_240/clip_image006_thumb.png"&gt;&lt;/A&gt; 
&lt;P&gt;&lt;STRONG&gt;Windows 2008 cluster, multiple subnets, 'OR' dependencies and SQL Server&lt;/STRONG&gt; 
&lt;P&gt;So, with all this background, what has changed in Windows 2008? Well, it is a question of dependencies and how they affect the dependent resource (in this case SQL Server.) By default, in Windows 2000 and 2003, the failure of &lt;EM&gt;&lt;STRONG&gt;any one &lt;/STRONG&gt;&lt;/EM&gt;of multiple virtual IP address resource dependencies for SQL Server, will cause the SQL Server resource to restart. This is because the dependencies by default work in a 'AND' mode. 
&lt;P&gt;In Windows 2008, there is now support for each node to be on a different subnet (see &lt;A href="http://msmvps.com/blogs/jtoner/archive/2008/08/08/multiple-subnets-with-windows-2008-clusters.aspx" mce_href="http://msmvps.com/blogs/jtoner/archive/2008/08/08/multiple-subnets-with-windows-2008-clusters.aspx"&gt;this MVP article&lt;/A&gt; for a nice explanation) due to which support for an OR dependency has been introduced. However, for SQL Server to co-exist in this environment, both the subnets must be up for SQL Server to function correctly. I will cover this topic (SQL 2005 / 2008 on Windows Server 2008 with nodes in different subnets) in a later post. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9256928" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/arvindsh/archive/tags/SQL+High+Availability/default.aspx">SQL High Availability</category></item></channel></rss>