<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUMGRnc4fSp7ImA9WhRWEks.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895</id><updated>2011-12-30T09:50:27.935-08:00</updated><category term="Parameter Sniffing" /><category term="Dynamic SQL" /><category term="TOP 100 PERCENT + ORDER BY" /><category term="Bulk Insert" /><category term="Disk Partition Alignment" /><category term="COALESCE vs. ISNULL" /><category term="SQL Humor" /><category term="Red Gate" /><category term="Stop Script/T-SQL batch execution" /><category term="TFS" /><category term="Logical Query Processing Phases" /><category term="Multiple files for TempDB" /><category term="Log Shipping" /><category term="How Differential Backup Works" /><category term="NULL Storage Space" /><category term="Tips" /><category term="Interview Questions" /><category term="Check SP`s Input params for NULL" /><category term="Default Trace" /><category term="CRecordset DBException" /><category term="SQLCMD" /><category term="Mirroring" /><category term="SQL Performance" /><category term="Identity" /><category term="SQL Mail" /><category term="SSMS Tip" /><category term="Get SP Name dynamically" /><category term="AutoNumber" /><category term="Temp Table vs Table Variable" /><category term="Linked Server" /><category term="VARCHAR Storage Size" /><category term="T-SQL" /><category term="Cross Apply" /><category term="SSIS" /><category term="Snapshot" /><category term="T-SQL batch seperator" /><title>Made By SQL</title><subtitle type="html">Knowledge is a treasure, but practice is the key to it.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://madebysql.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>75</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/MadeBySql" /><feedburner:info uri="madebysql" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>MadeBySql</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;DUACQHk_fCp7ImA9WhRTFE4.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-1409478799864941575</id><published>2011-11-04T12:47:00.000-07:00</published><updated>2011-11-04T13:16:01.744-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-04T13:16:01.744-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><title>How to debug/troubleshoot a SP in production environment?</title><content type="html">&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;a href="http://2.bp.blogspot.com/-s5p-34j0Nrc/TrQpcGtsSbI/AAAAAAAAAVk/P1U06Di9kLA/s1600/ProductionServer.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" ida="true" src="http://2.bp.blogspot.com/-s5p-34j0Nrc/TrQpcGtsSbI/AAAAAAAAAVk/P1U06Di9kLA/s200/ProductionServer.JPG" width="150" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;There are times when you need to debug&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
some stored procedure(s) in Production&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
environment or to make a SP to behave&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
differently when you&amp;nbsp;execute it via the SSMS&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
versus&amp;nbsp;case when the SP executed by an application.&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
Or to make SP to behave differently from requests&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
that come from different version of an application&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
or requests that come from specific IPs and etc.&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
Or you may want to know what values were&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
provided for the input parameters of&amp;nbsp;the SP?&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Here some usefull SQL functions that you can use in the SPs to achieve the above:&lt;br /&gt;
&lt;br /&gt;
1) &lt;span style="color: magenta;"&gt;APP_NAME&lt;/span&gt;() - Returns the application name for the current session if set by&lt;br /&gt;
&amp;nbsp;&amp;nbsp; the application. You can set it in the connection string of&amp;nbsp;the application by&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;including this: "Application Name=AppName".&lt;br /&gt;
&amp;nbsp;&amp;nbsp; By using this function you can change a SP to do X if it executed from Server A&lt;br /&gt;
&amp;nbsp;&amp;nbsp; and to do Y if it executed by Server Y or if it executed via the SSMS.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Simply set the application name for different value in Server X and Y.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; By using this function you can also upload SPs changes without any downtime&lt;br /&gt;
&amp;nbsp;&amp;nbsp; and with full backward compatibility.&lt;br /&gt;
&lt;br /&gt;
2) &lt;span style="color: magenta; font-size: x-small;"&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;CONNECTIONPROPERTY&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: red; font-size: x-small;"&gt;&lt;span style="color: red; font-size: x-small;"&gt;'client_net_address'&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;) &lt;/span&gt;&lt;/span&gt;- Returns the Client IP address. &lt;br /&gt;
&lt;br /&gt;
3) &lt;span style="color: magenta; font-size: x-small;"&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;CONNECTIONPROPERTY&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: red; font-size: x-small;"&gt;&lt;span style="color: red; font-size: x-small;"&gt;'local_net_address'&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;)&amp;nbsp; &lt;/span&gt;&lt;/span&gt;- Returns the IP address of the server.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; For example, if you connect to&amp;nbsp;production SQL server from&amp;nbsp;the SSMS in QA/DEV&lt;br /&gt;
&amp;nbsp; &amp;nbsp;SQL Server&amp;nbsp;then it will return the IP of that QA/DEV SQL Server machine.&lt;br /&gt;
&lt;br /&gt;
By using these functions listed above you can add logic (If or CASE statements)&lt;br /&gt;
to the SP and you can troubleshoot/debug the SP without running the SQL Profiler.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: magenta;"&gt;APP_NAME&lt;/span&gt;() &lt;span style="color: blue;"&gt;AS &lt;/span&gt;Application_Name, &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: magenta;"&gt;CONNECTIONPROPERTY&lt;/span&gt;(&lt;span style="color: red;"&gt;'local_net_address'&lt;/span&gt;) &lt;span style="color: blue;"&gt;AS&lt;/span&gt; local_net_address,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: magenta;"&gt;CONNECTIONPROPERTY&lt;/span&gt;(&lt;span style="color: red;"&gt;'client_net_address'&lt;/span&gt;) &lt;span style="color: blue;"&gt;AS &lt;/span&gt;client_net_address &lt;br /&gt;&lt;span style="color: blue;"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-1409478799864941575?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/jrcmpVKE3shr5pj2aXucZE-_7HQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jrcmpVKE3shr5pj2aXucZE-_7HQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/jrcmpVKE3shr5pj2aXucZE-_7HQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/jrcmpVKE3shr5pj2aXucZE-_7HQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/m7I_lYYvElA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/1409478799864941575/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/11/how-to-debugtroubleshoot-sp-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/1409478799864941575?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/1409478799864941575?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/m7I_lYYvElA/how-to-debugtroubleshoot-sp-in.html" title="How to debug/troubleshoot a SP in production environment?" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-s5p-34j0Nrc/TrQpcGtsSbI/AAAAAAAAAVk/P1U06Di9kLA/s72-c/ProductionServer.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/11/how-to-debugtroubleshoot-sp-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0QCSH0zeip7ImA9WhdRFkk.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-4414774029083138505</id><published>2011-08-06T09:40:00.000-07:00</published><updated>2011-08-06T09:49:29.382-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-06T09:49:29.382-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Performance" /><title>How to find stored procedure(s) that scan particular index</title><content type="html">When it comes to performance issues, we can get a lot from querying&lt;br /&gt;
the cached plans of stored procedures, for example:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; -&amp;nbsp; we can find which stored procedures(SPs)&amp;nbsp;scan an index&lt;br /&gt;
&amp;nbsp; -&amp;nbsp; in which SPs we have bookmark lookups/ missing indexes&lt;br /&gt;
&amp;nbsp; -&amp;nbsp; find SPs where different spool operators being&amp;nbsp;used&lt;br /&gt;
&amp;nbsp; -&amp;nbsp; get SPs which contain parallel execution&lt;br /&gt;
&amp;nbsp; -&amp;nbsp; check if an index being&amp;nbsp;used in some SP(s)&lt;br /&gt;
&lt;br /&gt;
and more.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/-OT4Wz-4Kb3s/Tj1uG-bH0PI/AAAAAAAAAVc/ktCI5GjdEsY/s1600/Execution+Plan.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="115" src="http://3.bp.blogspot.com/-OT4Wz-4Kb3s/Tj1uG-bH0PI/AAAAAAAAAVc/ktCI5GjdEsY/s400/Execution+Plan.jpg" t$="true" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Let`s start with the basic. By using the query below you can get&lt;br /&gt;
an&amp;nbsp;execution plan of a stored procedure, open it and analyze it.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #274e13; font-size: x-small;"&gt;&lt;strong&gt;-- Get execution query plan in XML format&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;&amp;nbsp; &lt;span style="color: magenta;"&gt;OBJECT_NAME&lt;/span&gt;(st.objectid,st.&lt;span style="color: blue;"&gt;dbid&lt;/span&gt;) AS ObjectName,&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;cp.usecounts AS ExecutionCount,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; qp.query_plan AS QueryPlan&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #38761d;"&gt;&lt;strong&gt;sys.dm_exec_cached_plans&lt;/strong&gt; &lt;/span&gt;AS cp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CROSS APPLY &lt;span style="color: #38761d;"&gt;&lt;strong&gt;sys.dm_exec_query_plan&lt;/strong&gt;&lt;/span&gt;(cp.plan_handle) AS qp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CROSS APPLY &lt;span style="color: #38761d;"&gt;&lt;strong&gt;sys.dm_exec_sql_text&lt;/strong&gt;&lt;/span&gt;(cp.plan_handle) AS st&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt;&amp;nbsp; cp.objtype=&lt;span style="color: red;"&gt;'Proc'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND st.&lt;span style="color: blue;"&gt;dbid&lt;/span&gt;=&lt;span style="color: magenta;"&gt;DB_ID(DB_NAME&lt;/span&gt;()) &lt;span style="color: #274e13;"&gt;-- Current DB&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND OBJECT_&lt;span style="color: magenta;"&gt;NAME&lt;/span&gt;(st.objectid,st.&lt;span style="color: blue;"&gt;dbid&lt;/span&gt;) =&lt;span style="color: red;"&gt; 'SPName'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
By running the next query we can find out which stored procedures&lt;br /&gt;
&lt;strong&gt;scan&lt;/strong&gt; particular index.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;WITH&lt;/span&gt; XMLNAMESPACES(&lt;span style="color: red;"&gt;'http://schemas.microsoft.com/sqlserver/2004/07/showplan'&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; ns)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: magenta;"&gt;OBJECT_SCHEMA_NAME&lt;/span&gt;( qp.objectid ) AS [schema_name],&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: magenta;"&gt;OBJECT_NAME&lt;/span&gt;(qp.objectid ) AS [object_name],&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; qp.query_plan&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #38761d;"&gt;sys.dm_exec_cached_plans&lt;/span&gt; as p&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CROSS APPLY &lt;span style="color: #38761d;"&gt;sys.dm_exec_query_plan(&lt;/span&gt; plan_handle ) as qp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CROSS APPLY qp.query_plan.nodes(&lt;span style="color: red;"&gt;'//ns:IndexScan/ns:Object[@Database="[DBNAME]"]&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[@Schema="[dbo]"]&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: red;"&gt;[@Table="[TblName]"][@Index="[IndexName]"]'&lt;/span&gt; ) plan_xml(x)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Important note:&lt;/strong&gt; The XML is case sensitive, so insert the table/index name&lt;br /&gt;
exactly as they defined, pay attention to capital letters.&lt;br /&gt;
&lt;br /&gt;
The following query can help you to check if&amp;nbsp;an index being used,&lt;br /&gt;
this can be helpful when you want to delete an index.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: black; font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;WITH &lt;/span&gt;XMLNAMESPACES(&lt;span style="color: blue;"&gt;DEFAULT&lt;/span&gt; &lt;span style="color: red;"&gt;N'http://schemas.microsoft.com/sqlserver/2004/07/showplan'&lt;/span&gt;),&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;CachedPlansCTE (DatabaseName,SchemaName,TableName,IndexName,QueryText,QueryPlan,[object_name])&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-size: xx-small;"&gt;AS&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;(&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; ObjNode.op.value(&lt;span style="color: red;"&gt;N'@Database',N'varchar(128)')&lt;/span&gt; AS DatabaseName,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjNode.op.value(&lt;a href="mailto:N'@Schema',N'varchar(128)'"&gt;&lt;span style="color: red;"&gt;N'@Schema',N'varchar(128)'&lt;/span&gt;&lt;/a&gt;) AS SchemaName,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjNode.op.value(&lt;a href="mailto:N'@Table',N'varchar(128)'"&gt;&lt;span style="color: red;"&gt;N'@Table',N'varchar(128)'&lt;/span&gt;&lt;/a&gt;&lt;span style="color: red;"&gt;)&lt;/span&gt; AS TableName,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ObjNode.op.value(&lt;a href="mailto:N'@Index',N'varchar(128)'"&gt;&lt;span style="color: red;"&gt;N'@Index',N'varchar(128)'&lt;/span&gt;&lt;/a&gt;) AS IndexName,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cp.[text] AS QueryText,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cp.query_plan AS QueryPlan,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cp.[object_name]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt; (&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; query.[text],qp.query_plan,&lt;span style="color: magenta;"&gt;OBJECT_NAME&lt;/span&gt;(qp.objectid ) as [object_name]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;FROM&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp; &lt;span style="color: #38761d;"&gt;sys.dm_exec_cached_plans&lt;/span&gt; as p&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;OUTER APPLY &lt;span style="color: #38761d;"&gt;sys.dm_exec_sql_text&lt;/span&gt;(plan_handle) as query&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;OUTER APPLY &lt;span style="color: #38761d;"&gt;sys.dm_exec_query_plan&lt;/span&gt;(plan_handle) as qp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;WHERE &lt;/span&gt;&amp;nbsp;query.[text] NOT LIKE &lt;span style="color: red;"&gt;'%sys%'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND p.cacheobjtype =&lt;span style="color: red;"&gt;'Compiled Plan' &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND p.objtype=&lt;span style="color: red;"&gt;'Proc'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;) cp&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;CROSS APPLY cp.query_plan.nodes(&lt;span style="color: red;"&gt;N'//Object'&lt;/span&gt;) ObjNode (op)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&amp;nbsp;&lt;/span&gt; [object_name],DatabaseName,SchemaName,TableName,IndexName,QueryPlan,QueryText&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;FROM&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp; CachedPlansCTE&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt;&amp;nbsp; (IndexName like&lt;span style="color: red;"&gt; '%IndexName%'&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;AND&lt;/span&gt; (QueryText not like &lt;span style="color: red;"&gt;'%insert%&lt;/span&gt;')&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt; AND&lt;/span&gt; (QueryText not like &lt;span style="color: red;"&gt;'%update%'&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-size: xx-small;"&gt;OPTION (MAXDOP 1)&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;Source: &lt;a href="http://sqlconcept.com/2011/07/12/how-to-query-the-cached-plans-xml/"&gt;http://sqlconcept.com/2011/07/12/how-to-query-the-cached-plans-xml/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://blogs.sqlserver.org.au/blogs/greg_linwood/archive/2008/04/27/1229.aspx"&gt;&lt;span style="font-size: xx-small;"&gt;http://blogs.sqlserver.org.au/blogs/greg_linwood/archive/2008/04/27/1229.aspx&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-4414774029083138505?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6Dr0nkwdjryObMnriyN4_0n-Ets/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6Dr0nkwdjryObMnriyN4_0n-Ets/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6Dr0nkwdjryObMnriyN4_0n-Ets/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6Dr0nkwdjryObMnriyN4_0n-Ets/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/rqnwyyfeLKw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/4414774029083138505/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/08/how-to-find-stored-procedures-that-scan.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/4414774029083138505?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/4414774029083138505?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/rqnwyyfeLKw/how-to-find-stored-procedures-that-scan.html" title="How to find stored procedure(s) that scan particular index" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-OT4Wz-4Kb3s/Tj1uG-bH0PI/AAAAAAAAAVc/ktCI5GjdEsY/s72-c/Execution+Plan.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/08/how-to-find-stored-procedures-that-scan.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YDQHY7cCp7ImA9WhdRFUs.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-5836662592057137992</id><published>2011-08-05T10:19:00.000-07:00</published><updated>2011-08-05T10:26:11.808-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-05T10:26:11.808-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Log Shipping" /><title>Slow Transaction Log restore in standby mode (Log Shipping)</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-UwkB5TxtY9E/TjwigWNgEwI/AAAAAAAAAVU/LEYy8DYDSlk/s1600/crisis.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="148" src="http://4.bp.blogspot.com/-UwkB5TxtY9E/TjwigWNgEwI/AAAAAAAAAVU/LEYy8DYDSlk/s200/crisis.jpg" t$="true" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
I am always saying that crisis situations&lt;br /&gt;
are good for your knowledge.&lt;br /&gt;
&lt;br /&gt;
They can contribute to your &lt;br /&gt;
understating how things are working.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Consider the following, you have Log Shipping configured in Standby mode and &lt;br /&gt;
you noticed that sometimes the 'Restoring…' takes long time than usual.&lt;br /&gt;
&lt;br /&gt;
So, why restoring 100-200 MB transaction log takes 30-40 minutes on the &lt;br /&gt;
secondary server in Logged Shipped database?&lt;br /&gt;
&lt;br /&gt;
In short, due to long running transactions and Standby mode.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Now more in details:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
First we need to understand what Standby means and how it works.&lt;br /&gt;
When you restore transaction log(s) you have 3 options:&lt;br /&gt;
&lt;br /&gt;
1) WITH RECOVERY&lt;br /&gt;
2) WITH NORECOVERY&lt;br /&gt;
3) WITH STANDBY&lt;br /&gt;
&lt;br /&gt;
In Log shipping, you can choose between options 2 or 3.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-YSwx30Tw-YE/TjwmARykKEI/AAAAAAAAAVY/3lJ7-6-zS9w/s1600/Log+Shipping+SQL+Server.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="118" src="http://3.bp.blogspot.com/-YSwx30Tw-YE/TjwmARykKEI/AAAAAAAAAVY/3lJ7-6-zS9w/s320/Log+Shipping+SQL+Server.JPG" t$="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
When restoring transaction log(s) with option "RECOVERY", the SQL Server will&lt;br /&gt;
undo All uncommitted transactions, the database will be accessible but you will not&lt;br /&gt;
be able to restore more transaction logs.&lt;br /&gt;
&lt;br /&gt;
When restoring transaction log(s) with option "NORECOVERY", the SQL Server&lt;br /&gt;
will leave the uncommitted transactions as is and you will not be able to access the&lt;br /&gt;
database.&lt;br /&gt;
&lt;br /&gt;
When restoring transaction log(s) with the "STANDBY" option, the SQL Server will&lt;br /&gt;
go over the transaction log and save all uncommitted transactions to a standby data&lt;br /&gt;
file with .tuf extension. (TUF stands for Transaction Undo File). The database will be &lt;br /&gt;
accessible and in read-only mode.&lt;br /&gt;
&lt;br /&gt;
You can ask why it needs the tuf file. Well, when you restore with STANDBY mode&lt;br /&gt;
the database stays accessible, right? Meaning you can connect to it and view the&lt;br /&gt;
data&amp;nbsp; (just read, because it in Read-Only mode). &lt;br /&gt;
But how it possible, what about uncommitted transactions?&lt;br /&gt;
&lt;br /&gt;
You will not see the uncommitted data even if you read the data in&lt;br /&gt;
"READ Uncommitted Isolation Level". Thus is, because the SQL Server&lt;br /&gt;
performs UNDO for all uncommitted transactions and saves their data to&lt;br /&gt;
the tuf file. It simply saves the entire content of the pages that it had to undo&lt;br /&gt;
and in some cases the SQL Server can save not only the data rows but the all pages.&lt;br /&gt;
&lt;br /&gt;
The tuf file will be used when you restore the next transaction log file.&lt;br /&gt;
First, the SQL Server will REDO all the uncommitted transactions that in the tuf file&lt;br /&gt;
(apply the content of the undo file to the data files) and only then continue to restore&lt;br /&gt;
the next transaction log.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Important note:&lt;/strong&gt; the tuf file will contain the uncommitted transactions not just from&lt;br /&gt;
the latest transaction log but uncommitted transactions in all previous transaction&lt;br /&gt;
logs that have been restored.&lt;br /&gt;
&lt;br /&gt;
Now after we understand how the STANDBY option works, let`s see what happening&lt;br /&gt;
when you rebuild indexes in the primary server and suppose that the rebuild of some&lt;br /&gt;
table spreads over more than one backed up transaction log. For example: &lt;br /&gt;
the rebuild takes 20 minutes and you backup the transaction log every 5 minutes.&lt;br /&gt;
&lt;br /&gt;
I think you already got it. The secondary server upon restoring the first transaction&lt;br /&gt;
log that contains the start of the index rebuild will save the uncommitted data to&lt;br /&gt;
the tuf file, in our case, if we rebuild clustered index, it will save a lots of data to&lt;br /&gt;
the tuf file. And upon restoring the next transaction log, it will redo all the&lt;br /&gt;
uncommitted transactions saved in the tuf file and continue the restoring, but in&lt;br /&gt;
our case the index operation is not finished in the second transaction log file,&lt;br /&gt;
so SQL Server will again UNDO the rebuild index and save it to the standby file&lt;br /&gt;
(tuf file), now it will contain uncommitted data of the 2 transaction logs. And this&lt;br /&gt;
process continues and continues until the last transaction log with index rebuild&lt;br /&gt;
data will be restored.&lt;br /&gt;
&lt;br /&gt;
I hope it helped you to understand the reason for the slow restore of the transaction&lt;br /&gt;
logs in the secondary logged shipped database.&lt;br /&gt;
&lt;br /&gt;
Thanks for reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-5836662592057137992?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/hCXAHbKABoU_uCNT-kZINKs9380/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hCXAHbKABoU_uCNT-kZINKs9380/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/hCXAHbKABoU_uCNT-kZINKs9380/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/hCXAHbKABoU_uCNT-kZINKs9380/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/zD-_DVjvnbg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/5836662592057137992/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/08/slow-transaction-log-restore-in-standby.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/5836662592057137992?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/5836662592057137992?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/zD-_DVjvnbg/slow-transaction-log-restore-in-standby.html" title="Slow Transaction Log restore in standby mode (Log Shipping)" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-UwkB5TxtY9E/TjwigWNgEwI/AAAAAAAAAVU/LEYy8DYDSlk/s72-c/crisis.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/08/slow-transaction-log-restore-in-standby.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcGSH0yeyp7ImA9WhdWFUw.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-8061516787397299286</id><published>2011-08-03T13:00:00.000-07:00</published><updated>2011-09-08T13:17:09.393-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T13:17:09.393-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mirroring" /><title>4 ways to efficiently monitor DB Mirroring with/without email/SMS Alerts</title><content type="html">A&amp;nbsp;setup of DB Mirroring (&lt;a href="http://madebysql.blogspot.com/2011/06/database-mirroring-between-server-in.html"&gt;See my post here&lt;/a&gt;) cannot be full without &lt;br /&gt;
a setup of DB Mirroring monitoring.&lt;br /&gt;
I want to share with you&amp;nbsp;4 ways to monitor the DB Mirroring:&lt;br /&gt;
&lt;br /&gt;
1) Querying the "sys.database_mirroring" catalog view and sending Email Alerts.&lt;br /&gt;
2) Using SQL Server Events Notifications, State-change (WMI) events.&lt;br /&gt;
3) Setting up Performance Threshold Events in the "Database Mirroring Monitor".&lt;br /&gt;
4) Setting up SQL Performance counters related to DB Mirroring. &lt;br /&gt;
&lt;br /&gt;
Now more in details:&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;1) Querying the "sys.database_mirroring" catalog view and sending Email Alerts &lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
We can query the sys.database_mirroring catalog view for checking the status &lt;br /&gt;
of the mirrored databases, and in case the DB status is not in valid state, like&lt;br /&gt;
SYNCHRONIZED or SYNCHRONIZING, we will send an email and/or SMS.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;DECLARE&lt;/span&gt; @DBMirroringState &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;(30),@DB_ID INT,@ErrorMessageToSend &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;(100)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;DECLARE&lt;/span&gt; @MirroredDatabases &lt;span style="color: blue;"&gt;TABLE&lt;/span&gt; (DatabaseID INT, mirroring_state_desc &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;(30))&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #6aa84f; font-size: xx-small;"&gt;-- get status for mirrored databases &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;INSERTINTO&lt;/span&gt; @MirroredDatabases(DatabaseID,mirroring_state_desc)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; database_id, mirroring_state_desc &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt;&amp;nbsp; &amp;nbsp; [sys].[database_mirroring]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt;&amp;nbsp; mirroring_role_desc IN (&lt;span style="color: red;"&gt;'PRINCIPAL','MIRROR'&lt;/span&gt;) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;AND&lt;/span&gt; mirroring_state_desc NOT IN (&lt;span style="color: red;"&gt;'SYNCHRONIZED','SYNCHRONIZING'&lt;/span&gt;) &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;WHILE &lt;span style="color: black;"&gt;EXISTS&lt;/span&gt; (SELECT TOP 1&lt;/span&gt; DatabaseID &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; @MirroredDatabases &lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; mirroring_state_desc IS NOT NULL) &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-size: xx-small;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT TOP&lt;/span&gt; 1 &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @DB_ID = DatabaseID,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @DBMirroringState = mirroring_state_desc &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @MirroredDatabases &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET &lt;/span&gt;@ErrorMessageToSend = &lt;span style="color: red;"&gt;'DBMirroring Error on DB:'&lt;/span&gt;+CAST(DB_NAME(@DB_ID) AS VARCHAR)+&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;',DBState='&lt;/span&gt;+@DBMirroringState&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #6aa84f; font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp; -- Send Email&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;EXEC&lt;/span&gt; msdb.dbo.sp_send_dbmail @profile_name=&lt;span style="color: red;"&gt;'XXXXX'&lt;/span&gt;,@recipients=&lt;span style="color: red;"&gt;'DBA@Company.com'&lt;/span&gt;, &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @body = @ErrorMessageToSend,&lt;/span&gt;&lt;span style="font-size: xx-small;"&gt;@subject = @ErrorMessageToSend &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #6aa84f; font-size: xx-small;"&gt;&amp;nbsp; -- Send SMS&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #6aa84f; font-size: xx-small;"&gt;&amp;nbsp; -- put here code to send SMS&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; DELETE FROM&lt;/span&gt; @MirroredDatabases &lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; DatabaseID = @DB_ID &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-size: xx-small;"&gt;END&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;Source: &lt;a href="http://www.mssqltips.com/tip.asp?tip=1859"&gt;http://www.mssqltips.com/tip.asp?tip=1859&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;--------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
The second way is:&lt;br /&gt;
&lt;strong&gt;2) Using SQL Server Events Notifications, State-change (WMI) events &lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;&lt;span style="font-size: xx-small;"&gt;--------------------------------------------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;
There is a way in the SQL Server to create an Alert for various inner events.&lt;br /&gt;
We will create an alert&amp;nbsp;for specific DB mirroring events.&lt;br /&gt;
&lt;br /&gt;
When a mirroring session changes from one state to another, SQL Server generates&lt;br /&gt;
a WMI event of type DATABASE_MIRRORING_STATE_CHANGE.&lt;br /&gt;
We will create WMI-based alert by querying the &lt;span style="font-size: xx-small;"&gt;DATABASE_MIRRORING_STATE_CHANGE.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; * &lt;span style="color: blue;"&gt;FROM&lt;/span&gt; DATABASE_MIRRORING_STATE_CHANGE &lt;span style="color: blue;"&gt;WHERE State&lt;/span&gt; = 6&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In the Principal Server we will check for following events:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Connection with Mirror Lost&lt;br /&gt;
&amp;nbsp;&amp;nbsp; - Mirroring Suspended&lt;br /&gt;
&lt;br /&gt;
In&amp;nbsp;the Mirror Server for following alerts:&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; -&amp;nbsp; Connection with Principal Lost&lt;br /&gt;
&amp;nbsp; -&amp;nbsp; Mirroring Suspended&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-xWqd17Pkth8/TjhRuBvT1ZI/AAAAAAAAAUw/dV64z9rzheU/s1600/DB+Mirror+States.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-xWqd17Pkth8/TjhRuBvT1ZI/AAAAAAAAAUw/dV64z9rzheU/s1600/DB+Mirror+States.JPG" t$="true" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can setup such alerts via the SSMS GUI or by executing a script.&lt;br /&gt;
In SSMS, go to "SQL Server Agent", right click on Alerts and choose "New Alert"&lt;br /&gt;
and define it as follow, for example:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-cbup77iYQms/TjhbXmTRLaI/AAAAAAAAAU8/qk_K_26Y6d4/s1600/DB+Alerts.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-cbup77iYQms/TjhbXmTRLaI/AAAAAAAAAU8/qk_K_26Y6d4/s1600/DB+Alerts.JPG" t$="true" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-mIu-qrK5Obc/TjhUcK3NGBI/AAAAAAAAAU0/aWB3d9XZLM8/s1600/Connection+with+Mirror+Lost.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="169" src="http://4.bp.blogspot.com/-mIu-qrK5Obc/TjhUcK3NGBI/AAAAAAAAAU0/aWB3d9XZLM8/s400/Connection+with+Mirror+Lost.JPG" t$="true" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And do not forget to specify to send the alert email:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-LNo65lfCIG8/TjhX0cyeFaI/AAAAAAAAAU4/ja2FNZb-t_s/s1600/Connection+with+Mirror+Lost+2.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="173" src="http://3.bp.blogspot.com/-LNo65lfCIG8/TjhX0cyeFaI/AAAAAAAAAU4/ja2FNZb-t_s/s400/Connection+with+Mirror+Lost+2.JPG" t$="true" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
or you can run a script, for example:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;USE [msdb]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;GO&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;EXEC msdb.dbo.&lt;span style="color: #990000;"&gt;sp_update_alert &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @name=&lt;span style="color: red;"&gt;N'DB Mirroring State Change: Connection with Mirror Lost'&lt;/span&gt;, &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @message_id=0, &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @severity=0, &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @enabled=1, &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @delay_between_responses=0, &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @include_event_description_in=1, &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @database_name=N'', &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @notification_message=N'', &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @event_description_keyword=N'', &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @performance_condition=N'', &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @wmi_namespace=&lt;span style="color: red;"&gt;N'\\.\root\Microsoft\SqlServer\ServerEvents\MSSQLSERVER', &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @wmi_query=&lt;span style="color: red;"&gt;N'SELECT * FROM DATABASE_MIRRORING_STATE_CHANGE WHERE State = 6', &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @job_id=&lt;span style="color: red;"&gt;N'00000000-0000-0000-0000-000000000000'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;GO&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;EXEC msdb.dbo.&lt;span style="color: #990000;"&gt;sp_update_notification &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @alert_name=&lt;span style="color: red;"&gt;N'DB Mirroring State Change: Connection with Mirror Lost',&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @operator_name=N'DBA', @notification_method = 1&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;GO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;Source: &lt;a href="http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/how-to-monitor-database-mirroring"&gt;http://blogs.lessthandot.com/index.php/DataMgmt/DBAdmin/how-to-monitor-database-mirroring&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;3) Setting up Performance Threshold Events in the "Database Mirroring Monitor"&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
With these alerts, most of us should be familiar.&lt;br /&gt;
We can setup the thresholds in the "Database Mirroring Monitor":&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-4_rDEnRvCOk/Tjhd5sbEN0I/AAAAAAAAAVA/RA2mCiOqB_0/s1600/Database+Mirroring+Monitor.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-4_rDEnRvCOk/Tjhd5sbEN0I/AAAAAAAAAVA/RA2mCiOqB_0/s1600/Database+Mirroring+Monitor.JPG" t$="true" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/-8I5Ek22-BhQ/Tjheav24OyI/AAAAAAAAAVE/ZkTy8c9zyPE/s1600/Mirroring+thresholds.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="196" src="http://2.bp.blogspot.com/-8I5Ek22-BhQ/Tjheav24OyI/AAAAAAAAAVE/ZkTy8c9zyPE/s400/Mirroring+thresholds.JPG" t$="true" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As the result, SQL server will create "Database Mirroring Monitor Job" on&lt;br /&gt;
Principal and Mirror servers. This job will run every minute (by default) and update&lt;br /&gt;
undocumented database mirroring status table in the &lt;strong&gt;msdb&lt;/strong&gt; database.&lt;br /&gt;
&lt;br /&gt;
Now, after setting the thresholds, you need to create alert(s) using SQL Server Agent:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;In SSMS, connect to the principal or mirror server instance&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;for which you want to define an alert.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Expand the &lt;strong&gt;SQL Server Agent&lt;/strong&gt; folder in Object Explorer.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Right-click &lt;strong&gt;Alerts&lt;/strong&gt; and select &lt;strong&gt;New Alert&lt;/strong&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;In the &lt;strong&gt;New Alert&lt;/strong&gt; dialog box, type a name you can use to identify the alert, such as "DB Mirroring: Unsent log warning."&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="font-size: x-small;"&gt;Select &lt;strong&gt;Error number&lt;/strong&gt; and type the number from Table below.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;span style="font-size: x-small;"&gt;In &lt;strong&gt;Select a page&lt;/strong&gt;, click &lt;strong&gt;Response&lt;/strong&gt; to specify the actions to take when the event occurs, such as executing a job or notifying an operator.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;span style="font-size: x-small;"&gt;In &lt;strong&gt;Select a page&lt;/strong&gt;, click &lt;strong&gt;Options&lt;/strong&gt; to specify how often to send a notification on this event, the format of the message sent to operators, and other options.&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&amp;nbsp;Event IDs for Performance Warnings :&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;a href="http://3.bp.blogspot.com/-wOCJHVBeNBY/TjhlOiKPcBI/AAAAAAAAAVI/F-Bp291Fv7o/s1600/Event+IDs+for+Performance+Warnings.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-wOCJHVBeNBY/TjhlOiKPcBI/AAAAAAAAAVI/F-Bp291Fv7o/s1600/Event+IDs+for+Performance+Warnings.JPG" t$="true" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first two warnings in table above should be defined in the Principal Server,&lt;br /&gt;
the rest in the Mirror Server.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;span style="color: red;"&gt;&lt;u&gt;Now very important note that can save you time,&lt;/u&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
When you define such alerts, &lt;strong&gt;do not &lt;/strong&gt;specify the database, choose "All Databases",&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-JEud64hLc4g/TjmZOcwl3ZI/AAAAAAAAAVM/zSHvN-nb16Q/s1600/DB+Mirroring+Unsent+log+warning.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="177" src="http://2.bp.blogspot.com/-JEud64hLc4g/TjmZOcwl3ZI/AAAAAAAAAVM/zSHvN-nb16Q/s400/DB+Mirroring+Unsent+log+warning.JPG" t$="true" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Otherwise the alert will not occur (not fire) and the email will not be sent.&lt;br /&gt;
The SQL Server will write the alert to the Windows Event log and to&lt;br /&gt;
SQL Server Error Log, but SQL Server will not be able to recognize it&lt;br /&gt;
and will not raise the alert, because it has some bug recognizing such alerts&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
where database name was specified.&lt;br /&gt;
(The event logged as a server-level event and not a database-level event)&lt;br /&gt;
&lt;br /&gt;
I have this bug in SQL Server 2008 R2 ENT with CU6 and Microsoft does not&lt;br /&gt;
provided a workaround yet.&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;a href="http://connect.microsoft.com/SQLServer/feedback/details/657230/alerting-on-database-mirroring-events"&gt;&lt;span style="font-size: xx-small;"&gt;http://connect.microsoft.com/SQLServer/feedback/details/657230/alerting-on-database-mirroring-events&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
If you have more that one mirrored database&amp;nbsp;in one SQL Server instance and you&lt;br /&gt;
want to define the alerts per database, then you will have a problem when you&lt;br /&gt;
choose "All Databases".&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
Also when the alert defined with "All Databases", an email is sent &lt;strong&gt;without&lt;/strong&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
specifying the database that exceeded its threshold.&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;strong&gt;4) Setting up SQL Performance counters related to DB Mirroring. &lt;/strong&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
We&amp;nbsp;can fetch&amp;nbsp;SQL performance counters related to DB Mirroring from DMV called&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;span style="color: #6aa84f;"&gt;&lt;strong&gt;"sys.dm_os_performance_counters".&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
I recommend to fetch following counters:&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;strong&gt;- Redo Queue KB&amp;nbsp;:&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; The number of bytes of transaction log that remains to be &lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; applied to the mirror to roll it forwards.&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;strong&gt;- Log Send Queue KB:&lt;/strong&gt;&amp;nbsp;&amp;nbsp; The number of bytes in the log that has not been sent to &lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the mirror&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;[counter_name] &lt;span style="color: blue;"&gt;as&lt;/span&gt; CounterName,[cntr_value] &lt;span style="color: blue;"&gt;as&lt;/span&gt; CounterValue&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #38761d;"&gt; sys.dm_os_performance_counters &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt;&amp;nbsp;&amp;nbsp; [object_name] LIKE (&lt;span style="color: red;"&gt;'%Database Mirroring%'&lt;/span&gt;) &lt;/span&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;AND&lt;/span&gt; [counter_name] IN (&lt;span style="color: red;"&gt;'Log Send Queue KB','Redo Queue KB'&lt;/span&gt;) &lt;/span&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;AND&lt;/span&gt; [instance_name]=&lt;span style="color: red;"&gt;'TestDB'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&amp;nbsp; &lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
For example, you can query this DMV every minute and save the values in &lt;a href="http://www.cacti.net/"&gt;CACTI&lt;/a&gt;. &lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
In the Cacti you will see&amp;nbsp;nice graphs:&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-DwyKC9JgXe8/Tjmj7-dfsUI/AAAAAAAAAVQ/VovLmMiuohc/s1600/SQL+Performance+counters.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="160" src="http://1.bp.blogspot.com/-DwyKC9JgXe8/Tjmj7-dfsUI/AAAAAAAAAVQ/VovLmMiuohc/s400/SQL+Performance+counters.JPG" t$="true" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
This method is for long run monitoring, to recognize trends and etc.&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
If you have other way, please share.&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;strong&gt;One more thing that good to know and understand:&lt;/strong&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
In asynchronous mirroring the transaction log can fill up as transactions&lt;br /&gt;
cannot be backed up until they have been applied on the mirror.&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
For more info:&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/ms365781.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms365781.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/ms408393.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms408393.aspx&lt;/a&gt;&lt;/div&gt;
&lt;a href="http://technet.microsoft.com/en-us/library/cc966392.aspx"&gt;http://technet.microsoft.com/en-us/library/cc966392.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-8061516787397299286?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/PQ-_v4oCfNZOJgZYntKjO4ae4l8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PQ-_v4oCfNZOJgZYntKjO4ae4l8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/PQ-_v4oCfNZOJgZYntKjO4ae4l8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/PQ-_v4oCfNZOJgZYntKjO4ae4l8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/OBrj2y3lEJI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/8061516787397299286/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/08/4-ways-to-efficiently-monitor-db.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/8061516787397299286?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/8061516787397299286?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/OBrj2y3lEJI/4-ways-to-efficiently-monitor-db.html" title="4 ways to efficiently monitor DB Mirroring with/without email/SMS Alerts" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-xWqd17Pkth8/TjhRuBvT1ZI/AAAAAAAAAUw/dV64z9rzheU/s72-c/DB+Mirror+States.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/08/4-ways-to-efficiently-monitor-db.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MCRXs-fyp7ImA9WhdSE0s.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-5933974571902656119</id><published>2011-07-22T12:04:00.000-07:00</published><updated>2011-07-22T12:04:24.557-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-22T12:04:24.557-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Humor" /><title>SQL Jokes cont.</title><content type="html">&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;a href="http://3.bp.blogspot.com/-dIJFckgpVHk/TinGp872wDI/AAAAAAAAAUo/CTpuEC4duJ0/s1600/SQL+Joke.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-dIJFckgpVHk/TinGp872wDI/AAAAAAAAAUo/CTpuEC4duJ0/s320/SQL+Joke.jpg" t$="true" width="241" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;To continue the of SQL Jokes below&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;a href="http://madebysql.blogspot.com/2009/07/sql-joke.html"&gt;http://madebysql.blogspot.com/2009/07/sql-joke.html&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;a href="http://madebysql.blogspot.com/2010/02/types-of-dbas.html"&gt;http://madebysql.blogspot.com/2010/02/types-of-dbas.html&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;br /&gt;
&lt;/div&gt;Here are some&amp;nbsp;more:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
Q: Why do you never ask SQL people to help you move your furniture?&lt;br /&gt;
A: They sometimes drop the table&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
Q: How do you spell GOD?&lt;br /&gt;
A: DBA&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
Q: When did God create the DBA ? &lt;br /&gt;
A: The day before he had his rights revoked.&lt;br /&gt;
----------------------------------------------------------------------------------- &lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
Q: Why do DBAs often confuse Halloween and Christmas?&lt;br /&gt;
A: Because '31 Oct' = '25 Dec'&lt;br /&gt;
----------------------------------------------------------------------------------- &lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
Q1: What did the DBA say to the Developer?&lt;br /&gt;
A: It doesn’t matter, he wasn’t listening anyway.&lt;br /&gt;
Q2: What did the Developer say to the DBA?&lt;br /&gt;
A: It doesn’t matter, the answer was no.&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
Joins are what RDBMS's do for a living. &lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
"NULL is the Chuck Norris of the database - nothing can be compared to it."&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------------- &lt;br /&gt;
DBA = Default Blame Acceptor&lt;br /&gt;
-----------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Do you have more? You are invited to share.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-5933974571902656119?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0g5pxyUDc34bnpi7njGS93tLRZk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0g5pxyUDc34bnpi7njGS93tLRZk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0g5pxyUDc34bnpi7njGS93tLRZk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0g5pxyUDc34bnpi7njGS93tLRZk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/cAOnVR0uI_8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/5933974571902656119/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/07/sql-jokes-cont.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/5933974571902656119?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/5933974571902656119?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/cAOnVR0uI_8/sql-jokes-cont.html" title="SQL Jokes cont." /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-dIJFckgpVHk/TinGp872wDI/AAAAAAAAAUo/CTpuEC4duJ0/s72-c/SQL+Joke.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/07/sql-jokes-cont.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEEQns_cSp7ImA9WhdSE0g.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-7734628723944020462</id><published>2011-07-22T06:03:00.000-07:00</published><updated>2011-07-22T10:43:23.549-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-22T10:43:23.549-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mirroring" /><category scheme="http://www.blogger.com/atom/ns#" term="Log Shipping" /><title>Is the % of an index fragmentation in Log shipped / Mirror database equal to the Primary/Source database?</title><content type="html">Suppose there is Log shipping or Mirror between database X and database Y. &lt;br /&gt;
The mdf/ldf file(s) of the X DB and Y DB located in different storages. &lt;br /&gt;
I take some index in the primary db X and estimate its fragmentation by &lt;br /&gt;
using “dm_db_index_physical_stats” and do the estimation of that index&lt;br /&gt;
also in database Y. &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;&amp;nbsp;&amp;nbsp;dm.object_id AS objectid,&lt;/span&gt;&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;dm.index_id AS indexid,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; QUOTENAME(i.name) AS name, &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dm.partition_number AS partitionnum,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dm.avg_fragmentation_in_percent AS Fragmentation,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; i.fill_factor AS [Fillfactor],&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dm.page_count,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;CASE WHEN&lt;/span&gt; dm.alloc_unit_type_desc &amp;lt;&amp;gt; 'IN_ROW_DATA' &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OR (t.lob_data_space_id = 1 AND dm.index_type_desc &amp;lt;&amp;gt; 'NONCLUSTERED INDEX') &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span style="color: blue;"&gt;THEN&lt;/span&gt; 'OFF' ELSE 'ON' &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;END&lt;/span&gt; as [Online] &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; [sys].[dm_db_index_physical_stats] (DB_ID(), NULL, NULL , NULL, 'LIMITED') dm&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN [sys].[tables] t ON dm.object_id = t.object_id&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; INNER JOIN [sys].[indexes] i ON dm.object_id = i.object_id AND dm.index_id = i.index_id&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt;&amp;nbsp; dm.avg_fragmentation_in_percent &amp;gt; 0 &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND dm.page_count &amp;gt; 1000 &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND dm.index_id &amp;gt; 0 &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Let`s assume that the db X and Y are fully synchronized, &lt;br /&gt;
meaning all transactions from db X were transferred to db Y. &lt;br /&gt;
&lt;br /&gt;
The question is: Is the % of the index fragmentation equal in db X and Y?&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-9WEMp0UWGn4/TilrscPAYHI/AAAAAAAAAUk/4_cNrnjNiso/s1600/Index+Fragmentation.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="174" src="http://2.bp.blogspot.com/-9WEMp0UWGn4/TilrscPAYHI/AAAAAAAAAUk/4_cNrnjNiso/s320/Index+Fragmentation.jpg" t$="true" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The answer is Yes.&lt;br /&gt;
Because every log record gets replayed on the secondary.&lt;br /&gt;
Every page split and every allocation is fully logged and then replayed&lt;br /&gt;
exactly the same on the secondary.&lt;br /&gt;
&lt;br /&gt;
You may ask, what for&amp;nbsp;you need to know the % of fragmentation&lt;br /&gt;
on secondary server. Well, first of all, estimation of the % of fragmentation&lt;br /&gt;
by using the “dm_db_index_physical_stats” in Production site may cause to&lt;br /&gt;
IO load. So we can estimate the fragmentation on the secondary server.&lt;br /&gt;
Secondary, it is always good to know and understand how it is working.&lt;br /&gt;
&lt;br /&gt;
Here more info:&lt;br /&gt;
&lt;a href="http://www.sqlsoldier.com/wp/sqlserver/whatdoesredonemean"&gt;http://www.sqlsoldier.com/wp/sqlserver/whatdoesredonemean&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-7734628723944020462?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0DD8bHeOW-1YwV7DNoqK0leQOqI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0DD8bHeOW-1YwV7DNoqK0leQOqI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0DD8bHeOW-1YwV7DNoqK0leQOqI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0DD8bHeOW-1YwV7DNoqK0leQOqI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/9YiecOySBQk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/7734628723944020462/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/07/is-of-index-fragmentation-in-log.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/7734628723944020462?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/7734628723944020462?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/9YiecOySBQk/is-of-index-fragmentation-in-log.html" title="Is the % of an index fragmentation in Log shipped / Mirror database equal to the Primary/Source database?" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-9WEMp0UWGn4/TilrscPAYHI/AAAAAAAAAUk/4_cNrnjNiso/s72-c/Index+Fragmentation.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/07/is-of-index-fragmentation-in-log.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYDRn88eSp7ImA9WhdWFUw.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-1120481925262604833</id><published>2011-06-25T03:49:00.000-07:00</published><updated>2011-09-08T13:19:37.171-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-08T13:19:37.171-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mirroring" /><title>Database Mirroring between a Server in Domain and Server outside domain (workgroup)</title><content type="html">When you setup a Database Mirroring via the GUI in SSMS, you are&lt;br /&gt;
requested to specify the fully qualified domain names (FQDN) of the servers.&lt;br /&gt;
What about the cases when you need to configure the Database Mirroring&lt;br /&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
between two servers that not in a domain at all or the 2 servers on different&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
domains with no trust relationships or one server in domain and&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
the second is not. The setup of a DRP site whould be classic example.&lt;br /&gt;
You can enter IP addresses in the GUI wizard or&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
replace the IPs with some Server names that you put in the HOST file&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
it will work only&amp;nbsp;if both servers in the same domain, in other cases&amp;nbsp;you will &lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
probably fail to setup the Mirroring, because SQL Server will try to use&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
Windows Authentication between the servers (By default the Configure &lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
Database Mirroring Security Wizard always uses Windows Authentication) &lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
You will get an error like this:&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;span style="color: red;"&gt;&lt;em&gt;The server network address&lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt;“TCP://SQLServer:5023″&lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt;&amp;nbsp;cannot be reached or &lt;/em&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;span style="color: red;"&gt;&lt;em&gt;does not exist.&lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt;Check the &lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt;network&lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt;&amp;nbsp;address name and &lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt;that the ports &lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt;for the local&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;span style="color: red;"&gt;&lt;em&gt;and remote endpoints &lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt;are operational.&lt;/em&gt;&lt;/span&gt;&lt;span style="color: red;"&gt;&lt;em&gt;(Microsoft SQL Server, Error: 1418)&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;a href="http://3.bp.blogspot.com/-VhKHsfwJsKQ/TgS2kZhnPYI/AAAAAAAAAUE/BCySMW-2R58/s1600/Database+Mirroring.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="194" i$="true" src="http://3.bp.blogspot.com/-VhKHsfwJsKQ/TgS2kZhnPYI/AAAAAAAAAUE/BCySMW-2R58/s320/Database+Mirroring.JPG" width="320" /&gt;&lt;/a&gt;&lt;em&gt;&lt;span style="color: red; font-size: x-small;"&gt;&lt;/span&gt;&lt;/em&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
So how to setup the Database Mirroring when the two Servers not in the same&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
domain or the two servers are workgroups or one server in a domain and other not?&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
Well, SQL Server allows &lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: HE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;configuring &lt;/span&gt;database mirroring under mixed mode &lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
authentication using SQL Server logins with the added security of using certificates.&amp;nbsp;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;strong&gt;In English,&lt;/strong&gt; you will have to create SQL Server Logins/Database Users and&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
the Mirroring EndPoint with authentication that use Certificate and not &lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
Windows Authentication.&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;strong&gt;Note:&lt;/strong&gt; The explanation below is dealing with mirroring configuration without&lt;br /&gt;
the &lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: HE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;witness &lt;/span&gt;server, please refer to links below if your configuration includes&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: HE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;witness &lt;/span&gt;server, in general all the steps for Principal/Mirror server should be&lt;br /&gt;
done also for the &lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: HE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;witness &lt;/span&gt;server.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Here is the highlight summary of the steps:&lt;/strong&gt;&lt;br /&gt;
All the&amp;nbsp;steps below should be done in&amp;nbsp;each server instance(Principal/Mirror)&lt;br /&gt;
SQL scripts for each step you can find at the end,&lt;br /&gt;
and I suppose the you already restored the DB (and transaction logs, if needed)&lt;br /&gt;
in Mirror SQL Server with NORECOVEY of course.&lt;br /&gt;
&lt;br /&gt;
1.In the &lt;strong&gt;&lt;span style="color: blue;"&gt;master&lt;/span&gt;&lt;/strong&gt; database, create a database master key.&lt;br /&gt;
2.In the &lt;strong&gt;&lt;span style="color: blue;"&gt;master&lt;/span&gt;&lt;/strong&gt; database, create an encrypted certificate.&lt;br /&gt;
3.Create a mirroring endpoint using the created certificate.&lt;br /&gt;
4.Back up the certificate to a file and copy it to the other server.&lt;br /&gt;
&lt;br /&gt;
After you complete the steps above in both servers, do the following&lt;br /&gt;
also in both servers in &lt;span style="color: blue;"&gt;master&lt;/span&gt; database:&lt;br /&gt;
&lt;br /&gt;
5.Create a SQL Server login in each Server&lt;br /&gt;
6.Create a database user for created login.&lt;br /&gt;
7.Associate the certificate with the database user created in step 6.&lt;br /&gt;
8.Grant CONNECT permission on the SQL Server login for&amp;nbsp;created&lt;br /&gt;
&amp;nbsp; &amp;nbsp;mirroring endpoint.&lt;br /&gt;
&lt;br /&gt;
Now let`s see the SQL Scripts,&lt;br /&gt;
note that the scripts have different numeration then general steps above.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;-------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;strong&gt;/* Execute this against the Principal Instance */&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="font-size: x-small;"&gt;-------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #38761d;"&gt;&lt;span style="font-size: xx-small;"&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;-- Step 1&lt;/span&gt;&lt;/strong&gt; : &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: #38761d;"&gt;&lt;span style="font-size: xx-small;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-size: x-small;"&gt;CREATE MASTER KEY,CREATE CERTIFICATE&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CREATE ENDPOINT,BACKUP CERTIFICATE to file&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: #38761d; font-size: x-small;"&gt;---------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;USE MASTER&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;CREATE MASTER KEY ENCRYPTION BY PASSWORD =&lt;/span&gt; 'somepassword'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #38761d; font-size: x-small;"&gt;--Create the server-based certificate which will be used to encrypt the database mirroring endpoint &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;CREATE CERTIFICATE&lt;/span&gt; PrincipalServerCertificate&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;WITH SUBJECT&lt;/span&gt; = 'PrincipalServer certificate',&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;START_DATE&lt;/span&gt; =&lt;span style="color: red;"&gt; '20110601',&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;EXPIRY_DATE&lt;/span&gt; =&lt;span style="color: red;"&gt; '20500101'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #38761d; font-size: x-small;"&gt;--Create the database mirroring endpoint for the principal server using the certificate for authentication &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;CREATE ENDPOINT&lt;/span&gt; &lt;span style="color: black;"&gt;MirroringEndPoint&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;STATE = STARTED AS TCP (LISTENER_PORT&lt;/span&gt; = 5022,&lt;span style="color: blue;"&gt; LISTENER_IP&lt;/span&gt; = ALL)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;FOR &lt;/span&gt;&lt;span style="color: #38761d;"&gt;DATABASE_MIRRORING&lt;/span&gt;(&lt;span style="color: blue;"&gt;AUTHENTICATION = CERTIFICATE&lt;/span&gt; PrincipalServerCertificate&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;,ENCRYPTION = REQUIRED ALGORITHM RC4,ROLE = ALL)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;BACKUP CERTIFICATE&lt;/span&gt; PrincipalServerCertificate&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;TO FILE =&lt;/span&gt; &lt;span style="color: red;"&gt;'c:\PrincipalServerCertificate.cer'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;GO&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&lt;span style="color: #38761d;"&gt;--------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="color: #38761d;"&gt;/* Execute this against the Mirror Instance */&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: #38761d; font-size: x-small;"&gt;---------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #38761d; font-size: x-small;"&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;-- Step 2&lt;/span&gt;&lt;/strong&gt; : &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: #38761d; font-size: x-small;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CREATE MASTER KEY,CREATE CERTIFICATE,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CREATE ENDPOINT,BACKUP CERTIFICATE to file&lt;br /&gt;----------------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;USE master&lt;br /&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;CREATE MASTER KEY ENCRYPTION BY PASSWORD&lt;/span&gt; = &lt;span style="color: red;"&gt;'somepassword'&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: #38761d; font-size: x-small;"&gt;--Create the server-based certificate which will be used to encrypt the database mirroring endpoint &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;CREATE CERTIFICATE &lt;span style="color: green;"&gt;MirrorServerCertificate&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;WITH SUBJECT =&lt;span style="color: #38761d;"&gt; 'MirrorServer certificate',&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;START_DATE =&lt;span style="color: red;"&gt; '20110601',&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;EXPIRY_DATE =&lt;span style="color: red;"&gt; '20500101'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;GO&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;CREATE ENDPOINT&lt;/span&gt; MirroringEndPoint &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;STATE = STARTED AS TCP (LISTENER_PORT = 5023, LISTENER_IP = ALL)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;FOR &lt;span style="color: #38761d;"&gt;DATABASE_MIRRORING&lt;/span&gt; (AUTHENTICATION = CERTIFICATE&lt;/span&gt; MirrorServerCertificate,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;ENCRYPTION = REQUIRED ALGORITHM RC4,ROLE = ALL)&lt;br /&gt;GO&lt;br /&gt;BACKUP CERTIFICATE&lt;/span&gt; MirrorServerCertificate&lt;span style="color: blue;"&gt; TO FILE&lt;/span&gt; = &lt;span style="color: red;"&gt;'c:\MirrorServerCertificate.cer';&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;&lt;span style="font-size: small;"&gt;/* &lt;strong&gt;Execute this against the Principal Instance.&lt;/strong&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;The MirrorServerCertificate.cer needs to be copied on the Principal Server&lt;/em&gt;.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;*/&lt;br /&gt;-------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;-- Step 3&lt;/strong&gt;&lt;/span&gt; : &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CREATE LOGIN,CREATE USER,CREATE CERTIFICATE (from Mirror server) &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and grant the created User to it.&lt;br /&gt;------------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;USE MASTER&lt;br /&gt;GO&lt;br /&gt;CREATE LOGIN&lt;/span&gt; MirrorLogin &lt;span style="color: blue;"&gt;WITH PASSWORD&lt;/span&gt; =&lt;span style="color: red;"&gt; 'somepassword'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;GO&lt;br /&gt;CREATE &lt;/span&gt;&lt;span style="color: magenta;"&gt;USER&lt;/span&gt; MirrorUser &lt;span style="color: blue;"&gt;FOR LOGIN&lt;/span&gt; MirrorLogin&lt;br /&gt;&lt;span style="color: blue;"&gt;GO&lt;br /&gt;CREATE CERTIFICATE&lt;/span&gt; MirrorServerCertificate &lt;span style="color: blue;"&gt;AUTHORIZATION &lt;/span&gt;MirrorUser &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;FROM FILE&lt;/span&gt; =&lt;span style="color: red;"&gt;'c:\MirrorServerCertificate.cer'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;GO&lt;br /&gt;GRANT CONNECT ON ENDPOINT::&lt;/span&gt;MirroringEndPoint &lt;span style="color: blue;"&gt;TO &lt;/span&gt;[MirrorLogin]&lt;br /&gt;&lt;span style="color: blue;"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: green;"&gt;&lt;span style="color: green;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d;"&gt;&lt;strong&gt;/* Execute this against the Mirror Instance.&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #38761d;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;em&gt;&amp;nbsp;&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; The PrincipalServerCertificate.cer needs to be copied on the Mirror Server.&lt;/em&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;*/&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;----------------------------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;-- Step 4 :&lt;/span&gt;&lt;/strong&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CREATE LOGIN,CREATE USER,CREATE CERTIFICATE (from Principal server) &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and grant the created User to it.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;----------------------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;USE MASTER&lt;br /&gt;GO&lt;br /&gt;CREATE LOGIN&lt;/span&gt; PrincipalLogin &lt;span style="color: blue;"&gt;WITH PASSWORD&lt;/span&gt; =&lt;span style="color: red;"&gt; 'somepassword'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;GO&lt;br /&gt;CREATE &lt;/span&gt;&lt;span style="color: magenta;"&gt;USER&lt;/span&gt; PrincipalUser &lt;span style="color: blue;"&gt;FOR LOGIN&lt;/span&gt; PrincipalLogin&lt;br /&gt;&lt;span style="color: blue;"&gt;GO&lt;br /&gt;CREATE CERTIFICATE&lt;/span&gt; PrincipalServerCertificate &lt;span style="color: blue;"&gt;AUTHORIZATION&lt;/span&gt; PrincipalUser &lt;br /&gt;&lt;span style="color: blue;"&gt;FROM FILE&lt;/span&gt; = &lt;span style="color: red;"&gt;'c:\PrincipalServerCertificate.cer'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;GO&lt;br /&gt;GRANT CONNECT ON ENDPOINT::&lt;/span&gt;MirroringEndPoint &lt;span style="color: blue;"&gt;TO &lt;/span&gt;[PrincipalLogin]&lt;br /&gt;&lt;span style="color: blue;"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;/* Execute this against the Mirror Instance.*/&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d;"&gt;&lt;span style="font-size: x-small;"&gt;------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d;"&gt;&lt;span style="font-size: small;"&gt;&lt;strong&gt;-- Step 5 :&lt;/strong&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Prepare the mirror server for the database mirroring session &lt;br /&gt;------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;ALTER DATABASE&lt;/span&gt; TESTDB &lt;br /&gt;&lt;span style="color: blue;"&gt;SET PARTNER&lt;/span&gt; = &lt;/span&gt;&lt;span style="color: red; font-size: x-small;"&gt;'TCP://PrincipalServerIP5022'&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;strong&gt;&lt;span style="color: #38761d; font-size: small;"&gt;/* Execute this against the Principal Instance.*/&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;-------------------------------------------------------------------------------------------------&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size: small;"&gt;-- Step 6 : &lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: #38761d;"&gt;--&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Prepare the Principal server for the database mirroring session &lt;br /&gt;-------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;ALTER DATABASE&lt;/span&gt; TestDB&lt;br /&gt;&lt;span style="color: blue;"&gt;SET PARTNER&lt;/span&gt; =&lt;span style="color: red;"&gt; 'TCP://MirrorServerIP:5023'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d;"&gt;-- Set the Mirroring to Asynchronous mode (if needed)&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;ALTER&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;DATABASE&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; TestDB &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;SET&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;PARTNER&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;SAFETY&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;OFF&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
GO&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: black;"&gt;That`s all after Step 6 the mirroring shoul be initialiazed.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Troubleshooting:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
1)&amp;nbsp; Ensure the Principal and Mirror Server listening to defined mirroring endpoints.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; They should be listening after you define the endpoints and their state is Started.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; You can use the following command in Principal Server&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;strong&gt; netstat -na | find "5022"&lt;/strong&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; and this in Mirror Server&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;netstat -na | find "5023"&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Of course, you can set the port numbers to be different then in this example.&lt;br /&gt;
&lt;br /&gt;
2) Make sure firewall is not blocking the port and&amp;nbsp;the firewall is allowing traffic both directions&lt;br /&gt;
&lt;br /&gt;
3) Check the SQL log for errors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;&lt;u&gt;Mirroring Monitoring problems:&lt;/u&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
In our case, which is, Principal Server in a Domain and the Mirror Server&lt;br /&gt;
is not, when launching the "Database Mirroring Monitor" we had the following error:&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&lt;a href="http://1.bp.blogspot.com/-_-fjwGLz2kg/TgdtyUMfZXI/AAAAAAAAAUI/wZGZJ7APquM/s1600/Database+mirroring+monitoring.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="212" i$="true" src="http://1.bp.blogspot.com/-_-fjwGLz2kg/TgdtyUMfZXI/AAAAAAAAAUI/wZGZJ7APquM/s400/Database+mirroring+monitoring.JPG" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If the Monitor was executed in the Principal Server, then there was an error&lt;br /&gt;
saying that the&amp;nbsp;Mirror Server not connected. And vice versa when the Monitor&lt;br /&gt;
was launched from Mirror Server.&lt;br /&gt;
Going to "Manage Server Instance Connections" option&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://1.bp.blogspot.com/-PnQY6hFdtHE/TghfOCTb2CI/AAAAAAAAAUM/1HHx9xPmdoM/s1600/Manage+Server+Instance+Connections.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="183" i$="true" src="http://1.bp.blogspot.com/-PnQY6hFdtHE/TghfOCTb2CI/AAAAAAAAAUM/1HHx9xPmdoM/s400/Manage+Server+Instance+Connections.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and choosing SQL Authentication in the connection&amp;nbsp;of Mirror Server not helped,&lt;br /&gt;
it gave the following errors&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-gLsPX1rbZ3Y/TghfwmIzcFI/AAAAAAAAAUQ/isSIR1_6UW4/s1600/Failed+to+Connect+to+server.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="163" i$="true" src="http://2.bp.blogspot.com/-gLsPX1rbZ3Y/TghfwmIzcFI/AAAAAAAAAUQ/isSIR1_6UW4/s400/Failed+to+Connect+to+server.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
or &lt;br /&gt;
&lt;em&gt;"SQL Server replication requires the actual server name to make a connection to&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;the server. Connections through a server alias, IP address, or any other alternate&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;name are not supported."&lt;/em&gt; &lt;br /&gt;
&lt;br /&gt;
It seems that SQL Server tries to connect to the Mirror server by using&lt;br /&gt;
the Server Name and not IP.&lt;br /&gt;
Adding the mapping to HOST file solved the problem.&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
To see how to monitor the DB Mirroring from every angle,&lt;br /&gt;
please my post &lt;a href="http://madebysql.blogspot.com/2011/08/4-ways-to-efficiently-monitor-db.html"&gt;here&lt;/a&gt;.&lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
Also, I want&amp;nbsp;to share the Clean up scripts,&lt;br /&gt;
they are needed when the mirroring is not working and you want to start&lt;br /&gt;
over again or if you are not sure in each step you stopped and etc.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;-----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;-- Clean up / check scrips for the PRINCIPAL/MIRROR SQL Server&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;-----------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;/*&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;----------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;span style="color: #38761d; font-size: x-small;"&gt;-- &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;Drop master key&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;----------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;ALTER MASTER KEY DROP ENCRYPTION BY SERVICE MASTER KEY&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;-- check if the database master key is encrypted by the service master key.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;SELECT is_master_key_encrypted_by_server ,* &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;FROM sys.databases &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;WHERE name='master'&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;select name, principal_id, algorithm_desc, create_date&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;from master.sys.symmetric_keys&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;where name like '%databasemaster%'&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;span style="color: #38761d;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;DROP MASTER KEY&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;--------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;--&amp;nbsp;DROP ENDPOINT&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;--------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;DROP ENDPOINT MirroringEndPoint&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;SELECT name, role_desc, state_desc &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;FROM sys.database_mirroring_endpoints &lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;--------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;-- DROP CERTIFICATE&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;--------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;&lt;span style="color: #38761d;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;DROP CERTIFICATE PrincipalServerCertificate&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;DROP CERTIFICATE MirrorServerCertificate&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;SELECT *&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;FROM sys.certificates&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;-------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;-- DROP USER&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;-------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;DROP USER MirrorUser&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;SELECT * FROM sys.sysusers;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;--------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;-- DROP LOGIN&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;-------------------------------------------------------------------------------------------------------&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;DROP LOGIN MirrorLogin&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d;"&gt;&lt;span style="font-size: x-small;"&gt;SELECT * FROM sys.server_principals&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;br /&gt;
&lt;span style="color: #38761d; font-size: x-small;"&gt;*/&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
For more information see following links&lt;br /&gt;
&lt;a href="http://technet.microsoft.com/en-us/library/ms191477.aspx"&gt;http://technet.microsoft.com/en-us/library/ms191477.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;a href="http://www.mssqltips.com/tip.asp?tip=1705"&gt;http://www.mssqltips.com/tip.asp?tip=1705&lt;/a&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;a href="http://blogs.msdn.com/b/john_daskalakis/archive/2009/01/15/9320483.aspx"&gt;http://blogs.msdn.com/b/john_daskalakis/archive/2009/01/15/9320483.aspx&lt;/a&gt;&lt;/div&gt;
&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;
&lt;/div&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-1120481925262604833?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1-gNVUimrnuTzw4tf_OfVqR6ATo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1-gNVUimrnuTzw4tf_OfVqR6ATo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1-gNVUimrnuTzw4tf_OfVqR6ATo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1-gNVUimrnuTzw4tf_OfVqR6ATo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/q1m8YvB5cHc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/1120481925262604833/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/06/database-mirroring-between-server-in.html#comment-form" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/1120481925262604833?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/1120481925262604833?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/q1m8YvB5cHc/database-mirroring-between-server-in.html" title="Database Mirroring between a Server in Domain and Server outside domain (workgroup)" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-VhKHsfwJsKQ/TgS2kZhnPYI/AAAAAAAAAUE/BCySMW-2R58/s72-c/Database+Mirroring.JPG" height="72" width="72" /><thr:total>5</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/06/database-mirroring-between-server-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkYHRHYzfSp7ImA9WhZUFEg.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-4961644107741487584</id><published>2011-06-07T05:35:00.000-07:00</published><updated>2011-06-07T05:35:35.885-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-07T05:35:35.885-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><title>@@Rowcount and Aggregative functions</title><content type="html">Please note the following,&lt;br /&gt;
&lt;br /&gt;
When using aggregative function(s) in a SELECT that not returns any row&lt;br /&gt;
you will always get one row in the result set and @@RowCount will be always&lt;br /&gt;
be &lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: HE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;equal &lt;/span&gt;to 1.&lt;br /&gt;
&lt;br /&gt;
Let`s see an example:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;CREATE TABLE&lt;/span&gt; TestTable (RowID &lt;span style="color: blue;"&gt;INT &lt;/span&gt;NOT NULL)&lt;br /&gt;
&lt;span style="color: blue;"&gt;GO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d;"&gt;-- Fetch rows without aggregative function in the Select&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;SELECT * FROM&lt;/span&gt; TestTable&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: magenta;"&gt;@@ROWCOUNT&lt;/span&gt; &lt;span style="color: blue;"&gt;as&lt;/span&gt; RowsCount&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/--fIzhadsKQg/Te4XeWX9lcI/AAAAAAAAAT8/vMZKZhXQsPY/s1600/RowCount_noAggFunc.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://4.bp.blogspot.com/--fIzhadsKQg/Te4XeWX9lcI/AAAAAAAAAT8/vMZKZhXQsPY/s400/RowCount_noAggFunc.JPG" t8="true" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
As you see, the result of &lt;span style="color: magenta;"&gt;@@ROWCOUNT&lt;/span&gt;&amp;nbsp; is 0 as expected,&lt;br /&gt;
Now let`s see what will happened if we add a aggregative function to the&lt;br /&gt;
SELECT, for example, COUNT/AVG and etc.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;CREATE TABLE&lt;/span&gt; TestTable (RowID &lt;span style="color: blue;"&gt;INT&lt;/span&gt; NOT NULL)&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue;"&gt;GO&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #38761d;"&gt;-- Fetch rows with aggregative function in the Select&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;SELECT&amp;nbsp;AVG(&lt;span style="color: black;"&gt;RowID&lt;/span&gt;) FROM&lt;/span&gt; TestTable&lt;br /&gt;
&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: magenta;"&gt;@@ROWCOUNT&lt;/span&gt; &lt;span style="color: blue;"&gt;as&lt;/span&gt; RowsCount&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-UiNKaAELWXk/Te4ZSHD0zbI/AAAAAAAAAUA/UznmJ3E0gos/s1600/RowCount_AggFunc.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://3.bp.blogspot.com/-UiNKaAELWXk/Te4ZSHD0zbI/AAAAAAAAAUA/UznmJ3E0gos/s400/RowCount_AggFunc.JPG" t8="true" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
The &lt;span style="color: magenta;"&gt;@@RowCount&lt;/span&gt; is 1, even the table is empty. &lt;br /&gt;
So, when writing logic that depends on the result of &lt;span style="color: magenta;"&gt;@@RowCount&lt;/span&gt;, &lt;br /&gt;
keep in mind the case described above.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-4961644107741487584?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SykkUTfDFyCFgkUwH7XsYbgaL74/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SykkUTfDFyCFgkUwH7XsYbgaL74/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SykkUTfDFyCFgkUwH7XsYbgaL74/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SykkUTfDFyCFgkUwH7XsYbgaL74/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/DFRxWf0Z93A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/4961644107741487584/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/06/rowcount-and-aggregative-functions.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/4961644107741487584?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/4961644107741487584?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/DFRxWf0Z93A/rowcount-and-aggregative-functions.html" title="@@Rowcount and Aggregative functions" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/--fIzhadsKQg/Te4XeWX9lcI/AAAAAAAAAT8/vMZKZhXQsPY/s72-c/RowCount_noAggFunc.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/06/rowcount-and-aggregative-functions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUMRHc8cCp7ImA9WhdTFkg.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-5566369807080853841</id><published>2011-05-06T10:33:00.000-07:00</published><updated>2011-07-14T08:11:25.978-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-14T08:11:25.978-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><title>Interesting index option IGNORE_DUP_KEY</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/--mQ1PgVe-Z4/TcQXagUqhuI/AAAAAAAAAT4/OfD09Y1t56Y/s1600/IGNORE_DUP_KEY.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="153" j8="true" src="http://3.bp.blogspot.com/--mQ1PgVe-Z4/TcQXagUqhuI/AAAAAAAAAT4/OfD09Y1t56Y/s200/IGNORE_DUP_KEY.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;In one of&amp;nbsp;migration scripts, we needed&lt;br /&gt;
to create a table to hold distinct values.&lt;br /&gt;
In the population process, there was no&lt;br /&gt;
option to specify 'SELECT DISTINCT',&lt;br /&gt;
because the population was done by batches.&lt;br /&gt;
Instead of checking if a value already exist&lt;br /&gt;
in a target table, we created an unique index&lt;br /&gt;
with IGNORE_DUP_KEY option ON.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Additional example will be related to ETL process,&lt;br /&gt;
For example, if you have different sources of data&lt;br /&gt;
Or same row can come more than once from one source,&lt;br /&gt;
You can use this index option on ODS/Delta tables.&lt;br /&gt;
&lt;br /&gt;
So, what this option does? When this index option turned off (by default) and&lt;br /&gt;
you try to insert duplicate value to a column with uniquie index, you will get an &lt;br /&gt;
&lt;strong&gt;error&lt;/strong&gt; something like this:&lt;br /&gt;
&lt;em&gt;&lt;span style="color: red;"&gt;Msg 2601, Level 14, State 1, Line 1&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;span style="color: red;"&gt;Cannot insert duplicate key row .........&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
In case when you create an index(or alter it) with &lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;IGNORE_DUP_KEY=ON,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
the duplicate values will be not inserted and you will get &lt;strong&gt;warning&lt;/strong&gt; message:&lt;br /&gt;
&lt;em&gt;&lt;span style="color: red;"&gt;Duplicate key was ignored.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
Here the example: &lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;CREATE TABLE&lt;/span&gt; TestTbl(Name &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;(10)) &lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-size: x-small;"&gt;GO&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;CREATE UNIQUE NONCLUSTERED INDEX&lt;/span&gt; [IX_Name]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;ON&lt;/span&gt; TestTbl (Name&lt;span style="color: blue;"&gt; ASC) WITH (IGNORE_DUP_KEY = ON)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-size: x-small;"&gt;GO&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;INSERT INTO&lt;/span&gt; TestTbl(Name)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: red;"&gt;'Dan'&lt;/span&gt; &lt;span style="color: blue;"&gt;UNION ALL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color: red;"&gt;'Tim'&lt;/span&gt; &lt;span style="color: blue;"&gt;UNION ALL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color: red;"&gt;'Dan'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-size: x-small;"&gt;GO&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;&lt;/span&gt; &lt;span style="color: grey;"&gt;&lt;span style="color: grey;"&gt;*&lt;/span&gt;&lt;/span&gt; &lt;span style="color: blue;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt;&lt;/span&gt; TestTbl&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Note: On UPDATE command this feature do NOT work,&lt;br /&gt;
you will get an error. So be aware of this option,&lt;br /&gt;
Thanks for reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-5566369807080853841?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/l8JwqK6neZ81RkphLUWJaTtXgvA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l8JwqK6neZ81RkphLUWJaTtXgvA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/l8JwqK6neZ81RkphLUWJaTtXgvA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/l8JwqK6neZ81RkphLUWJaTtXgvA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/DGl2oXc7imk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/5566369807080853841/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/05/interesting-index-option-ignoredupkey.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/5566369807080853841?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/5566369807080853841?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/DGl2oXc7imk/interesting-index-option-ignoredupkey.html" title="Interesting index option IGNORE_DUP_KEY" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/--mQ1PgVe-Z4/TcQXagUqhuI/AAAAAAAAAT4/OfD09Y1t56Y/s72-c/IGNORE_DUP_KEY.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/05/interesting-index-option-ignoredupkey.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUYMRnk_fyp7ImA9WhZQFUQ.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-3279674986492837034</id><published>2011-04-19T10:41:00.000-07:00</published><updated>2011-04-23T14:13:07.747-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-23T14:13:07.747-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SSIS" /><title>Error when running SQL Server 2005 SSIS package on SQL Server 2008</title><content type="html">If you have upgraded from SQL Server 2005 64 bit to &lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;SQL Server 2008 64 bit and you execute SSIS package that&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;you had in SQL Server 2005 you will get error something like this:&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;/div&gt;&lt;br /&gt;
&amp;nbsp;&lt;em&gt;&lt;span style="color: red;"&gt;Description: SSIS Error Code DTS_E_OLEDB_NOPROVIDER_64BIT_ERROR.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;span style="color: red;"&gt;The requested OLE DB provider SQLNCLI.1 is &lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;span style="color: red;"&gt;not registered -- perhaps no 64-bit provider is available. Error code: 0x00000000......................................................................................................&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
This is because the provider name for SQL Native Client (SNAC)&lt;br /&gt;
connections has changed in SQL Server 2008 and the SQL 2005&lt;br /&gt;
version of this provider is not installed with SQL 2008 by default.&lt;br /&gt;
&lt;br /&gt;
Version Provider name:&lt;br /&gt;
&lt;br /&gt;
SQL Server 2005&amp;nbsp;&lt;strong&gt;SQLNCLI.1 &lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
SQL Server 2008&amp;nbsp;&lt;strong&gt;SQLNCLI10.1 &lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Meaning you have to change the connection string to use the&lt;br /&gt;
&lt;strong&gt;SQLNCLI10.1&lt;/strong&gt; instead of&lt;strong&gt; SQLNCLI.1&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Here is the &lt;a href="http://blogs.msdn.com/b/mattm/archive/2007/06/07/sql-native-client-10-provider-name-change.aspx"&gt;reference&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-3279674986492837034?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0-JLprwT8dHZgcTurizCMsVK-Cw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0-JLprwT8dHZgcTurizCMsVK-Cw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0-JLprwT8dHZgcTurizCMsVK-Cw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0-JLprwT8dHZgcTurizCMsVK-Cw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/l6vIpmLBeX0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/3279674986492837034/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/04/error-when-running-sql-server-2005-ssis.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/3279674986492837034?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/3279674986492837034?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/l6vIpmLBeX0/error-when-running-sql-server-2005-ssis.html" title="Error when running SQL Server 2005 SSIS package on SQL Server 2008" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/04/error-when-running-sql-server-2005-ssis.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMMQnk9fSp7ImA9WhZQGEw.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-3924141237656530567</id><published>2011-04-18T11:39:00.000-07:00</published><updated>2011-04-26T02:34:43.765-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-26T02:34:43.765-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Mirroring" /><title>How to upgrade to SQL Server 2008 R2 with minimal downtime: 1-2 minutes</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/--dbuUEWt6W4/TaxpbsFUJmI/AAAAAAAAATk/76ZANBuBvy8/s1600/Upgrade+to+SQL+2008.png" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" r6="true" src="http://4.bp.blogspot.com/--dbuUEWt6W4/TaxpbsFUJmI/AAAAAAAAATk/76ZANBuBvy8/s200/Upgrade+to+SQL+2008.png" width="181" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Here is real life example,&lt;br /&gt;
how to upgrade SQL Server 2005&lt;br /&gt;
to SQL Server 2008 R2 with&lt;br /&gt;
less than 2 minutes downtime&lt;br /&gt;
and without any connection&lt;br /&gt;
string changes.&lt;br /&gt;
Sounds interesting?&lt;br /&gt;
Then keep reading.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Site configuration:&lt;br /&gt;
Active/Passive failover cluster with SQL Server 2005&lt;br /&gt;
Enterprise Edition.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4SWzXcxpBYo/Taxw0XH6AAI/AAAAAAAAATo/T--vRyIKJxo/s1600/active_passive_Cluster.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="184" r6="true" src="http://1.bp.blogspot.com/-4SWzXcxpBYo/Taxw0XH6AAI/AAAAAAAAATo/T--vRyIKJxo/s320/active_passive_Cluster.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Generally, this is the way:&lt;br /&gt;
Break Cluster, leave one node in the cluster(Node X),&lt;br /&gt;
install new cluster on second node Y,&lt;br /&gt;
setup SQL 2008 in the second node Y,&lt;br /&gt;
setup mirroring between node X and node Y,&lt;br /&gt;
do mirroring failover,switch between the clusters&lt;br /&gt;
(assign IP of original cluster to the new cluster),&lt;br /&gt;
install SQL 2008 on Node X, join Node X to the new cluster.&lt;br /&gt;
&lt;br /&gt;
Below&amp;nbsp;is high level work plan step by step,&lt;br /&gt;
I will not elaborate on system related aspects,&lt;br /&gt;
I will just mention the steps:&lt;br /&gt;
&lt;br /&gt;
Let suppose Node X is Active.&lt;br /&gt;
&lt;br /&gt;
1) Break the cluster, remove passive node Y from the cluster&lt;br /&gt;
&lt;br /&gt;
2) If you have Domain Controller installed on Node X/Y machine,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; you will have to remove it, because SQL 2008 cannot be&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; installed on Domain Controller machine, you will need to&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; install the DC on&amp;nbsp;other machine.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Remove the Node Y from old domain, Join it to new domain.&lt;br /&gt;
&lt;br /&gt;
3) Define new Cluster on Node Y with different name.&lt;br /&gt;
&lt;br /&gt;
4) UnInstall SQL Server 2005,Install SQL Server 2008 R2 on Node Y &lt;br /&gt;
&amp;nbsp;&amp;nbsp; (Cluster installation type)&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Create Logins with Same SIDs,Jobs and etc.&lt;br /&gt;
&lt;br /&gt;
5) Setup Mirroring between Node X and Node Y, in async or sync&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; mode, yep mirroring between SQL 2005 and 2008, it works fine&lt;br /&gt;
&lt;br /&gt;
6) Do manual Mirroring failover (recommended&amp;nbsp; changing to &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; synchronized mode before the failover). Remove the Mirroring.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2-5 seconds downtime.&lt;br /&gt;
&lt;br /&gt;
7) Switch the Clusters, assign the IP of old cluster to the new &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Cluster, change the DNS records.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 minute downtime.&lt;br /&gt;
&lt;br /&gt;
8)&amp;nbsp; That`s all, the SQL is up and ready to get connections.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; As you can see, there is no need to change any connection&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; strings in the applications.&lt;br /&gt;
&lt;br /&gt;
9) Now complete work on Node X, UnInstall SQL 2005,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; install SQL 2008, join it to new Cluster.&lt;br /&gt;
&lt;br /&gt;
Again, this is in high level.&lt;br /&gt;
&lt;br /&gt;
Important notes:&lt;br /&gt;
&lt;br /&gt;
a. When you finish the manual Mirroring failover, there is no way&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;back to SQL Server 2005.&lt;br /&gt;
&lt;br /&gt;
b. Check if you can allow some time period without Cluster protection.&lt;br /&gt;
&lt;br /&gt;
Thanks for reading&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-3924141237656530567?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oytwFMi2AJDXWHaMU3D35JhuYmE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oytwFMi2AJDXWHaMU3D35JhuYmE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oytwFMi2AJDXWHaMU3D35JhuYmE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oytwFMi2AJDXWHaMU3D35JhuYmE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/HplOfEP7nVY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/3924141237656530567/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/04/how-to-upgrade-to-sql-server-2008-r2.html#comment-form" title="6 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/3924141237656530567?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/3924141237656530567?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/HplOfEP7nVY/how-to-upgrade-to-sql-server-2008-r2.html" title="How to upgrade to SQL Server 2008 R2 with minimal downtime: 1-2 minutes" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/--dbuUEWt6W4/TaxpbsFUJmI/AAAAAAAAATk/76ZANBuBvy8/s72-c/Upgrade+to+SQL+2008.png" height="72" width="72" /><thr:total>6</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/04/how-to-upgrade-to-sql-server-2008-r2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEABQng_cCp7ImA9WhdTFkg.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-5951582963447026592</id><published>2011-04-15T14:57:00.000-07:00</published><updated>2011-07-14T08:19:13.648-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-14T08:19:13.648-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Interview Questions" /><title>BI Developer Interview Questions</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-UR3zymPBDH8/TahuGD2UPeI/AAAAAAAAATY/WR2f4B1-RPE/s1600/BI+Cube.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" r6="true" src="http://4.bp.blogspot.com/-UR3zymPBDH8/TahuGD2UPeI/AAAAAAAAATY/WR2f4B1-RPE/s200/BI+Cube.jpg" width="191" /&gt;&lt;/a&gt;&lt;/div&gt;I want to share with you set of interview&lt;br /&gt;
questions relevant for BI Developer.&lt;br /&gt;
What do I mean by saying BI Developer?&lt;br /&gt;
A person that &lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: HE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;understands &lt;/span&gt;SQL,&lt;br /&gt;
knows how to build efficient ETL process,&lt;br /&gt;
knows how to design a Datawarehouse,&lt;br /&gt;
knows how to&amp;nbsp;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: HE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;design &lt;/span&gt;and&amp;nbsp; build cubes,&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: HE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;understands &lt;/span&gt;how BI works, knows to&lt;br /&gt;
provide design of ETL/DWH/Cubes from&lt;br /&gt;
analyzing the business requirements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
0)&amp;nbsp;Describe the BI system you have in your company, including&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; ETL process. What were your responsibilities in your last job ?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; What are the challenges you faced in your BI system ?&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------&lt;br /&gt;
-- SQL knowledge ---------------------------------------------------&lt;br /&gt;
-----------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1)&amp;nbsp; What is the difference between a Clustered and&amp;nbsp;NonClustered&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; index? For what type of&amp;nbsp;queries each index is good?&lt;br /&gt;
&lt;br /&gt;
2) Write at least two different queries(different ways)&amp;nbsp;that return&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from the table below, the 2 most latest released books for each Author.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-RU40Xf6Y300/Tah2Th645RI/AAAAAAAAATg/gByc7-BEAKI/s1600/Authors+Table.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="147" r6="true" src="http://3.bp.blogspot.com/-RU40Xf6Y300/Tah2Th645RI/AAAAAAAAATg/gByc7-BEAKI/s320/Authors+Table.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Note: the table above may contain more rows for each author.&lt;br /&gt;
------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
3) Why OLTP database design not generally a good idea for &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; a Database Warehouse?&lt;br /&gt;
&lt;br /&gt;
4) What type of schemas you know in DataWarehouse DBs?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;What are the differences? Is there any &lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: HE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;performance &lt;/span&gt;differences?&lt;br /&gt;
&lt;br /&gt;
5) What are fact and dimension tables?&lt;br /&gt;
&lt;br /&gt;
6) What is Dimensional Hierarchy in OLAP ? Why we need it?&lt;br /&gt;
&lt;br /&gt;
7) If we need to limit the access to a data in a cube, &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; How do you do it?&lt;br /&gt;
&lt;br /&gt;
8)&amp;nbsp;What are different storage mode options in SSAS?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; How do you decide when to use each of them?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; What are the differences?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; What the Advantages and Disadvantages of each technology?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; How they effect on &lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-language: HE; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;performance&lt;/span&gt;?&lt;br /&gt;
&lt;br /&gt;
9) If you need to create&amp;nbsp;your own measure that holds some logic,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; How do you do it?&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; What are Additive, Semi additive and No additive measures?&lt;br /&gt;
&lt;br /&gt;
10) How would you optimize the dimensions?&lt;br /&gt;
&lt;br /&gt;
11) What really ‘Optimize schema’ option is SSAS does?&lt;br /&gt;
&lt;br /&gt;
12) Can you give an example when you need to create&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; two measure groups?&lt;br /&gt;
&lt;br /&gt;
13)&amp;nbsp;What is the difference between attribute hierarchy and user hierarchy?&lt;br /&gt;
&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
-- SSIS related questions ---------------------------------------------------&lt;br /&gt;
-----------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
14) What is Lookup is SSIS? &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
15) Is it possible to restart failed SSIS package from the point of &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; failure, instead of rerunning the whole package? &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; How&amp;nbsp;to implement this? &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
16) Is it possible to define breakpoints in SSIS package? &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If yes, how it helps the developer? &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
17) Is it possible to define transaction in package/container or &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Control Flow task&amp;nbsp;level&amp;nbsp;in a SSIS package? How you do it? &lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
18) What's the difference between Control Flow and Data Flow?&lt;br /&gt;
&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
-- MDX related questions -------------------------------------------------&lt;br /&gt;
----------------------------------------------------------------------------&lt;br /&gt;
&amp;nbsp; &lt;br /&gt;
19) What are the differences between MDX and T-SQL? &lt;br /&gt;
&lt;br /&gt;
20) How can you retrieve Top 10 customers without using&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TopCount function?&lt;br /&gt;
&lt;br /&gt;
If you need the answers to any question above,LMK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-5951582963447026592?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/yjDY9ZeX01AEQffO41a1Biz7Yoo/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yjDY9ZeX01AEQffO41a1Biz7Yoo/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/yjDY9ZeX01AEQffO41a1Biz7Yoo/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/yjDY9ZeX01AEQffO41a1Biz7Yoo/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/0-1qzQvzEu4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/5951582963447026592/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/04/bi-developer-interview-questions.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/5951582963447026592?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/5951582963447026592?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/0-1qzQvzEu4/bi-developer-interview-questions.html" title="BI Developer Interview Questions" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-UR3zymPBDH8/TahuGD2UPeI/AAAAAAAAATY/WR2f4B1-RPE/s72-c/BI+Cube.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/04/bi-developer-interview-questions.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcCRH0_eip7ImA9WhZSFks.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-7701341250528807510</id><published>2011-04-01T07:25:00.000-07:00</published><updated>2011-04-01T07:27:45.342-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-01T07:27:45.342-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><title>Order of Joins, FORCE ORDER Hint</title><content type="html">Well, as you may know SQL Server can build the execution plan&lt;br /&gt;
with different order of joins than in your query. This is done as&lt;br /&gt;
part&amp;nbsp;of the query execution&amp;nbsp;optimization.&lt;br /&gt;
&lt;br /&gt;
I had a&amp;nbsp;situation when a query did not performed well, the&lt;br /&gt;
execution&amp;nbsp;plan was not optimal. In such cases, what you&lt;br /&gt;
should do, is to&amp;nbsp;check whether the&amp;nbsp;statistics are updated,&lt;br /&gt;
check if SQL Server uses&amp;nbsp;right indexes,check for missing&lt;br /&gt;
indexes and maybe you need to&amp;nbsp;rewrite your query.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-DFz5nkAOv58/TZXfaH53cvI/AAAAAAAAATU/mBy3K8gAwLQ/s1600/SQL+Join+Order.JPG" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-DFz5nkAOv58/TZXfaH53cvI/AAAAAAAAATU/mBy3K8gAwLQ/s1600/SQL+Join+Order.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
In my situation, I had no time&lt;br /&gt;
to rewrite the query, but we&lt;br /&gt;
noticed that&amp;nbsp;the order of tables&lt;br /&gt;
that SQL&amp;nbsp;choses&amp;nbsp;to&amp;nbsp;accessed&lt;br /&gt;
was not optimal.&lt;br /&gt;
&lt;br /&gt;
The quick and dirty solution was to add &lt;a href="http://msdn.microsoft.com/en-us/library/ms181714.aspx"&gt;'Force Order'&lt;/a&gt; hint to the query.&lt;br /&gt;
What is does? It specifies that the join order indicated by the query&lt;br /&gt;
syntax&amp;nbsp;should be preserved during query optimization.&lt;br /&gt;
&lt;br /&gt;
In most cases the SQL Server optimizer will do great job.&lt;br /&gt;
So you should use this hint only in exceptional cases.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-7701341250528807510?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/8szlDrsHhre2L2cDeQeg3IphR5M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8szlDrsHhre2L2cDeQeg3IphR5M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/8szlDrsHhre2L2cDeQeg3IphR5M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/8szlDrsHhre2L2cDeQeg3IphR5M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/Jt-LWmbOky0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/7701341250528807510/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/04/order-of-joins-force-order-hint.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/7701341250528807510?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/7701341250528807510?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/Jt-LWmbOky0/order-of-joins-force-order-hint.html" title="Order of Joins, FORCE ORDER Hint" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-DFz5nkAOv58/TZXfaH53cvI/AAAAAAAAATU/mBy3K8gAwLQ/s72-c/SQL+Join+Order.JPG" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/04/order-of-joins-force-order-hint.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cNQXk-fyp7ImA9WhZSFU0.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-4073658931862539944</id><published>2011-03-29T11:24:00.000-07:00</published><updated>2011-03-30T11:18:10.757-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-30T11:18:10.757-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><title>How to resolve references to system objects in TFS, References to Master/MSDB objects</title><content type="html">To continue of &lt;a href="http://madebysql.blogspot.com/2010/12/tfs-and-ssms-integration.html"&gt;TFS/DB Dude subject&lt;/a&gt;, I want to share with you&lt;br /&gt;
some &amp;nbsp;issues we had with starting to work with the TFS Database&lt;br /&gt;
edition.&lt;br /&gt;
&lt;br /&gt;
This post will discuss "How to resolve references to system objects&lt;br /&gt;
in TFS, References to Master/MSDB objects". In next posts&lt;br /&gt;
I will describe additional problems, like merge issues, adding&lt;br /&gt;
new objects to DB and etc.&lt;br /&gt;
&lt;br /&gt;
Probably you use system objects in your&amp;nbsp;stored procedures,&lt;br /&gt;
For example:&amp;nbsp;system tables, system views, DMVs or system&lt;br /&gt;
catalogs or you use MSDB objects in your SPs, like sending&lt;br /&gt;
emails from DB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-47wMhCRpbq0/TZIdeBts0cI/AAAAAAAAATM/8zCasNW9i7Y/s1600/reference.gif" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="142" r6="true" src="http://3.bp.blogspot.com/-47wMhCRpbq0/TZIdeBts0cI/AAAAAAAAATM/8zCasNW9i7Y/s200/reference.gif" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;In such cases, when you&lt;br /&gt;
run a build of the solution&lt;br /&gt;
or database project, you&lt;br /&gt;
will get warnings indicating&lt;br /&gt;
that the system objects used&lt;br /&gt;
in the stored procedures&lt;br /&gt;
cannot be resolved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here some examples:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: #cc0000; font-size: x-small;"&gt;XXX has an unresolved reference to object [sys].[schemas].&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #cc0000; font-size: x-small;"&gt;XXX has an unresolved reference to object [sys].[tables].&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #cc0000; font-size: x-small;"&gt;XXX has an unresolved reference to object [sys].[dm_db_index_physical_stats].&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: #cc0000; font-size: x-small;"&gt;XXX has an unresolved reference to object [msdb].[dbo].[sp_send_dbmail].&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The solution :&lt;br /&gt;
&lt;br /&gt;
To reference a master or msdb&amp;nbsp;database containing system&lt;br /&gt;
objects, you can&amp;nbsp;reference to&amp;nbsp;a &lt;strong&gt;master.dbschema&lt;/strong&gt; file or&lt;br /&gt;
&lt;strong&gt;msdb.dbschema&lt;/strong&gt; file accordingly to resolve the references&lt;br /&gt;
to the system objects.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-RBw9QVjOJc4/TZIhS-ZGkSI/AAAAAAAAATQ/cjjAe1mD0fM/s1600/Add+DB+reference.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" r6="true" src="http://4.bp.blogspot.com/-RBw9QVjOJc4/TZIhS-ZGkSI/AAAAAAAAATQ/cjjAe1mD0fM/s1600/Add+DB+reference.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
These files can be found in :&lt;br /&gt;
&lt;br /&gt;
C:\Program Files\Microsoft Visual Studio &lt;span style="color: #cc0000;"&gt;10.0&lt;/span&gt;\VSTSDB\&lt;br /&gt;
Extensions\SqlServer\&lt;span style="color: #cc0000;"&gt;2008&lt;/span&gt;\DBSchemas\&lt;br /&gt;
&lt;br /&gt;
The red values can vary, depending of you version of TFS&lt;br /&gt;
and DB project.&lt;br /&gt;
Note that each supported version of SQL Server&amp;nbsp;has&lt;br /&gt;
corresponding master.dbschema and msdb.dbschema files.&lt;br /&gt;
&lt;br /&gt;
You may see problems such as &lt;span style="color: red;"&gt;'&lt;span style="font-family: Tahoma; font-size: x-small;"&gt;master.dbschema does not exist'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
when you do Build from other machines, for example,&lt;br /&gt;
from&amp;nbsp;TFS Server.&lt;br /&gt;
Or when you do&amp;nbsp;a Branch.&lt;br /&gt;
&lt;br /&gt;
Error Example:&lt;br /&gt;
&lt;div class="MsoNormal" style="direction: ltr; margin: 0in 0in 0pt; text-align: left; unicode-bidi: embed;"&gt;&lt;span style="color: black; font-family: &amp;quot;Tahoma&amp;quot;, &amp;quot;sans-serif&amp;quot;; font-size: 8pt;"&gt;C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\TeamData\Microsoft.Data.Schema.TSqlTasks.targets (56): File D:\Builds\NeoApp\Program Files\Microsoft Visual Studio 10.0\VSTSDB\Extensions\SqlServer\2008\DBSchemas\master.dbschema does not exist.&lt;/span&gt;&lt;span style="color: #1f497d;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
This happens because the path to these files saved in dbproj file&lt;br /&gt;
by using relative path, something like this \..\..\xx\xxx\x&lt;br /&gt;
&lt;br /&gt;
One way of dealing with this problem is to&amp;nbsp;make your referenced&lt;br /&gt;
dbschema files a part of the solution and reference using&lt;br /&gt;
a relative path. For example, create a folder in your&lt;br /&gt;
Solution/Project, copy files into it and create the reference to&lt;br /&gt;
these files in the&amp;nbsp;folder. This will solve the path issues&lt;br /&gt;
between machines.&lt;br /&gt;
&lt;br /&gt;
Finally, here is a link to good article about the &lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/magazine/dd483214.aspx#id0100042"&gt;Microsoft Visual Studio Team System 2008 (VSTS) Database Edition&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-4073658931862539944?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/KDr6SWMR2cTL49pM7r91OaOYKDQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KDr6SWMR2cTL49pM7r91OaOYKDQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/KDr6SWMR2cTL49pM7r91OaOYKDQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/KDr6SWMR2cTL49pM7r91OaOYKDQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/icvZtpxqSwQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/4073658931862539944/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/03/how-to-resolve-references-to-system.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/4073658931862539944?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/4073658931862539944?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/icvZtpxqSwQ/how-to-resolve-references-to-system.html" title="How to resolve references to system objects in TFS, References to Master/MSDB objects" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-47wMhCRpbq0/TZIdeBts0cI/AAAAAAAAATM/8zCasNW9i7Y/s72-c/reference.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/03/how-to-resolve-references-to-system.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU4DQH0-fCp7ImA9WhZbGU8.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-660197436277432579</id><published>2011-03-18T06:29:00.000-07:00</published><updated>2011-06-24T06:59:31.354-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-24T06:59:31.354-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><title>Search for a string in SQL Agent Job Steps</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-lIQ0u3yLTA0/TYNa_FXi29I/AAAAAAAAATI/ZXFMbnlIko8/s1600/Search+SQL+Server+Job.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" r6="true" src="https://lh6.googleusercontent.com/-lIQ0u3yLTA0/TYNa_FXi29I/AAAAAAAAATI/ZXFMbnlIko8/s200/Search+SQL+Server+Job.jpg" width="196" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
When you change schema of tables or&lt;br /&gt;
when you change a SP, you probably need to&lt;br /&gt;
to find out &lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, serif; font-size: 12pt; line-height: 115%;"&gt;whether&amp;nbsp;&lt;/span&gt;the SP&amp;nbsp;used&amp;nbsp;in SQL Server&lt;br /&gt;
Job(s) or there are inline SQL statements in&lt;br /&gt;
the Jobs that use&amp;nbsp;your table(s).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
How to do it quickly?&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;&amp;nbsp; js.database_name &lt;span style="color: blue;"&gt;as&lt;/span&gt; DatabaseName,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; jobs.Name &lt;span style="color: blue;"&gt;as&lt;/span&gt; JobName,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; js.step_id &lt;span style="color: blue;"&gt;as&lt;/span&gt; StepID,&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; js.step_name &lt;span style="color: blue;"&gt;as&lt;/span&gt; StepName, &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; js.command &lt;span style="color: blue;"&gt;as&lt;/span&gt; StepCommand&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; msdb.dbo.sysjobs &lt;span style="color: blue;"&gt;as&lt;/span&gt; jobs&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: blue;"&gt;INNER JOIN&lt;/span&gt; msdb.dbo.sysjobsteps &lt;span style="color: blue;"&gt;as&lt;/span&gt;&amp;nbsp;js&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;ON&lt;/span&gt; jobs.job_id = js.job_id&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt;&amp;nbsp; jobs.[enabled] = 1&amp;nbsp;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;AND&lt;/span&gt; js.command &lt;span style="color: blue;"&gt;LIKE &lt;/span&gt;&lt;span style="color: red;"&gt;&amp;nbsp;'%XXXXXXXXX%'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;ORDER BY&lt;/span&gt; jobs.Name,js.step_id&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Thanks for reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-660197436277432579?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/P6tkd8BLX49FoQpHadqkg6Jcors/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P6tkd8BLX49FoQpHadqkg6Jcors/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/P6tkd8BLX49FoQpHadqkg6Jcors/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/P6tkd8BLX49FoQpHadqkg6Jcors/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/bRE18VkGDJ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/660197436277432579/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/03/search-for-string-in-sql-agent-job.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/660197436277432579?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/660197436277432579?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/bRE18VkGDJ4/search-for-string-in-sql-agent-job.html" title="Search for a string in SQL Agent Job Steps" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh6.googleusercontent.com/-lIQ0u3yLTA0/TYNa_FXi29I/AAAAAAAAATI/ZXFMbnlIko8/s72-c/Search+SQL+Server+Job.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/03/search-for-string-in-sql-agent-job.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4CSHg9fip7ImA9WhZQFkk.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-442656821151217946</id><published>2011-03-11T11:54:00.000-08:00</published><updated>2011-04-24T03:29:29.666-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-24T03:29:29.666-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Temp Table vs Table Variable" /><title>A table variable is not a memory-only structure</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;
Yep, the word 'Variable' is misleading.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-etG-VXdi0Xg/TXp6lquzHtI/AAAAAAAAATA/pIOV4PkRDrg/s1600/Disk.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://lh4.googleusercontent.com/-etG-VXdi0Xg/TXp6lquzHtI/AAAAAAAAATA/pIOV4PkRDrg/s1600/Disk.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According to &lt;a href="http://support.microsoft.com/default.aspx?scid=kb;en-us;305977&amp;amp;Product=sql2k"&gt;Microsoft article&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;"A table variable is not a memory-only structure.&lt;/i&gt;&lt;br /&gt;
&lt;div&gt;&lt;i&gt;Because a table variable might hold more data than&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;can fit in memory, it has to have a place on disk to store data.&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;Table variables &lt;b&gt;are created in the TempDB&lt;/b&gt; database similar&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;to temporary tables. If memory is available, both table variables&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;and temporary tables are created and processed while&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;in memory (data cache). "&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;We can easily check this by checking the '&lt;span class="Apple-style-span" style="color: #38761d;"&gt;sysobjects&lt;/span&gt;'&lt;/div&gt;&lt;div&gt;table in the TempDB:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;DECLARE &lt;/span&gt;@TestTable &lt;span class="Apple-style-span" style="color: blue;"&gt;TABLE&lt;/span&gt;(BookID &lt;span class="Apple-style-span" style="color: blue;"&gt;INT&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;SELECT TOP 1 *&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;FROM &lt;/span&gt;tempdb.&lt;span class="Apple-style-span" style="color: #38761d;"&gt;sys.sysobjects&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;WHERE&lt;/span&gt; [name] &lt;span class="Apple-style-span" style="color: blue;"&gt;LIKE &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #990000;"&gt;'#%'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;AND &lt;/span&gt;[name] &lt;span class="Apple-style-span" style="color: blue;"&gt;NOT LIKE &lt;/span&gt;&lt;span class="Apple-style-span" style="color: #cc0000;"&gt;'%[_]%'&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;ORDER BY&lt;/span&gt; crdate &lt;span class="Apple-style-span" style="color: blue;"&gt;DESC&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Thanks for reading.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-442656821151217946?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YyuSBXYvX1ALvofcWoK8gT7z3ek/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YyuSBXYvX1ALvofcWoK8gT7z3ek/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YyuSBXYvX1ALvofcWoK8gT7z3ek/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YyuSBXYvX1ALvofcWoK8gT7z3ek/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/g9KgPdFfcr0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/442656821151217946/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/03/table-variable-is-not-memory-only.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/442656821151217946?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/442656821151217946?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/g9KgPdFfcr0/table-variable-is-not-memory-only.html" title="A table variable is not a memory-only structure" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh4.googleusercontent.com/-etG-VXdi0Xg/TXp6lquzHtI/AAAAAAAAATA/pIOV4PkRDrg/s72-c/Disk.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/03/table-variable-is-not-memory-only.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cDRn47fCp7ImA9WhZQFkk.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-8311396710532421602</id><published>2011-02-25T08:41:00.000-08:00</published><updated>2011-04-24T03:31:17.004-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-24T03:31:17.004-07:00</app:edited><title>Off Topic: Rogun (Roghun) town,Tajikistan</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;There is a place in the World called Rogun (Roghun) town&lt;br /&gt;
(Город Рогун, Таджикистан).&lt;br /&gt;
It is a&amp;nbsp;small town in &lt;a href="http://en.wikipedia.org/wiki/Tajikistan"&gt;Tajikistan&lt;/a&gt;. This is the place I grew up.&lt;br /&gt;
Near&amp;nbsp;it town called Sary Pulak (Сары-Пулак). &lt;br /&gt;
I put this post for memory. If you somehow read this post&lt;br /&gt;
and you know these cities,maybe you have new photos,&lt;br /&gt;
let me know.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-plhSCB7lJgw/TWfXX3jdPeI/AAAAAAAAASw/GWkYnSBoR34/s1600/Rogun.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="260" l6="true" src="http://4.bp.blogspot.com/-plhSCB7lJgw/TWfXX3jdPeI/AAAAAAAAASw/GWkYnSBoR34/s400/Rogun.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
What a beauty! Rogun town, Город Рогун, Таджикистан.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-jok7RL0G_98/TWfZuSRVFYI/AAAAAAAAAS4/NkioyayhvnI/s1600/SaryPulak.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="261" l6="true" src="http://4.bp.blogspot.com/-jok7RL0G_98/TWfZuSRVFYI/AAAAAAAAAS4/NkioyayhvnI/s400/SaryPulak.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and this is Sary Pulak, Сары-Пулак.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Z8DFdbyS8x8/TWfbRmuhEKI/AAAAAAAAAS8/WrKPYeK6z-U/s1600/Unga.jpg.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="310" l6="true" src="http://2.bp.blogspot.com/-Z8DFdbyS8x8/TWfbRmuhEKI/AAAAAAAAAS8/WrKPYeK6z-U/s400/Unga.jpg.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This boy is me !&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-8311396710532421602?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DsTtYo5S47kwsW063BZ-3nRqS-g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DsTtYo5S47kwsW063BZ-3nRqS-g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DsTtYo5S47kwsW063BZ-3nRqS-g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DsTtYo5S47kwsW063BZ-3nRqS-g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/j9keCqpTw8o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/8311396710532421602/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/02/off-topic-rogun-roghun-towntajikistan.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/8311396710532421602?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/8311396710532421602?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/j9keCqpTw8o/off-topic-rogun-roghun-towntajikistan.html" title="Off Topic: Rogun (Roghun) town,Tajikistan" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-plhSCB7lJgw/TWfXX3jdPeI/AAAAAAAAASw/GWkYnSBoR34/s72-c/Rogun.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/02/off-topic-rogun-roghun-towntajikistan.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YAQnc5cSp7ImA9WhZQFkk.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-6313787959028613607</id><published>2011-01-26T09:40:00.000-08:00</published><updated>2011-04-24T03:32:23.929-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-24T03:32:23.929-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Performance" /><title>How to use performance counters in sys.dm_os_performance_counters DMV</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;br /&gt;
As you probably already know,&lt;br /&gt;
in DMV called &lt;span style="color: #38761d;"&gt;'sys.dm_os_performance_counters'&lt;/span&gt; you can find&lt;br /&gt;
many performance counters related to the SQL Server.&lt;br /&gt;
You can use them instead of using the counters from Windows&lt;br /&gt;
Performance Monitor application.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_x9JmoydV_WU/TUBbulmymJI/AAAAAAAAASY/pkiqIdfICBM/s1600/Graph.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" s5="true" src="http://4.bp.blogspot.com/_x9JmoydV_WU/TUBbulmymJI/AAAAAAAAASY/pkiqIdfICBM/s400/Graph.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
But there is a catch you should be aware of.&lt;br /&gt;
&lt;br /&gt;
There are 3 types of the counters and&amp;nbsp;a counter`s value&lt;br /&gt;
calculation depends on the type of the counter.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Counters types are:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Value/Base:&lt;/strong&gt; &lt;br /&gt;
In order to get the right value of this kind of counter you have&lt;br /&gt;
to take counter with cntr_type = &lt;strong&gt;537003264&lt;/strong&gt; and divide it by&lt;br /&gt;
'base' counter with cntr_type = &lt;strong&gt;1073939712&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;For example:&lt;/u&gt;&lt;br /&gt;
("Buffer cache hit ratio" / "Buffer cache hit ratio base") *100&lt;br /&gt;
will give you the 'Buffer cache hit ratio'&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT &lt;span style="color: magenta; font-size: x-small;"&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;object_name&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-size: x-small;"&gt;counter_name&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="color: black; font-size: x-small;"&gt;cntr_value&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: black;"&gt;cntr_type&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: black;"&gt;F&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;ROM&lt;/span&gt; &lt;span style="color: #274e13;"&gt;sys.dm_os_performance_counters&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; (counter_name =&lt;span style="color: red;"&gt; 'Buffer cache hit ratio'&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;OR &lt;/span&gt;counter_name = &lt;span style="color: red;"&gt;'Buffer cache hit ratio base'&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND&lt;/span&gt; object_name&amp;nbsp;like &lt;span style="color: red;"&gt;&amp;nbsp;'%:Buffer Manager%'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_x9JmoydV_WU/TUBVYK2Dx4I/AAAAAAAAASU/v6a0nvKBs9o/s1600/counterresultset.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="56" s5="true" src="http://4.bp.blogspot.com/_x9JmoydV_WU/TUBVYK2Dx4I/AAAAAAAAASU/v6a0nvKBs9o/s400/counterresultset.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Per Second&lt;/strong&gt;: &lt;br /&gt;
These kind of counters&amp;nbsp;store &lt;strong&gt;cumulative&lt;/strong&gt; values, meaning the&lt;br /&gt;
value must be compared at 2 diffrerent times by calculating the&lt;br /&gt;
differences between the values.For instance,get a counter value,&lt;br /&gt;
save it, then get it again after 5 seconds for example and the right&lt;br /&gt;
final counter value will be:&lt;br /&gt;
(@SecondCounterValue-@FirstCounterValue)/5 seconds.&lt;br /&gt;
&lt;br /&gt;
These counters have cntr_type = &lt;strong&gt;272696576&lt;/strong&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; *&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;F&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;ROM&lt;/span&gt; &lt;span style="color: #6aa84f;"&gt;sys.dm_os_performance_counters&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; counter_name = &lt;span style="color: red;"&gt;'SQL Compilations/sec'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;AND&lt;/span&gt; object_name&amp;nbsp;like&lt;span style="color: red;"&gt;&amp;nbsp;'%SQL Statistics%'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Point In Time:&lt;/strong&gt;&lt;br /&gt;
These are point-in-time counters.They hold the value&amp;nbsp;at the&lt;br /&gt;
current point-in-time.These counters have cntr_type = &lt;strong&gt;65792&lt;/strong&gt;.&lt;br /&gt;
&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; *&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;F&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;ROM&lt;/span&gt;&lt;span style="color: #6aa84f;"&gt; sys.dm_os_performance_counters &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; counter_name =&lt;span style="color: red;"&gt; 'User Connections'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: blue;"&gt;AND&lt;/span&gt; object_name Like &lt;span style="color: red;"&gt;'%General Statistics%'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Example for calculating the Buffer cache hit ratio:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; (a.Val*1.0/b.BaseValue)*100.0 &lt;span style="color: blue;"&gt;as&lt;/span&gt; [BufferCacheHitRatio]&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;F&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;ROM&lt;/span&gt; (&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; cntr_value as Val&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;FROM &lt;/span&gt;sys.dm_os_performance_counters &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; counter_name =&lt;span style="color: red;"&gt; 'Buffer cache hit ratio'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND&lt;/span&gt; object_name&amp;nbsp;like &lt;span style="color: red;"&gt;'%Buffer Manager%'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;) &lt;span style="color: blue;"&gt;as&lt;/span&gt; a &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;C&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;ROSS JOIN&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;(&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; cntr_value as BaseValue&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt; sys.dm_os_performance_counters &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; counter_name = &lt;span style="color: red;"&gt;'Buffer cache hit ratio base'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND&lt;/span&gt; object_name&amp;nbsp;like&lt;span style="color: red;"&gt; '%:Buffer Manager%'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: x-small;"&gt;) &lt;span style="color: blue;"&gt;as&lt;/span&gt; b&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
By knowing the types of the counters, you can write a SP&lt;br /&gt;
that will collect for you the performance data of your server.&lt;br /&gt;
&lt;a href="http://sqlfool.com/2009/09/monitoring-process-for-performance-counters/"&gt;Here&lt;/a&gt; is&amp;nbsp;a very good example of such SP.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-6313787959028613607?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gR8v65puvdByyF-b7CkzsNNmKZ4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gR8v65puvdByyF-b7CkzsNNmKZ4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gR8v65puvdByyF-b7CkzsNNmKZ4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gR8v65puvdByyF-b7CkzsNNmKZ4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/slgzVwfR4a8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/6313787959028613607/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2011/01/how-to-use-performance-counters-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/6313787959028613607?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/6313787959028613607?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/slgzVwfR4a8/how-to-use-performance-counters-in.html" title="How to use performance counters in sys.dm_os_performance_counters DMV" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_x9JmoydV_WU/TUBbulmymJI/AAAAAAAAASY/pkiqIdfICBM/s72-c/Graph.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2011/01/how-to-use-performance-counters-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YMQ3syfSp7ImA9WhZQFkk.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-9149912846420253938</id><published>2010-12-17T04:54:00.000-08:00</published><updated>2011-04-24T03:33:02.595-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-24T03:33:02.595-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="TFS" /><title>TFS and SSMS integration</title><content type="html">In my company, we are starting to use TFS as source control&lt;br /&gt;
of DB projects.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_x9JmoydV_WU/TQtc_JyxsfI/AAAAAAAAAR0/Zt0NUKNcDOY/s1600/tfsOverview.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="226" src="http://2.bp.blogspot.com/_x9JmoydV_WU/TQtc_JyxsfI/AAAAAAAAAR0/Zt0NUKNcDOY/s400/tfsOverview.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This is a big change in the work flow and&amp;nbsp;development&amp;nbsp;processes.&lt;br /&gt;
&lt;br /&gt;
Do you know if there an option to use SSMS&lt;br /&gt;
instead of VS. What I mean is to do automatically&lt;br /&gt;
check in and check out in SSMS like you do in VS.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;/span&gt;For example, I want to open VS, go to source control &lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Or go to local solution (after getting latest version),&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Open a stored procedure, it will open it in SSMS,&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Then edit this SP and save it back.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;On editing the SP, I want automatically to do check out.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;Do you use TFS source control on databases?&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;If so, in which way? Editing stored procedures in VS?&lt;/span&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;Note:&lt;/b&gt;&lt;br /&gt;
&lt;span lang="EN-US"&gt;There is &lt;a href="http://www.blogger.com/goog_1209021517"&gt;T&lt;/a&gt;&lt;/span&gt;&lt;a href="http://visualstudiogallery.msdn.microsoft.com/en-us/bce06506-be38-47a1-9f29-d3937d3d88d6"&gt;FS MSSCCI Provider&lt;/a&gt;&amp;nbsp;tool.&lt;br /&gt;
It helps&amp;nbsp;you in situation when&amp;nbsp;you create a project in&lt;br /&gt;
SSMS, add it to the&amp;nbsp;source control, then you can automatically do&lt;br /&gt;
check in and check out directly in the SSMS&amp;nbsp;files that relate to&lt;br /&gt;
the project you created.&lt;br /&gt;
&lt;br /&gt;
What I want, is to create a database project in the VS database&lt;br /&gt;
edition,&amp;nbsp;add it to the source control and then use SSMS instead&lt;br /&gt;
of Visual Studio.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-9149912846420253938?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GgN32eEIujIxuplaXjKQNqYraco/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GgN32eEIujIxuplaXjKQNqYraco/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GgN32eEIujIxuplaXjKQNqYraco/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GgN32eEIujIxuplaXjKQNqYraco/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/0InVwSxf9as" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/9149912846420253938/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2010/12/tfs-and-ssms-integration.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/9149912846420253938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/9149912846420253938?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/0InVwSxf9as/tfs-and-ssms-integration.html" title="TFS and SSMS integration" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_x9JmoydV_WU/TQtc_JyxsfI/AAAAAAAAAR0/Zt0NUKNcDOY/s72-c/tfsOverview.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2010/12/tfs-and-ssms-integration.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UHSHs_cSp7ImA9WhZQFkk.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-3402490747897170990</id><published>2010-12-04T04:01:00.000-08:00</published><updated>2011-04-24T03:33:59.549-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-24T03:33:59.549-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><title>How to drop extended properties of all columns in a table</title><content type="html">&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_x9JmoydV_WU/TPos4IUiXxI/AAAAAAAAARw/flXEth0-uFY/s1600/Infor.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/_x9JmoydV_WU/TPos4IUiXxI/AAAAAAAAARw/flXEth0-uFY/s1600/Infor.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;When &lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, serif; font-size: 12pt; line-height: 115%;"&gt;synchronizing &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, serif; font-size: 12pt; line-height: 115%;"&gt;&lt;/span&gt;database schema&lt;br /&gt;
between DBs, you may &lt;br /&gt;
also need to &lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;, serif; font-size: 12pt; line-height: 115%;"&gt;synchronize &lt;/span&gt;the&lt;br /&gt;
&lt;a href="http://msdn.microsoft.com/en-us/library/ms190243.aspx"&gt;&amp;nbsp;extended properties&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dropping extended properties of all&amp;nbsp;columns in&lt;br /&gt;
a table&amp;nbsp;one by one is a lot of work.&lt;br /&gt;
&lt;br /&gt;
Therefore you can use the script below that will create&lt;br /&gt;
drop statements of extended properties for all columns&lt;br /&gt;
in defined table.All you have to do is to execute&lt;br /&gt;
the result set you got from this script.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue; font-size: xx-small;"&gt;SET NOCOUNT ON&lt;/span&gt;&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;&lt;span style="color: red;"&gt; 'EXEC sp_dropextendedproperty &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: red;"&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @name = '''&lt;/span&gt; + Extp.name +&lt;span style="color: red;"&gt; ''' &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;,@level0type = ''schema'' &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;,@level0name = '&lt;/span&gt; + &lt;span style="color: magenta;"&gt;OBJECT_SCHEMA_NAME&lt;/span&gt;(Extp.major_id) + '&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,@level1type = ''table''&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: red;"&gt;&amp;nbsp;,@level1name = '''&lt;/span&gt; + &lt;span style="color: magenta;"&gt;OBJECT_NAME&lt;/span&gt;(Extp.major_id) + '''&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; ,@level2type = ''column''&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ,@level2name = '''&lt;/span&gt; + Col.name + '''&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: red;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GO'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;FROM&lt;/span&gt; &lt;span style="color: #38761d;"&gt;sys.columns&lt;/span&gt; AS Col&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: blue;"&gt;LEFT JOIN&lt;/span&gt; &lt;span style="color: #38761d;"&gt;sys.extended_properties&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; Extp &lt;span style="color: blue;"&gt;ON&lt;/span&gt; Col.object_id = Extp.major_id&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AND Col.column_id = Extp.minor_id&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&lt;span style="color: blue;"&gt;WHERE&lt;/span&gt; Extp.class_desc = &lt;span style="color: red;"&gt;'OBJECT_OR_COLUMN'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-size: xx-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;span style="color: blue;"&gt;AND&lt;/span&gt; &lt;span style="color: magenta;"&gt;OBJECT_NAME&lt;/span&gt;(Col.object_id)=&lt;span style="color: red;"&gt;'YourTableName'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: red; font-size: xx-small;"&gt;&lt;span style="color: black; font-size: small;"&gt;Before execute this script in SSMS,&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: red; font-size: xx-small;"&gt;&lt;span style="color: black; font-size: small;"&gt;make sure you switched to 'Results to Text'&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_x9JmoydV_WU/TPom19eBfmI/AAAAAAAAARo/QYMTGR9ct6k/s1600/resultsTotext.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" ox="true" src="http://4.bp.blogspot.com/_x9JmoydV_WU/TPom19eBfmI/AAAAAAAAARo/QYMTGR9ct6k/s1600/resultsTotext.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: black;"&gt;&lt;strong&gt;Note&lt;/strong&gt;: In case you copied&amp;nbsp; the script above and &lt;/span&gt;&lt;br /&gt;
pasted it in SSMS and the results are cut, change the&lt;br /&gt;
following to 1024, for example.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_x9JmoydV_WU/TPon-BowuVI/AAAAAAAAARs/porLbIMMZt4/s1600/resultsTotext2.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="261" ox="true" src="http://4.bp.blogspot.com/_x9JmoydV_WU/TPon-BowuVI/AAAAAAAAARs/porLbIMMZt4/s400/resultsTotext2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Thanks for reading.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-3402490747897170990?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/TG0daye6gGxBffnZ-emcKTsjzIg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TG0daye6gGxBffnZ-emcKTsjzIg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/TG0daye6gGxBffnZ-emcKTsjzIg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/TG0daye6gGxBffnZ-emcKTsjzIg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/rAqJ54wND1s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/3402490747897170990/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2010/12/how-to-drop-extended-properties-of-all.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/3402490747897170990?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/3402490747897170990?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/rAqJ54wND1s/how-to-drop-extended-properties-of-all.html" title="How to drop extended properties of all columns in a table" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_x9JmoydV_WU/TPos4IUiXxI/AAAAAAAAARw/flXEth0-uFY/s72-c/Infor.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2010/12/how-to-drop-extended-properties-of-all.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QFR38zfip7ImA9WhZQFkk.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-4847263437285370305</id><published>2010-11-07T09:49:00.000-08:00</published><updated>2011-04-24T03:35:16.186-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-24T03:35:16.186-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Interview Questions" /><title>So, you call yourself a DBA ..., Let`s see</title><content type="html">I got an opportunity to do job interviews when&lt;br /&gt;
we were looking for &lt;b&gt;development &lt;/b&gt;DBA.&lt;br /&gt;
&lt;br /&gt;
Honestly, I was in shock from some candidates.&lt;br /&gt;
We got many CVs where people wrote that&lt;br /&gt;
they have 5-6 and more years of 'hands on'&amp;nbsp;experience.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_x9JmoydV_WU/TNbmCwbxI4I/AAAAAAAAARg/JoL1gqomCLk/s1600/main.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="156" px="true" src="http://4.bp.blogspot.com/_x9JmoydV_WU/TNbmCwbxI4I/AAAAAAAAARg/JoL1gqomCLk/s200/main.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
Nice, I said,&lt;br /&gt;
there will be no&lt;br /&gt;
problem to find&lt;br /&gt;
a good DBA.&lt;br /&gt;
BUT, &lt;br /&gt;
I was wrong !!!!!!!!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
People calling&amp;nbsp;themselves&amp;nbsp;a DBA with many years&lt;br /&gt;
of experience did not answer very primitive&lt;br /&gt;
questions related to the SQL Server.&lt;br /&gt;
&lt;br /&gt;
Here some examples:&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Question&lt;/strong&gt;:&lt;br /&gt;
What is the difference between @@identity and scope_identity()?&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Answers we got:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
- @@identity returns the process id of your connection.&lt;br /&gt;
- @@identity is a constant and you can use it later in the code.&lt;br /&gt;
- @@identity is a global variable and scope_identity() is a func.&lt;br /&gt;
- "I don`t know, but I can search for it in the Google" (cool answer)&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Question:&lt;/strong&gt;What is the difference between varchar and nvarchar?&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Answers we got:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
- varchar can hold only letters&amp;nbsp;and nvarchar can hold letters+numbers&lt;br /&gt;
- varchar is a fixed set of characters per column and nvarchar is&lt;br /&gt;
&amp;nbsp;&amp;nbsp; 'flexible' to use, as much characters as needed per row.&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
Question:&lt;/strong&gt;&lt;br /&gt;
How SQL Server stores its indexes?&lt;br /&gt;
What B stands for in the 'B-Tree'?&lt;br /&gt;
&lt;strong&gt;&lt;br /&gt;
Answers:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
- B is for 'Group by' clause and A is for Child (WTF !!??)&lt;br /&gt;
- Binary (90 % of candidates answered Binary)&lt;br /&gt;
&lt;strong&gt;Question:&lt;/strong&gt;&lt;br /&gt;
&lt;div style="margin: 0px;"&gt;How to fix index fragmentation?&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;strong&gt;Answer:&lt;/strong&gt;&lt;/div&gt;&lt;div style="margin: 0px;"&gt;You update the statistics.&lt;/div&gt;&lt;div style="margin: 0px;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="margin: 0px;"&gt;-----------------------------------------------------------&lt;/div&gt;&lt;br /&gt;
I interviewed a DBA with 10 years of expirence and he:&lt;br /&gt;
&lt;br /&gt;
Did not know what&amp;nbsp;the difference between Identiy and ScopeIdentiy is.&lt;br /&gt;
Did not know that varchar(max) hold data in row until 8k.&lt;br /&gt;
Did not know what&amp;nbsp;the OUTPUT clause&amp;nbsp;in sql 2005 is.&lt;br /&gt;
------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Come on , people !&lt;br /&gt;
How dare you lie in your CV and come to job interview when&lt;br /&gt;
you know you will be tested.&lt;br /&gt;
I really do not get it.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;I want to emphasize, these are not the only questions&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;that&amp;nbsp;&lt;/strong&gt;&lt;strong&gt;were asked. This post is not about which questions&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;to ask &lt;/strong&gt;&lt;strong&gt;or how to do the interview.&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;It is just an example of answers.&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-4847263437285370305?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Xi90uWK09XLUNpRYXtUyOT2DBh0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xi90uWK09XLUNpRYXtUyOT2DBh0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Xi90uWK09XLUNpRYXtUyOT2DBh0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Xi90uWK09XLUNpRYXtUyOT2DBh0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/Z5QSmMMvgq8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/4847263437285370305/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2010/11/so-you-call-yourself-dba-lets-see.html#comment-form" title="26 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/4847263437285370305?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/4847263437285370305?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/Z5QSmMMvgq8/so-you-call-yourself-dba-lets-see.html" title="So, you call yourself a DBA ..., Let`s see" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_x9JmoydV_WU/TNbmCwbxI4I/AAAAAAAAARg/JoL1gqomCLk/s72-c/main.jpg" height="72" width="72" /><thr:total>26</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2010/11/so-you-call-yourself-dba-lets-see.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUEHSX87fyp7ImA9Wx9VEUk.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-4113593717300876345</id><published>2010-10-22T08:35:00.000-07:00</published><updated>2011-01-27T07:53:58.107-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-27T07:53:58.107-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><title>Report progress from a batch/script/stored procedure</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;There are situations when you have to update/delete&lt;br /&gt;
high volume of data in a table(s).For example, moving&lt;br /&gt;
data to another database (archiving data).&lt;br /&gt;
&lt;br /&gt;
Probably you will do it by chunks, by using some loop&lt;br /&gt;
in order not to hurt the system(in our case production).&lt;br /&gt;
&lt;br /&gt;
In such cases it will helpful to see if you batch/SP did not&lt;br /&gt;
stuck, like you see % of completeness&amp;nbsp;when you do backup.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_x9JmoydV_WU/TMGutGyjzPI/AAAAAAAAARc/ztDPQoYb3Ok/s1600/progress.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_x9JmoydV_WU/TMGutGyjzPI/AAAAAAAAARc/ztDPQoYb3Ok/s1600/progress.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can use PRINT to report progress, but the PRINT&lt;br /&gt;
not sends the message immediately to the client.&lt;br /&gt;
Anything sent to PRINT will be buffered, and not released&lt;br /&gt;
until the buffer is full, or the query completes.&lt;br /&gt;
This buffer is around 8KB in size.&lt;br /&gt;
&lt;br /&gt;
We will use &lt;span class="Apple-style-span" style="color: blue;"&gt;RAISERROR &lt;/span&gt;with severity 10 and &lt;span class="Apple-style-span" style="color: blue;"&gt;NOWAIT&lt;/span&gt;&lt;br /&gt;
option.If the severity from 0 to 10, the SQL Server do&lt;br /&gt;
not raise an error, it returns a plan message.&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;RAISERROR&lt;/span&gt;('&lt;span class="Apple-style-span" style="color: red;"&gt;ProgressMessage&lt;/span&gt;',10,25) &lt;span class="Apple-style-span" style="color: blue;"&gt;WITH NOWAIT&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Let`s take a simple example where we want to see how many&lt;br /&gt;
rows were affected (it can be counter of more than one&lt;br /&gt;
operation) in each iteration:&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;DECLARE &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;@RowsUpdated &lt;span class="Apple-style-span" style="color: blue;"&gt;int&lt;/span&gt;,&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;@ProgressMessage &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;varchar&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(50)&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;SET &lt;/span&gt;@RowsUpdated = 1&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;SET &lt;/span&gt;@ProgressMessage=''&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;WHILE &lt;/span&gt;@RowsUpdated&amp;gt;0&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;BEGIN&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;'you DML statement(s)'&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span" style="color: blue;"&gt;SET &lt;/span&gt;@RowsUpdated = &lt;span class="Apple-style-span" style="color: magenta;"&gt;@@ROWCOUNT&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;SET &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;@ProgressMessage= &lt;/span&gt;&lt;span class="Apple-style-span" style="color: purple;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;CAST&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;(@RowsUpdated as &lt;/span&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;VARCHAR&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;(50))&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span class="Apple-style-span" style="color: blue;"&gt;RAISERROR&lt;/span&gt;(@ProgressMessage,10,25) &lt;span class="Apple-style-span" style="color: blue;"&gt;WITH NOWAIT&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;Thanks for reading&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-4113593717300876345?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/-3MLuwIh--scAYdIiKHBmmJ5tgA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-3MLuwIh--scAYdIiKHBmmJ5tgA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/-3MLuwIh--scAYdIiKHBmmJ5tgA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/-3MLuwIh--scAYdIiKHBmmJ5tgA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/UDlJZ4I3pO0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/4113593717300876345/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2010/10/report-progress-from-batchscriptstored.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/4113593717300876345?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/4113593717300876345?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/UDlJZ4I3pO0/report-progress-from-batchscriptstored.html" title="Report progress from a batch/script/stored procedure" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_x9JmoydV_WU/TMGutGyjzPI/AAAAAAAAARc/ztDPQoYb3Ok/s72-c/progress.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2010/10/report-progress-from-batchscriptstored.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMGRnc_eip7ImA9WhRWEks.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-6086761355876522142</id><published>2010-09-22T07:47:00.000-07:00</published><updated>2011-12-30T09:50:27.942-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-30T09:50:27.942-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Performance" /><title>How to troubleshoot slow running query</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_x9JmoydV_WU/TJn7zK90-WI/AAAAAAAAAQ4/T_vcOH8_HNc/s1600/Slow.jpg" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="133" qx="true" src="http://4.bp.blogspot.com/_x9JmoydV_WU/TJn7zK90-WI/AAAAAAAAAQ4/T_vcOH8_HNc/s200/Slow.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;
So you have a query or&lt;br /&gt;
stored procedure that&lt;br /&gt;
running slow.What are&lt;br /&gt;
the main steps to identify&lt;br /&gt;
the reason(s) and how&lt;br /&gt;
to change the query?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
I assume you already&amp;nbsp;have the query and I am not going to&lt;br /&gt;
talk about how to find the slow queries/stored procedures.&lt;br /&gt;
&lt;br /&gt;
I am not going to talk about the CPU/Network/Memory&lt;br /&gt;
bottleneck and other fancy words that generally will not help&lt;br /&gt;
us with performance of single query or stored procedure.&lt;br /&gt;
&lt;br /&gt;
What I want is to list the main steps I and my DBA team do&lt;br /&gt;
when we have a slow running query/SP.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;1) Examine the Execution Plan:&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Take a look at the query execution plan,&lt;br /&gt;
&lt;br /&gt;
a. Search for Table Scan / Index Scan, these operators&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; significant if you access big tables.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Check if proper indexes already exist on the tables,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; find out why SQL Server chose not to use them,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; for example, &lt;a href="http://madebysql.blogspot.com/2010/03/local-variables-and-execution-plan.html"&gt;usage of local variables&lt;/a&gt;, &lt;a href="http://madebysql.blogspot.com/2009/07/execution-time-difference-between-sp.html"&gt;parameters sniffing&lt;/a&gt;,&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; outdated statistics,heavily fragmented indexes can cause&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp;to Table/Index scan.&lt;br /&gt;
&lt;br /&gt;
b. Check if you have&amp;nbsp;any key lookups/bookmark lookups.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; In case of large table / big result set this one can lead to&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;performance degradation. See if you can create covering index&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; or include the needed columns in&amp;nbsp;a non clustered index.&lt;br /&gt;
&lt;br /&gt;
c. See if you have Spool operators in the execution plan.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; These operators are Blocking operators,meaning they need to &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; get all the data at once and not row by row. An excellent&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; deep dive into Spool operators you can find &lt;a href="http://www.simple-talk.com/sql/learn-sql-server/operator-of-the-week---spools,-eager-spool/"&gt;here&lt;/a&gt;.&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Very briefly: A spool reads the data and saves it on TempDB.&lt;br /&gt;
&amp;nbsp; &amp;nbsp; This process is used whenever the Optimizer knows that the&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; density of the column is high and the intermediate result is very&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; complex to calculate.&lt;br /&gt;
&lt;br /&gt;
d. If you see that there is index seek operator, check if the SQL&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Server&amp;nbsp;chose the right index. There are situations when&amp;nbsp;Query&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; Optimizer&amp;nbsp;can choose "wrong" index, this can happened when&lt;br /&gt;
&amp;nbsp; &amp;nbsp; you have more than one index in the table that SQL Server&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; can use to fetch the data.In such cases, check your query filters&lt;br /&gt;
&amp;nbsp; &amp;nbsp; in the Where clause.&lt;br /&gt;
&lt;br /&gt;
e. Compare the Actual number of rows versus Estimated.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/_x9JmoydV_WU/TKmuamxZ94I/AAAAAAAAARY/agXku6zmbc0/s1600/Esti.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="252" px="true" src="http://2.bp.blogspot.com/_x9JmoydV_WU/TKmuamxZ94I/AAAAAAAAARY/agXku6zmbc0/s320/Esti.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you see big difference in these numbers, this is a sign&lt;br /&gt;
that you use wrong generated execution plan.&lt;br /&gt;
Check statistics, consider to use Option(recompile).&lt;br /&gt;
&lt;br /&gt;
Check in the Execution Plan in XML view what &lt;br /&gt;
were the values of input paramters when the SP was&lt;br /&gt;
compiled. This can help you to undestand why &lt;br /&gt;
SQL Server built the execution plan you see.&lt;br /&gt;
&lt;br /&gt;
f) For every operator in&amp;nbsp;every query, you will see&lt;br /&gt;
&amp;nbsp;&amp;nbsp; the operator`s cost. By checking this cost, you&lt;br /&gt;
&amp;nbsp;&amp;nbsp; can easily the most expensive operators in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/_x9JmoydV_WU/TKMOBRzv7fI/AAAAAAAAARU/CxryoA6fIJ8/s1600/Cost.JPG" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="62" px="true" src="http://4.bp.blogspot.com/_x9JmoydV_WU/TKMOBRzv7fI/AAAAAAAAARU/CxryoA6fIJ8/s320/Cost.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&amp;nbsp;&amp;nbsp;&lt;u&gt; &lt;/u&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;br /&gt;One thing to note here:&lt;/u&gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp; Even in the actual execution plan, you can only see&lt;br /&gt;
&amp;nbsp; &amp;nbsp;the estimated costs, and the percentage values represent&lt;br /&gt;
&amp;nbsp; &amp;nbsp;the estimated relative costs.&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Therefore, If there is a big difference between the&lt;br /&gt;
&amp;nbsp;&amp;nbsp; estimated and the actual number of rows, there is a good&lt;br /&gt;
&amp;nbsp;&amp;nbsp; chance that the relative costs are misleading.&lt;br /&gt;
&lt;br /&gt;
2) &lt;strong&gt;Analyze the output of STATISTICS IO&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
By setting the &lt;a href="http://msdn.microsoft.com/en-us/library/ms184361.aspx"&gt;SET STATISTICS IO&amp;nbsp;ON,&lt;/a&gt; &lt;br /&gt;
SQL Server will display information regarding the amount of disk&lt;br /&gt;
activity generated by Transact-SQL statements:&lt;br /&gt;
&lt;br /&gt;
&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;Table 'ProductCostHistory'. Scan count 1, &lt;strong&gt;logical reads&lt;/strong&gt; 5, physical &lt;/span&gt;&lt;/em&gt;&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, &lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;em&gt;&lt;span style="font-size: xx-small;"&gt;lob read-ahead reads 0.&lt;/span&gt;&lt;/em&gt;&lt;br /&gt;
&lt;br /&gt;
In the output you need to check the following:&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Scan count&lt;/strong&gt; - Number of index or table scans(access) performed.&lt;br /&gt;
&lt;strong&gt;Logical reads&lt;/strong&gt; - Number of pages read from the data cache.&lt;br /&gt;
&lt;br /&gt;
These counters are very handy when you compare the changes&lt;br /&gt;
you made in the query.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Almost in all cases the reason for slowness of a query is the high&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;and not really needed amount&amp;nbsp; of 'pages read'/ Logical reads.&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;You need to check if the amount of 'page reads' is really what you&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;expect to be, if not , here is your main problem.&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
By looking at these counters you can see how many times SQL&lt;br /&gt;
Server accessed&amp;nbsp; a table, how many pages were read.&lt;br /&gt;
Search for high number of Logical reads and on each change of&lt;br /&gt;
the query compare these values.&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;3) Try to rewrite the query / stored procedure&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
Check if you use DISTINCT / UNION,&lt;br /&gt;
not SARGable expressions (like !=&amp;nbsp;),functions on columns&lt;br /&gt;
in the where clause, scalar functions,wrong Index/Join hints.&lt;br /&gt;
Use JOINs rather than subqueries.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-6086761355876522142?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/13O6hYu0qrGahduKP--ITQFJwio/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/13O6hYu0qrGahduKP--ITQFJwio/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/13O6hYu0qrGahduKP--ITQFJwio/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/13O6hYu0qrGahduKP--ITQFJwio/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/-alYssiFf8Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/6086761355876522142/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2010/09/how-to-troubleshoot-slow-running-query.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/6086761355876522142?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/6086761355876522142?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/-alYssiFf8Q/how-to-troubleshoot-slow-running-query.html" title="How to troubleshoot slow running query" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_x9JmoydV_WU/TJn7zK90-WI/AAAAAAAAAQ4/T_vcOH8_HNc/s72-c/Slow.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2010/09/how-to-troubleshoot-slow-running-query.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MCRns5fCp7ImA9WhZQFkk.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-8346806777551203022</id><published>2010-09-10T13:56:00.000-07:00</published><updated>2011-04-24T03:37:47.524-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-24T03:37:47.524-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQLCMD" /><title>How SQLCMD in SSMS can help you?</title><content type="html">SQLCMD mode allows to you combine Windows System&lt;br /&gt;
commands and T-SQL commands in the same batch.&lt;br /&gt;
&lt;br /&gt;
First&amp;nbsp;of all to enable it, click on SQLCMD icon in the toolbar:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_x9JmoydV_WU/TIqNc-Ru5JI/AAAAAAAAAQo/ljZ1g0aheRI/s1600/SQLCMDIcon.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="52" src="http://2.bp.blogspot.com/_x9JmoydV_WU/TIqNc-Ru5JI/AAAAAAAAAQo/ljZ1g0aheRI/s400/SQLCMDIcon.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OK, now let`s see what it can do for us:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;1) You can easily save a query`s result set to a file:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;:out C:\Temp\outputfile.txt&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;i&gt;SET NOCOUNT ON&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;i&gt;SELECT * FROM&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;i&gt; dbo.SomeTable&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;i&gt;GO&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;i&gt;Pay attention, the file will be saved on your local drive&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;i&gt;and not on the SQL Server machine (Of course if you&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;i&gt;execute this not on SQL Server box)&lt;/i&gt;&lt;/span&gt;&lt;br /&gt;
&lt;b&gt;Tip&lt;/b&gt;: the&amp;nbsp;column&amp;nbsp;delimiter can be defined in Tools-&amp;gt;Options:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_x9JmoydV_WU/TIqQfdx4iGI/AAAAAAAAAQw/KOp4CKOVs2Y/s1600/ColumnDelimiter.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="237" src="http://2.bp.blogspot.com/_x9JmoydV_WU/TIqQfdx4iGI/AAAAAAAAAQw/KOp4CKOVs2Y/s400/ColumnDelimiter.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;2) You can execute script file(s) directly from the SSMS:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;:r c:\scriptFile.sql&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;3) You can execute a DOS commands directly from the SSMS:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;!!dir c:\Temp&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;!!type &amp;nbsp;c:\temp\DemoFile.txt&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;!!ipconfig&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;
&lt;/i&gt;and even execute a program:&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;
&lt;/span&gt;!!notepad&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;4) You can change SQL connection:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/b&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;
&lt;/span&gt;:connect ProdServer&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;5) You can set variables and use them later&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="background-color: white;"&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
This is very cool, it allows us to create complex dynamic scripts:&lt;br /&gt;
&lt;br /&gt;
Here simple example:&lt;i&gt;&lt;i&gt;&lt;/i&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;i&gt;&lt;/i&gt;&lt;/i&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;
&lt;div style="display: inline !important;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;&lt;br /&gt;
&lt;/span&gt;:setvar DBname Master&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div style="display: inline !important;"&gt;&lt;span class="Apple-style-span" style="background-color: #cccccc;"&gt;:setvar TableName sys.tables&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;i&gt;&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;USE &lt;/span&gt;$(DBname)&lt;br /&gt;
GO&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;SELECT &lt;/span&gt;*&lt;br /&gt;
&lt;span class="Apple-style-span" style="color: blue;"&gt;FROM &lt;/span&gt;$(TableName)&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-style: normal;"&gt;Go ahead and try it !!!&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-style: normal;"&gt;What I gave as examples is just to demonstrate and introduce&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-style: normal;"&gt;to you the tool. You can get much more&amp;nbsp;interesting&amp;nbsp;examples&lt;/span&gt;&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-style: normal;"&gt;and usages &lt;a href="http://www.simple-talk.com/content/article.aspx?article=463#forum"&gt;here &lt;/a&gt;or &lt;a href="http://sqlmusings.wordpress.com/2008/08/06/sqlcmd-examples/"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-8346806777551203022?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_5dtpDpnpP1NLDh3RHYdOuMe8A4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_5dtpDpnpP1NLDh3RHYdOuMe8A4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_5dtpDpnpP1NLDh3RHYdOuMe8A4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_5dtpDpnpP1NLDh3RHYdOuMe8A4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/4NgnwAP5QSM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/8346806777551203022/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2010/09/how-sqlcmd-in-ssms-can-help-you.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/8346806777551203022?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/8346806777551203022?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/4NgnwAP5QSM/how-sqlcmd-in-ssms-can-help-you.html" title="How SQLCMD in SSMS can help you?" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_x9JmoydV_WU/TIqNc-Ru5JI/AAAAAAAAAQo/ljZ1g0aheRI/s72-c/SQLCMDIcon.JPG" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2010/09/how-sqlcmd-in-ssms-can-help-you.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0MBRn87eip7ImA9Wx5QFk0.&quot;"><id>tag:blogger.com,1999:blog-5812558148803847895.post-2195124783695098593</id><published>2010-09-04T07:10:00.000-07:00</published><updated>2010-09-04T07:10:57.102-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-04T07:10:57.102-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="T-SQL" /><title>SELECT...INTO is faster than CREATE &amp; INSERT</title><content type="html">&lt;a href="http://2.bp.blogspot.com/_x9JmoydV_WU/TIJSX1pWnJI/AAAAAAAAAQY/vu37ObD8iyQ/s1600/dt-improved-performance+(1).jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="133" src="http://2.bp.blogspot.com/_x9JmoydV_WU/TIJSX1pWnJI/AAAAAAAAAQY/vu37ObD8iyQ/s200/dt-improved-performance+(1).jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;
Do you use SELECT..INTO&lt;br /&gt;
in your code / SPs?&lt;br /&gt;
Or you&amp;nbsp;prefer to create&lt;br /&gt;
a new table&amp;nbsp;and then use&lt;br /&gt;
INSERT INTO?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Anyway, you should be aware of the following:&lt;br /&gt;
&lt;br /&gt;
The SELECT ... INTO is minimally logged operation in case&lt;br /&gt;
your database under the simple recovery or bulk-logged&lt;br /&gt;
recovery model. See more info &lt;a href="http://msdn.microsoft.com/en-us/library/ms188029.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Therefore,with minimal logging, using the SELECT… INTO&lt;br /&gt;
statement&amp;nbsp;can be more efficient than creating a table and then&lt;br /&gt;
populating the table&amp;nbsp;with an INSERT statement.&lt;br /&gt;
&lt;br /&gt;
In most of the cases we use Temp tables when we use&lt;br /&gt;
SELECT ... INTO.&lt;br /&gt;
&lt;br /&gt;
The temp table created in the TEMPDB, right?&lt;br /&gt;
And as you know the recovery mode of the TEMPDB is simple.&lt;br /&gt;
Therefore the SQL Server will use minimal logging for our new table.&lt;br /&gt;
&lt;br /&gt;
I highly&amp;nbsp;recommend&amp;nbsp;to you to read the &lt;a href="http://beyondrelational.com/blogs/chintak/archive/2010/04/17/select-into-is-faster-than-create-amp-insert.aspx"&gt;Chintak`s post about this&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://beyondrelational.com/blogs/chintak/archive/2010/04/17/select-into-is-faster-than-create-amp-insert.aspx"&gt;&lt;/a&gt;&lt;a href="http://beyondrelational.com/blogs/chintak/archive/2010/04/17/select-into-is-faster-than-create-amp-insert.aspx"&gt;subject&lt;/a&gt;.&amp;nbsp;He provides real examples.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5812558148803847895-2195124783695098593?l=madebysql.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/_Op5Qmd1kLRdbap5Ma-xt3lSy8U/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Op5Qmd1kLRdbap5Ma-xt3lSy8U/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/_Op5Qmd1kLRdbap5Ma-xt3lSy8U/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/_Op5Qmd1kLRdbap5Ma-xt3lSy8U/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MadeBySql/~4/sD9Buyi3QDg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://madebysql.blogspot.com/feeds/2195124783695098593/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://madebysql.blogspot.com/2010/09/selectinto-is-faster-than-create-insert.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/2195124783695098593?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5812558148803847895/posts/default/2195124783695098593?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/MadeBySql/~3/sD9Buyi3QDg/selectinto-is-faster-than-create-insert.html" title="SELECT...INTO is faster than CREATE &amp; INSERT" /><author><name>Dan Pretselman</name><uri>http://www.blogger.com/profile/15931530494260744354</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="23" height="32" src="http://1.bp.blogspot.com/_x9JmoydV_WU/SjufE_8scMI/AAAAAAAAAGs/En7x-V9-YuU/S220/DanPretselman.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_x9JmoydV_WU/TIJSX1pWnJI/AAAAAAAAAQY/vu37ObD8iyQ/s72-c/dt-improved-performance+(1).jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://madebysql.blogspot.com/2010/09/selectinto-is-faster-than-create-insert.html</feedburner:origLink></entry></feed>

