<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Sql Stuff</title><link>http://blogs.msdn.com/chadboyd/default.aspx</link><description>Ramblings of all kinds of Sql related tasks - usually related to customer questions, problems, etc. (that's what I do and all)</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Moving Blog...</title><link>http://blogs.msdn.com/chadboyd/archive/2007/10/17/moving-blog.aspx</link><pubDate>Wed, 17 Oct 2007 22:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5500695</guid><dc:creator>boydc7</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/5500695.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=5500695</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=5500695</wfw:comment><description>&lt;P&gt;Due to a few different reasons, I'll be moving my blog from here at MSDN to 2 other locations. Please update your rollers and links, I'm hoping to see everyone at the new locations below!&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.mssqltips.com/blogs/chadboyd"&gt;http://blogs.mssqltips.com/blogs/chadboyd&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.chadhoc.net/"&gt;http://www.chadhoc.net&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;(NOTE: the chadhoc.net isn't up yet - probably be out in a few days...)&lt;/P&gt;
&lt;P&gt;I've moved most of my posts from here to these locations, and will be building on some of the more popular posts (32bit memory management is popular still apparantely, I'll expand on that and 64bit as well, Katmai/2008 will continue to be a popular topic, I'll get back to the SYTYKS posts also, etc.).&lt;/P&gt;
&lt;P&gt;Thanks everyone, hope to see you at the new locations!&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5500695" width="1" height="1"&gt;</description></item><item><title>Non-technical - big news for Chad, he's getting married</title><link>http://blogs.msdn.com/chadboyd/archive/2007/08/21/non-technical-big-news-for-chad-he-s-getting-married.aspx</link><pubDate>Tue, 21 Aug 2007 17:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4496788</guid><dc:creator>boydc7</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/4496788.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=4496788</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=4496788</wfw:comment><description>&lt;P&gt;So, I think most of my close friends have heard by now, but if you are a friend, and you haven't heard, and this is how you're hearing about it, sorry about that - give me a call and I'll make it up to you over dinner and drinks or something :-).&lt;/P&gt;
&lt;P&gt;I'm getting married to (in my opinion) the greatest girl in the world - you can read/see more about it at our little wedding website located here:&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 12pt; FONT-FAMILY: 'Times New Roman','serif'; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;A href="http://www.theknot.com/ourwedding/ChadBoyd&amp;amp;TiranaMcDermott"&gt;http://www.theknot.com/ourwedding/ChadBoyd&amp;amp;TiranaMcDermott&lt;/A&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;There's also a few pics of us out there if you've ever for some reason been curious what I look like (i'm nothing special).&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4496788" width="1" height="1"&gt;</description></item><item><title>sp_who for Sql 2005 (sp_who2k5)</title><link>http://blogs.msdn.com/chadboyd/archive/2007/08/15/sp-who-for-sql-2005-sp-who2k5.aspx</link><pubDate>Wed, 15 Aug 2007 14:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4400839</guid><dc:creator>boydc7</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/4400839.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=4400839</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=4400839</wfw:comment><description>&lt;P&gt;I get many requests from customers for something like sp_who/sp_who2 for Sql 2005 with new columns/features/etc. specific to Sql 2005 (sp_who/sp_who2 are both included in Sql 2005, but they return exactly the same information as they did in Sql 2000). Well, here's one version of it - I've included the code below. You'll find a UDF that can be used to query inline with standard Sql statements (I call it "fn_getProcessData") that includes 3 parameters (@activeOnly, @includeSqlText, @includeQueryPlan) that are probably self-explanatory. In addition, there's a stored procedure I call "sp_who2k5" which basically wraps the "fn_getProcessData" function for querying via stored procedure syntax. Please let me know if you already have any code modules you use to return similar information, I'm curious to know how others are getting the data, what they're returning, etc.&lt;/P&gt;
&lt;P&gt;Enjoy!&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;----------------------------------------------------------------------&lt;BR&gt;------------------ CODE ONLY BELOW ------------------&lt;BR&gt;----------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;use master;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;if object_id('dbo.fn_getProcessData') &amp;gt; 0&lt;BR&gt;&amp;nbsp;drop function dbo.fn_getProcessData;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;create function dbo.fn_getProcessData (&lt;BR&gt;&amp;nbsp;@activeOnly&amp;nbsp;&amp;nbsp;&amp;nbsp;bit = 0,&amp;nbsp;&amp;nbsp;-- If set (1), we return information on active requests only...&lt;BR&gt;&amp;nbsp;@includeSqlText&amp;nbsp;&amp;nbsp;bit = 0,&amp;nbsp;&amp;nbsp;-- If set (1), we return the full sql text for the available sql_handle's...&lt;BR&gt;&amp;nbsp;@includeQueryPlan&amp;nbsp;bit = 0&amp;nbsp;&amp;nbsp;&amp;nbsp;-- If set (1), we return the XML query plan for the available plan handle's...&lt;BR&gt;)&lt;BR&gt;returns @retTable table (&lt;BR&gt;&amp;nbsp;sessionId int,&lt;BR&gt;&amp;nbsp;requestId int,&lt;BR&gt;&amp;nbsp;requestStartTime datetime,&lt;BR&gt;&amp;nbsp;requestStatus nvarchar(60),&lt;BR&gt;&amp;nbsp;requestCommand nvarchar(32),&lt;BR&gt;&amp;nbsp;sqlHandle varbinary(64),&lt;BR&gt;&amp;nbsp;planHandle varbinary(64),&lt;BR&gt;&amp;nbsp;dbName nvarchar(256),&lt;BR&gt;&amp;nbsp;blockingSessionId smallint,&lt;BR&gt;&amp;nbsp;waitType nvarchar(120),&lt;BR&gt;&amp;nbsp;waitTime int,&lt;BR&gt;&amp;nbsp;lastWaitType nvarchar(120),&lt;BR&gt;&amp;nbsp;waitResource nvarchar(512),&lt;BR&gt;&amp;nbsp;openTranCount int,&lt;BR&gt;&amp;nbsp;openResultSetCount int,&lt;BR&gt;&amp;nbsp;percentComplete real,&lt;BR&gt;&amp;nbsp;requestCpuTime int,&lt;BR&gt;&amp;nbsp;requestElapsedTime int,&lt;BR&gt;&amp;nbsp;requestReads bigint,&lt;BR&gt;&amp;nbsp;requestWrites bigint,&lt;BR&gt;&amp;nbsp;requestLogicalReads bigint,&lt;BR&gt;&amp;nbsp;requestRowCount bigint,&lt;BR&gt;&amp;nbsp;requestQueryMemory int,&lt;BR&gt;&amp;nbsp;sessionStatus nvarchar(60),&lt;BR&gt;&amp;nbsp;loginTime datetime,&lt;BR&gt;&amp;nbsp;hostName nvarchar(256),&lt;BR&gt;&amp;nbsp;programName nvarchar(256),&lt;BR&gt;&amp;nbsp;loginName nvarchar(256),&lt;BR&gt;&amp;nbsp;originalLoginName nvarchar(256),&lt;BR&gt;&amp;nbsp;sessionLastRequestStartTime datetime,&lt;BR&gt;&amp;nbsp;sessionLastRequestEndTime datetime,&lt;BR&gt;&amp;nbsp;sessionReads bigint,&lt;BR&gt;&amp;nbsp;sessionWrites bigint,&lt;BR&gt;&amp;nbsp;sessionLogicalReads bigint,&lt;BR&gt;&amp;nbsp;sessionRowCount bigint,&lt;BR&gt;&amp;nbsp;connectTime datetime,&lt;BR&gt;&amp;nbsp;netTransport nvarchar(80),&lt;BR&gt;&amp;nbsp;connectionPacketReads int,&lt;BR&gt;&amp;nbsp;connectionPacketWrites int,&lt;BR&gt;&amp;nbsp;netPacketSize int,&lt;BR&gt;&amp;nbsp;clientNetAddress varchar(48),&lt;BR&gt;&amp;nbsp;connectionMostRecentSqlHandle varbinary(64),&lt;BR&gt;&amp;nbsp;sessionCpuTime int,&lt;BR&gt;&amp;nbsp;sessionMemUsage int,&lt;BR&gt;&amp;nbsp;sessionScheduledTime int,&lt;BR&gt;&amp;nbsp;sessionElapsedTime int,&lt;BR&gt;&amp;nbsp;clientInterface nvarchar(64),&lt;BR&gt;&amp;nbsp;contextInfo varbinary(128),&lt;BR&gt;&amp;nbsp;authScheme nvarchar(80),&lt;BR&gt;&amp;nbsp;connectionLastRead datetime,&lt;BR&gt;&amp;nbsp;connectionLastWrite datetime,&lt;BR&gt;&amp;nbsp;sqlText nvarchar(max),&lt;BR&gt;&amp;nbsp;queryPlan xml&lt;BR&gt;)&lt;BR&gt;as&lt;BR&gt;/*&lt;BR&gt;-- All information for all sessions&lt;BR&gt;select * from master.dbo.fn_getProcessData(default,0,0)&lt;/P&gt;
&lt;P&gt;-- Only data for currently active requests...&lt;BR&gt;select * from master.dbo.fn_getProcessData(1,1,1);&lt;/P&gt;
&lt;P&gt;*/&lt;BR&gt;begin&lt;/P&gt;
&lt;P&gt;if @activeOnly &amp;gt; 0&lt;BR&gt;&amp;nbsp;insert&amp;nbsp;@retTable (sessionId,requestId,requestStartTime,requestStatus,requestCommand,sqlHandle,planHandle,dbName,blockingSessionId,waitType,waitTime,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lastWaitType,waitResource,openTranCount,openResultSetCount,percentComplete,requestCpuTime,requestElapsedTime,requestReads,requestWrites,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;requestLogicalReads,requestRowCount,requestQueryMemory,sessionStatus,loginTime,hostName,programName,loginName,originalLoginName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sessionLastRequestStartTime,sessionLastRequestEndTime,sessionReads,sessionWrites,sessionLogicalReads,sessionRowCount,connectTime,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;netTransport,connectionPacketReads,connectionPacketWrites,netPacketSize,clientNetAddress,connectionMostRecentSqlHandle,sessionCpuTime,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sessionMemUsage,sessionScheduledTime,sessionElapsedTime,clientInterface,contextInfo,authScheme,connectionLastRead,connectionLastWrite)&lt;BR&gt;&amp;nbsp;select&amp;nbsp;coalesce(s.session_id, r.session_id, c.session_id) as sessionId, r.request_id as requestId, r.start_time as requestStartTime, r.status as requestStatus,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.command as requestCommand, r.sql_handle as sqlHandle, r.plan_handle as planHandle, isnull(db_name(r.database_id),'N/A') as dbName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.blocking_session_id as blockingSessionId, r.wait_type as waitType, r.wait_time as waitTime, r.last_wait_type as lastWaitType,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.wait_resource as waitResource,r.open_transaction_count as openTranCount, r.open_resultset_count as openResultSetCount,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.percent_complete as percentComplete, r.cpu_time as requestCpuTime, r.total_elapsed_time as requestElapsedTime,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.reads as requestReads, r.writes as requestWrites, r.logical_reads as requestLogicalReads, r.row_count as requestRowCount,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.granted_query_memory as requestQueryMemory,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.status as sessionStatus, s.login_time as loginTime, s.host_name as hostName, s.program_name as programName, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.login_name as loginName, s.original_login_name as originalLoginName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.last_request_start_time as sessionLastRequestStartTime, s.last_request_end_time as sessionLastRequestEndTime, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.reads as sessionReads, s.writes as sessionWrites, s.logical_reads as sessionLogicalReads, s.row_count as sessionRowCount,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.connect_time as connectTime, c.net_transport as netTransport, c.num_reads as connectionPacketReads, c.num_writes as connectionPacketWrites,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.net_packet_size as netPacketSize, c.client_net_address as clientNetAddress, c.most_recent_sql_handle as connectionMostRecentSqlHandle,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.cpu_time as sessionCpuTime, s.memory_usage as sessionMemUsage, s.total_scheduled_time as sessionScheduledTime, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.total_elapsed_time as sessionElapsedTime, s.client_interface_name as clientInterface, s.context_info as contextInfo,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.auth_scheme as authScheme, c.last_read as connectionLastRead, c.last_write as connectionLastWrite&lt;BR&gt;&amp;nbsp;from&amp;nbsp;sys.dm_exec_sessions s with(nolock)&lt;BR&gt;&amp;nbsp;join&amp;nbsp;sys.dm_exec_connections c with(nolock)&lt;BR&gt;&amp;nbsp;on&amp;nbsp;&amp;nbsp;s.session_id = c.session_id&lt;BR&gt;&amp;nbsp;and&amp;nbsp;&amp;nbsp;c.session_id &amp;gt; 50&lt;BR&gt;&amp;nbsp;join&amp;nbsp;sys.dm_exec_requests r with(nolock)&lt;BR&gt;&amp;nbsp;on&amp;nbsp;&amp;nbsp;s.session_id = r.session_id&lt;BR&gt;&amp;nbsp;and&amp;nbsp;&amp;nbsp;r.session_id &amp;gt; 50&lt;BR&gt;&amp;nbsp;where&amp;nbsp;s.session_id &amp;gt; 50&lt;BR&gt;&amp;nbsp;&lt;BR&gt;else&lt;BR&gt;&amp;nbsp;insert&amp;nbsp;@retTable (sessionId,requestId,requestStartTime,requestStatus,requestCommand,sqlHandle,planHandle,dbName,blockingSessionId,waitType,waitTime,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;lastWaitType,waitResource,openTranCount,openResultSetCount,percentComplete,requestCpuTime,requestElapsedTime,requestReads,requestWrites,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;requestLogicalReads,requestRowCount,requestQueryMemory,sessionStatus,loginTime,hostName,programName,loginName,originalLoginName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sessionLastRequestStartTime,sessionLastRequestEndTime,sessionReads,sessionWrites,sessionLogicalReads,sessionRowCount,connectTime,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;netTransport,connectionPacketReads,connectionPacketWrites,netPacketSize,clientNetAddress,connectionMostRecentSqlHandle,sessionCpuTime,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sessionMemUsage,sessionScheduledTime,sessionElapsedTime,clientInterface,contextInfo,authScheme,connectionLastRead,connectionLastWrite)&lt;BR&gt;&amp;nbsp;select&amp;nbsp;coalesce(s.session_id, r.session_id, c.session_id) as sessionId, r.request_id as requestId, r.start_time as requestStartTime, r.status as requestStatus,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.command as requestCommand, r.sql_handle as sqlHandle, r.plan_handle as planHandle, isnull(db_name(r.database_id),'N/A') as dbName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.blocking_session_id as blockingSessionId, r.wait_type as waitType, r.wait_time as waitTime, r.last_wait_type as lastWaitType,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.wait_resource as waitResource,r.open_transaction_count as openTranCount, r.open_resultset_count as openResultSetCount,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.percent_complete as percentComplete, r.cpu_time as requestCpuTime, r.total_elapsed_time as requestElapsedTime,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.reads as requestReads, r.writes as requestWrites, r.logical_reads as requestLogicalReads, r.row_count as requestRowCount,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;r.granted_query_memory as requestQueryMemory,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.status as sessionStatus, s.login_time as loginTime, s.host_name as hostName, s.program_name as programName, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.login_name as loginName, s.original_login_name as originalLoginName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.last_request_start_time as sessionLastRequestStartTime, s.last_request_end_time as sessionLastRequestEndTime, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.reads as sessionReads, s.writes as sessionWrites, s.logical_reads as sessionLogicalReads, s.row_count as sessionRowCount,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.connect_time as connectTime, c.net_transport as netTransport, c.num_reads as connectionPacketReads, c.num_writes as connectionPacketWrites,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.net_packet_size as netPacketSize, c.client_net_address as clientNetAddress, c.most_recent_sql_handle as connectionMostRecentSqlHandle,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.cpu_time as sessionCpuTime, s.memory_usage as sessionMemUsage, s.total_scheduled_time as sessionScheduledTime, &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.total_elapsed_time as sessionElapsedTime, s.client_interface_name as clientInterface, s.context_info as contextInfo,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.auth_scheme as authScheme, c.last_read as connectionLastRead, c.last_write as connectionLastWrite&lt;BR&gt;&amp;nbsp;from&amp;nbsp;sys.dm_exec_sessions s with(nolock)&lt;BR&gt;&amp;nbsp;left join sys.dm_exec_connections c with(nolock)&lt;BR&gt;&amp;nbsp;on&amp;nbsp;&amp;nbsp;s.session_id = c.session_id&lt;BR&gt;&amp;nbsp;and&amp;nbsp;&amp;nbsp;c.session_id &amp;gt; 50&lt;BR&gt;&amp;nbsp;left join sys.dm_exec_requests r with(nolock)&lt;BR&gt;&amp;nbsp;on&amp;nbsp;&amp;nbsp;s.session_id = r.session_id&lt;BR&gt;&amp;nbsp;and&amp;nbsp;&amp;nbsp;r.session_id &amp;gt; 50&lt;BR&gt;&amp;nbsp;where&amp;nbsp;s.session_id &amp;gt; 50&lt;/P&gt;
&lt;P&gt;if @includeSqlText &amp;gt; 0&lt;BR&gt;&amp;nbsp;update&amp;nbsp;r&lt;BR&gt;&amp;nbsp;set&amp;nbsp;&amp;nbsp;r.sqlText = t.text&lt;BR&gt;&amp;nbsp;from&amp;nbsp;@retTable r&lt;BR&gt;&amp;nbsp;outer apply sys.dm_exec_sql_text(isnull(r.sqlHandle,r.connectionMostRecentSqlHandle)) t&lt;BR&gt;&amp;nbsp;where&amp;nbsp;isnull(r.sqlHandle,r.connectionMostRecentSqlHandle) is not null;&lt;/P&gt;
&lt;P&gt;if @includeQueryPlan &amp;gt; 0&lt;BR&gt;&amp;nbsp;update&amp;nbsp;r&lt;BR&gt;&amp;nbsp;set&amp;nbsp;&amp;nbsp;r.queryPlan = t.query_plan&lt;BR&gt;&amp;nbsp;from&amp;nbsp;@retTable r&lt;BR&gt;&amp;nbsp;outer apply sys.dm_exec_query_plan(r.planHandle) t&lt;BR&gt;&amp;nbsp;where&amp;nbsp;r.planHandle is not null;&lt;/P&gt;
&lt;P&gt;return;&lt;BR&gt;end&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;use master&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;if object_id('dbo.sp_who2k5') &amp;gt; 0&lt;BR&gt;&amp;nbsp;drop procedure dbo.sp_who2k5&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;create procedure dbo.sp_who2k5&lt;BR&gt;&amp;nbsp;@activeOnly&amp;nbsp;&amp;nbsp;&amp;nbsp;bit = null,&amp;nbsp;&amp;nbsp;-- If set (1), we return information on active requests only...&lt;BR&gt;&amp;nbsp;@includeSqlText&amp;nbsp;&amp;nbsp;bit = 0,&amp;nbsp;&amp;nbsp;-- If set (1), we return the full sql text for the available sql_handle's...&lt;BR&gt;&amp;nbsp;@includeQueryPlan&amp;nbsp;bit = 0&amp;nbsp;&amp;nbsp;&amp;nbsp;-- If set (1), we return the XML query plan for the available plan handle's...&lt;BR&gt;as&lt;BR&gt;/*&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;NOTE: This procedure requires the following modules:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;1) master.dbo.fn_getProcessData()&lt;BR&gt;&amp;nbsp;&lt;BR&gt;*/&lt;BR&gt;set nocount on;&lt;/P&gt;
&lt;P&gt;-- Print some usage data for usability if needed...&lt;BR&gt;if @activeOnly is null begin&lt;BR&gt;&amp;nbsp;print 'USAGE: ';&lt;BR&gt;&amp;nbsp;print '&amp;nbsp;&amp;nbsp;&amp;nbsp; exec dbo.sp_who2k5 @activeOnly, @includeSqlText, @includeQueryPlan;';&lt;BR&gt;&amp;nbsp;print '';&lt;BR&gt;&amp;nbsp;print '&amp;nbsp;&amp;nbsp;&amp;nbsp; @activeOnly - If set (1), we return information on active requests only';&lt;BR&gt;&amp;nbsp;print '&amp;nbsp;&amp;nbsp;&amp;nbsp; @includeSqlText - If set (1), we return the full sql text for the available sql_handles';&lt;BR&gt;&amp;nbsp;print '&amp;nbsp;&amp;nbsp;&amp;nbsp; @includeQueryPlan - If set (1), we return the XML query plan for the available plan handles';&lt;BR&gt;&amp;nbsp;print '';&lt;BR&gt;&amp;nbsp;print '&amp;nbsp;&amp;nbsp;&amp;nbsp; Wrapper procedure around the UDF master.dbo.fn_getProcessData() - accepts exact same arguments.';&lt;BR&gt;&amp;nbsp;print '';&lt;BR&gt;end&lt;/P&gt;
&lt;P&gt;-- Format as needed...&lt;BR&gt;select&amp;nbsp;@activeOnly = case when @activeOnly &amp;gt; 0 then @activeOnly else 0 end;&lt;/P&gt;
&lt;P&gt;-- Get the response...&lt;BR&gt;select&amp;nbsp;sessionId,blockingSessionId,requestStatus,dbName,waitType,waitTime,lastWaitType,requestCommand,loginName,originalLoginName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;openTranCount,openResultSetCount,percentComplete,requestCpuTime,requestElapsedTime,requestReads,requestWrites,waitResource,&lt;BR&gt;&amp;nbsp;&amp;nbsp;requestId,requestStartTime,requestLogicalReads,requestRowCount,requestQueryMemory,sessionStatus,loginTime,hostName,programName,&lt;BR&gt;&amp;nbsp;&amp;nbsp;sessionLastRequestStartTime,sessionLastRequestEndTime,sessionReads,sessionWrites,sessionLogicalReads,sessionRowCount,connectTime,&lt;BR&gt;&amp;nbsp;&amp;nbsp;netTransport,connectionPacketReads,connectionPacketWrites,netPacketSize,clientNetAddress,connectionMostRecentSqlHandle,sessionCpuTime,&lt;BR&gt;&amp;nbsp;&amp;nbsp;sessionMemUsage,sessionScheduledTime,sessionElapsedTime,clientInterface,contextInfo,authScheme,connectionLastRead,connectionLastWrite,&lt;BR&gt;&amp;nbsp;&amp;nbsp;planHandle,sqlHandle,queryPlan,sqlText&lt;BR&gt;from&amp;nbsp;master.dbo.fn_getProcessData(@activeOnly, @includeSqlText, @includeQueryPlan);&lt;/P&gt;
&lt;P&gt;GO&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4400839" width="1" height="1"&gt;</description></item><item><title>Katmai (Sql 2008) - Group By Sets</title><link>http://blogs.msdn.com/chadboyd/archive/2007/07/29/katmai-sql-2008-group-by-sets.aspx</link><pubDate>Sun, 29 Jul 2007 17:51:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4120036</guid><dc:creator>boydc7</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/4120036.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=4120036</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=4120036</wfw:comment><description>&lt;P&gt;With Sql 2008 (in the current CTP you have in your hand), thanks to a new extension to the group by clause referred to as 'grouping sets', you now have the ability to use sets of grouping columns in your group by clauses, allowing you to define basically multiple groupings in the same single query - i.e., instead of providing a single group by column-set, you can define multiple 'sets' of grouping columns, and have the resultset include the concatenated results for each set (think of this as effectively the UNION ALL of multiple identical select statements that are grouped by different column sets).&lt;/P&gt;
&lt;P&gt;Some sample code showing some simple usage is here below, enjoy!&lt;/P&gt;
&lt;P&gt;&amp;nbsp; use tempdb;&lt;BR&gt;&amp;nbsp; go&lt;BR&gt;&amp;nbsp; if object_id('dbo.tblGroupTest') &amp;gt; 0&lt;BR&gt;&amp;nbsp; &amp;nbsp;drop table dbo.tblGroupTest;&lt;BR&gt;&amp;nbsp; create table dbo.tblGroupTest (id int, year smallint, quarter smallint, month smallint, amt bigint);&lt;BR&gt;&amp;nbsp; go&lt;BR&gt;&amp;nbsp; -- Fill up some sample yearly, quarterly, monthtly data for 2000 - 2007...&lt;BR&gt;&amp;nbsp; declare @i int&lt;BR&gt;&amp;nbsp; set @i = 2000&lt;BR&gt;&amp;nbsp; while @i &amp;lt;= 2007 begin&lt;BR&gt;&amp;nbsp; &amp;nbsp;insert&amp;nbsp;dbo.tblGroupTest (id, year, quarter, month, amt)&lt;BR&gt;&amp;nbsp; &amp;nbsp;select&amp;nbsp;row_number() over (order by a.object_id), &lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;@i,&lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;ntile(4) over (order by a.object_id),&lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;ntile(12) over (order by a.object_id),&lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;a.object_id&lt;BR&gt;&amp;nbsp; &amp;nbsp;from&amp;nbsp;(&lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;select object_id from sys.columns&lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;union all&lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;select object_id from sys.columns&lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;) a;&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; &amp;nbsp;set @i = @i+1;&lt;BR&gt;&amp;nbsp; end&lt;BR&gt;&amp;nbsp; go&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; -- Report&lt;BR&gt;&amp;nbsp; select&amp;nbsp;year, &lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;case when grouping(quarter) = 1 then '-- TOTAL --' else cast(quarter as varchar(5)) end as quarter, &lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;case when grouping(month) = 1 then '-- TOTAL --' else cast(month as varchar(5)) end as month, &lt;BR&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;sum(amt) as sumAmt, avg(amt) as avgAmt&lt;BR&gt;&amp;nbsp; from&amp;nbsp;dbo.tblGroupTest&lt;BR&gt;&amp;nbsp; group by grouping sets (&lt;BR&gt;&amp;nbsp; &amp;nbsp;(year, quarter, month),&lt;BR&gt;&amp;nbsp; &amp;nbsp;(year, quarter),&lt;BR&gt;&amp;nbsp; &amp;nbsp;(year)&lt;BR&gt;&amp;nbsp; )&lt;BR&gt;&amp;nbsp; order by year, isnull(quarter,10), isnull(month,15);&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4120036" width="1" height="1"&gt;</description></item><item><title>Katmai (Sql 2008) - Data Compression (including Backup Compression)</title><link>http://blogs.msdn.com/chadboyd/archive/2007/07/28/katmai-sql-2008-data-compression-including-backup-compression.aspx</link><pubDate>Sat, 28 Jul 2007 00:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4090437</guid><dc:creator>boydc7</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/4090437.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=4090437</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=4090437</wfw:comment><description>&lt;P&gt;This post will cover an initial overview of the data compression feature that will be included in Sql Server 2008, and I'll also cover briefly some information on the Backup Compression feature as well (note that these are 2 totally separate and distinct features, since they are very different, as you'll hopefully see by the end of this post). This will actually be a fairly lengthy post, but I'd rather it be that way to ensure I cover as much as possible completely. NOTE that this feature is NOT in a CTP yet, so you won't be able to make use of it in the current CTP...&lt;/P&gt;
&lt;P&gt;Reducing the size of a data-footprint can usually be done in a few different ways: 1) limit the amount of data that is stored via archival processes, 2) compressing the actual data. Let's assume that you've either already done as much of #1 as possible, and/or can't do #1, and you're data is still large - you're left with option #2. Compressing the data can also typically come in a few different flavors: 1) compress the data-file on disk using traditional compression algorithms, 2) storing the data more efficiently within the row/page (in this case anyhow). Compressing the data via traditional methods typically requires that you compress "larger" chunks of data in order to perceive a benefit (larger in this case than a typical 8/64k size related to Sql Server storage), and also doesn't provide any in-memory benefit (i.e. the compression is only beneficial on-disk, accessing that data and pulling it into cache requires decompression, and hence the memory footprint required is the same as the data in an uncompressed format). Storing the data more efficiently in-row/page on the other hand provides additional in-memory benefits, since the data is stored in the efficient format in-memory just as on-disk. This is the way that Sql Server 2008 implements data compression (which, by the way, is similar to the way that certain competitor products that shall remain nameless also implement compression).&lt;/P&gt;
&lt;P&gt;Let's start with a couple of simple points:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; - Data compression in Sql 2008 is easily enabled/disabled for a table and/or index (via new options in traditional create/alter table/index DDL)&lt;BR&gt;&amp;nbsp; - Compression can be enabled/disabled for only certain partitions of a table/index&lt;BR&gt;&amp;nbsp; - There are 2 levels of compression that can be enabled, which include 3 key changes in Sql 2008&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - ROW level compression&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This relates to more efficient storage of data in-row for Sql Server. We'll talk about this more below.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - PAGE level compression&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This is a superset of (and implies) row level compression. It also makes use of 2 other new changes in Sql 2008 - "Column prefix compression" and "Page dictionary compression". We'll talk about each of these more below.&lt;/P&gt;
&lt;P&gt;&amp;nbsp; - Enabling compression is performed via rebuilding an index/table - CAN be online&lt;BR&gt;&amp;nbsp; - Can NOT currently work with XML, BLOB, MAX data types&lt;BR&gt;&amp;nbsp; - This will most likely be an Enterprise-only feature (i.e. in the Enterprise/Developer SKUs)&lt;/P&gt;
&lt;P&gt;Ok, so with some of those points out of the way, onward...&lt;/P&gt;
&lt;P&gt;In reality, Sql Server 2005 SP2 included a form of data compression - the vardecimal storage format. I'm not going to discuss the vardecimal storage format here, but you can think of it as extremely similar for decimal data as varchar is compared to char data. However, Sql Server 2008's data compression is vastly different from this (though it still supports/includes the vardecimal format as well) - so different in fact, that if you enable data compression on a given table/index, the underlying row/page format is different - yes, that's right, you heard correctly - if you use compression (ROW or PAGE), the row/page format for Sql 2008 will be DIFFERENT from the existing row/page format (only for the table/index(es) you are using compression for). So, in Sql 2008, there are 2, yes 2, row/page formats for data. You may now be wondering "well, if the row/page format changed, how in the world did you have enough time to re-engineer every component in Sql Server that is aware of the format in such a small amount of time? The answer is that we didn't - the Storage Engine is the ONLY component in Sql 2008 that is aware of the new row/page format. Once data is passed up the food-chain so to speak (i.e. to the Relational Engine for example), the format is converted from the new format to the old format and vice versa (again, this is ONLY if you are using compression for a given table/index/partition). This has some repercussions to be aware of as well - since the data is "uncompressed" when it is passed from the Storage Engine (i.e. out of cache to be consumed), this means that if you bcp out the data, or push the data out to an external consumer in any way, the data will be translated to the original, uncompressed row format. The Storage Engine does encompass many IO bound features however, so much is gained here (backup, dbcc, scans, etc.).&lt;/P&gt;
&lt;P&gt;So you may be wondering why the row/page format had to change - good question. For row-level compression, in the simplest answer it's because the existing row format used for variable-length data didn't scale very well (if you understand how varchar type data is stored compared to fixed-char type data, you know that there is a 2-byte overhead associated with each variable length column for determining the beginning offset in the row for the data (even if there is NO data for the given column), among other considerations for things like NULL values, etc.). Given that we're basically in effect trying to be more efficient about storing data with the compression feature in 2008, using this existing type of row format simply wouldn't cut the mustard for getting the benefits required (though it is very similar to how the vardecimal format is stored in Sql 2005 and 2008 if you're using it and not using the new compression features). For page-level compression (which includes row-level compression), the format will change because we are adding a new structure at the beginning of each page refereed to as the 'CI' structure (CI stands for "compression information") - this structure will be made up of 2 components: 1) the "column prefix" portion, and 2) the "page dictionary" portion - we'll discuss these a bit later.&lt;/P&gt;
&lt;P&gt;Ok, now that all that is out of the way, let's discuss the internals of ROW compression a bit. The basic jist of row-level compression is more efficient storage for all kinds of data (int, float, money, datetime, character (including varchar), etc.) - it works primarily by optimizing the row-level metadata for variable length storage (i.e. compared to the current model for storing variable length data). In Sql 2005 and prior, if you store an INT value of 1, you wind up with 4 bytes of fixed-length storage for a value that takes less than a byte. With variable length data, a varchar column with a value of 'hi' would take 2 bytes for storage + 2 bytes of meta-data overhead (and vardecmial would be the same for decimal values). With Sql 2008 and ROW compression, this meta-data storage is cut from 2 bytes to 4 BITS per value (bits, not bytes), in addition to efficient storage of the actual data on byte-boundaries (for example, to store the value 1 for an int datatype would require a single byte, not 4 bytes - for the value 10,000 in int, this would require 2 bytes). So, the storage for this fixed data now becomes the number of bytes to store the value + 4 bits of meta-data overhead (per value/column). I'm not going to discuss the actual row layout/format for the new structure at the moment, as it is quite complex, but will possibly go into it in a future post - the key thing to understand currently is that actual amounts used for storing ROW compressed data, both fixed and variable length data types (but NOT LOB/XML/MAX data types currently). And yes, there are special considerations for NULL and 0s and zero-length strings to efficiently store this type of data as well.&lt;/P&gt;
&lt;P&gt;How about PAGE compression - as mentioned above, PAGE compression includes ROW compression (so, if you enable PAGE compression, you get ROW compression as well). In addition to the row-compression stuff from above, PAGE compression also uses "column prefix" matching, as well as the concept of a "page dictionary". So, what exactly are each of these concepts you say???? &lt;/P&gt;
&lt;P&gt;Let's start with "column prefix", which, as you may have guessed, has much to do with repeating patterns at the beginning of the values for a given column (which, not coincidentally is quite common for the contents on many pages, especially in the cases of index pages, since a single page most likely contains similar data). Assume you have a column of data on a single page of rows that contain values like 'Chad', 'Chadwick', 'Chadly', 'Chad', 'Chadster', 'Chadwick', and 'Chadly' (values repeated purposely) - as you can tell, there's quite a bit of redundant data 'prefixing' each of the rows in this column on this page, yes? So, what you might end up with in a scenario like this would be a column prefix value of 'Chad' stored in the CI structure, and each column ending up with pointers to that prefix value - resulting in values like this on-disk: '&amp;lt;empty&amp;gt;', '1wick', '1ly', '&amp;lt;empty&amp;gt;', '1ster', '1wick', and '1ly' (NOTE: this isn't necessarily exactly what you'd end up with, it's an example - you may end up with 2 prefix values, 1 for 'Chad' and 1 for 'Chadwick' for example, etc., etc...all depends on the data and what the algorithm decides is best for that page). In this scenario, we've now gone from using something in the lines of 44 bytes of storage to using more like ~25 bytes of storage (4 bytes in the CI structure for Chad, plus the sum of values) plus a little meta-data overhead - an approximately 38% savings of storage space in this case.&lt;/P&gt;
&lt;P&gt;Now let's move on to the "page dictionary" concept - this is basically what it sounds like - a 'dictionary' of repeating column values on the given page is created in the CI structure, and again, pointers to the value in the dictionary are left in the original column value location. The page dictionary is generated on top of "column prefix" values, so you can most definitely end up with values in the dictionary that have pointers to column prefix values (this is by design). So, using the same column value samples as above with the Chad's, after the "column prefix" values are calculated and stored as mentioned above, you'd potentially end up with a page dictionary that contained the values '1ly', and '1wick', then the in-line row-values would ultimately look something like '&amp;lt;empty&amp;gt;', '2', '3', '&amp;lt;empty&amp;gt;', '1ster', '3', and '2'. In this case, we went from something in the lines of our original ~25 bytes of storage to around ~17 bytes of storage - another ~30+% savings.&lt;/P&gt;
&lt;P&gt;First off, notice that in both cases I'm using approximate values - this is because the savings depends on lots of things (including a very complex format), and also on the amount of meta-data that is being stored to track the information. The good news is that we are also providing a few procedures with Sql 2008 that will allow you to estimate the savings you will be able to perceive for a given table/index, which is called "sp_estimate_data_compression_savings", which you'll be able to read extensively about in BOL.&lt;/P&gt;
&lt;P&gt;Now, a couple of things to ensure we're clear on with PAGE level compression:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; - Each page is distinct from all other pages - the CI structure for each page is built on and made up of only values/rows/etc. for that page, independent of other pages&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; - Page dictionary data builds on column prefix data - so, you may have dictionary values that contain column prefix pointers - this is a good thing&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; - Page level CI structures aren't built until a page is full (or pretty near full) - this makes sense in multiple ways if you think about it: 1) since you're using compression to conserve space, and space is allocated to the engine on page level boundaries anyhow, you wouldn't be conserving any space by compressing a 1/2 full page to a 1/4 full page (the db would still have a full page allocated); 2) it would be kind of tough to build the column prefix and page dictionary data without any data to analyze, yes?&lt;/P&gt;
&lt;P&gt;Additionally, ROW and PAGE level compression are 2 different forms of compression that can be enabled/disabled at the table/index/partition level independently from other table/index/partitions - yes, this means that within a single index made up of multiple partitions, you can have some partitions that are ROW compressed, some that are PAGE compressed, and/or some that are not compressed at all, providing you all the power and flexibility to manage your data as you see fit.&lt;/P&gt;
&lt;P&gt;Now for some of the other questions that I'm sure you're curious about:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; 1) How will this impact performance?&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Well, my favorite answer, that depends :-)...it's true though. Obviously, compression of any form (including this implementation) incurs CPU time - that doesn't necessarily mean however that your CPU utilization is guaranteed to go up. Compression in this manner will decrease the following:&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - I/O utilization&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Memory utilization (less # of pages in cache, better memory utilization)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Potentially Page latching (i.e. the less # of pages in cache that exist, less cache that must be scanned, less # of latches to be taken)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; If the benefit from the savings of CPU cost for the above outweighs the upward cost of CPU utilization for "compression", the net effect would be lower CPU utilization - now this would entirely depend on your workload, system, etc. It's entirely possible that you currently have a totally CPU-bound workload due to true CPU-bound reasons, and you'll see increased CPU utilization with no offset (assuming you have no IO for example, or plenty of cache). Tests with your environment and your workload would need to be performed to see what benefit you'd receive. If you're workload is IO bound, or memory bound, then sacrificing a bit of CPU time to increase your overall throughput will be an easy decision. Additionally, the whole idea is to increase throughput, so if your throughput goes up, but your CPU also goes up a few % points, that's generally a win as well.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; 2) How much compression will I see / what will the compression ratio for my data be?&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Again, it depends - which is hopefully somewhat obvious from the discussions above. This answer depends entirely on your data - for ROW level compression, it depends entirely on the size of data, type of data, sparse-ness, etc. of the data. If you have lots of null values, or lots of small values compared to the storage size of the datatype, then you'll see very good compression ratios - if not, you won't see great compression ratios. For PAGE compression, in addition to the same considerations for ROW compression, it will additionally depend on the repetition of data, density/selectivity of data, etc. Again, you'll want to use the "sp_estimate_data_compression_savings" procedure to get an idea of what you might see.&lt;/P&gt;
&lt;P&gt;Finally, no the manageability/supportability side, many tools include enhancements for insight (DBCC PAGE, new perfmon counters "CI Computations Succeeded" and "CI Computations Attempted", page counts in DMVs, etc.).&lt;/P&gt;
&lt;P&gt;Well that covers the data compression component, how about backup compression? Well, this is a much easier story to tell - backup compression takes advantage of your typical standard on-disk compression methods. You most certainly can have a database that contains data compression in tables/index/partitions AND is also compressed via backup compression at backup time. Backup compression is implemented via a new option in the BACKUP syntax, and it is either ON or OFF (much was researched around implementing different levels of backup compression, but if you've ever worked with backup compression software that supports levels of compression, it's usually very easy to find the point at which the trade-off from compression achieved vs. CPU time spent is a no-brainer - this is why it's a simple ON/OFF option at this point). You can also set a new system level sp_configure option to define the default compression value (on/off) that will be the default anytime a BACKUP is taken without specifying the compression option. Backup compression is supported in ALL backup types, and can be levereged with log backups for improving things such as log shipping throughput across a WAN. A few points about backup compression:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; - Backup compression will most likely be an Enterprise-only feature (i.e. in the Enterprise/Developer SKUs)&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; - Regardless of the SKU support, ALL editions will support RESTORING compressed backups&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; - Compression ratios will depend on your data as usual, but we've seen around 5:1 ratios on 'standard' data sets. Again, this will be entirely dependent on your data set - no guarantees with anything here, you'll need to test on your dataset and see what you can see.&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; - Database mirroring has been enhanced to leverage compression algorithms for streaming data to the mirror (big improvements here)&lt;/P&gt;
&lt;P&gt;Ok, so that hopefully covers data compression and backup compression a bit, by all means post with any questions/comments/etc. and I'll be sure to take note.&lt;/P&gt;
&lt;P&gt;Finally, much of the information included herein was relayed to me from Sunil Agarwal (a PM for Sql Server here at Microsoft), so lots of thanks should go to him for the content - I'm sure if there's anything misstated herein, that it was due to my interpretation and not from his information for sure.&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4090437" width="1" height="1"&gt;</description></item><item><title>Katmai (Sql 2008) - The List of New Features</title><link>http://blogs.msdn.com/chadboyd/archive/2007/07/26/katmai-sql-2008-the-list-of-new-features.aspx</link><pubDate>Thu, 26 Jul 2007 19:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4069971</guid><dc:creator>boydc7</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/4069971.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=4069971</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=4069971</wfw:comment><description>&lt;P&gt;So, I've been getting quite a few pings about providing a list of new features to look for in Katmai (Sql 2008) and/or those that I'll be either blogging about and/or presenting on at the DC area groups I mentioned here: &lt;A href="http://blogs.msdn.com/chadboyd/archive/2007/07/18/katmai-sql-server-2008-presentations-in-the-dc-area-novasql-caparea-net-cmap.aspx"&gt;http://blogs.msdn.com/chadboyd/archive/2007/07/18/katmai-sql-server-2008-presentations-in-the-dc-area-novasql-caparea-net-cmap.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Well, I put together a list below, and this isn't even everything (though it's a lot of the major stuff) - I even tried to categorize it (and some things may appear in multiple categories). I'll be blogging/presenting/etc. on many, many of these in the coming months, so stay tuned:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; Security/Auditing&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Transparent Data Encryption (encryption while data is 'still' on disk, transparent to applications)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - External Key Management (Consolidation of key management, integration with external products)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Data Auditing (1st-class 'AUDIT' objects; DDL support; audit objects, principals, data, etc.; support for multiple logging targets)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; Availability/Reliability&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Pluggable CPU support&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Enhanced Database Mirroring (compression of mirror streams, enhanced performance, automatic page-level repair for principal/mirror)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; Performance&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Data compression (easy to enable/disable online, more efficient data storage (this is NOT traditional data compression))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Backup stream compression (server level control or backup statement control, all backup types)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Performance data collection (single, common framework for data collection, reporting, and storage/warehousing)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Improved Plan Guide support (plan freezing, pull plans directly from plan cache, SSMS integration, etc.)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Resource Governor (create pools and groups to govern, define classifications based on built-in functions, segment resource utilization amoung groups)&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; Management&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Policy-based management framework (manage via policies vs. scripts, enterprise-wide support, automated monitoring/enforcement, etc.)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Integrate with Microsoft System Center&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Extended Events (high perf lightweight tracing infrastructure, NOT sql trace, integrated with ETW, unprecidented insight into goings-on)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; Development Enhancements&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Improved datetime datatypes (100th nanosecond precision (7 digits past second), time-zone datetime offset, date only, time only)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - HierarchyID datatype (hierarchical-aware data type, ORDPath values, built-in functions, methods, etc.)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Entity Data Model support (develop 'business entities' vs. tables, model complex relationships, retrieve entities vs. rows/columns)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - LINQ&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Sql Server Change Tracking (Change Data Capture, get 'diff' data changes WITHOUT a comparible value (i.e. datetime, timestamp, etc.))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Table Valued Parameters&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - MERGE statement ('upsert' data, also includes deletion functionality)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Large UDT's (no more 8000 byte limit on CLR-based UDTs, no more 8000 byte limit for UDA's)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Spatial data (GEOMETRY and GEOGRAPHY data types, built-in spatial function support, spatial indexes)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - XML enhancements (support for lax validation, office 12 support, xs:dateTime support, lists/union types, LET FLOWR support, etc.)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Inline initialization and compound assignment&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; Service Broker&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - New UI and Tools for working with (add/drop/edit functionality within SSMS, Diag tools, )&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Conversation Priority (set message ordering, send/receive impact, 1-10 levels)&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; Data Storage&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Data compression (see above)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - FILESTREAM attribute (get the 'best of both' functionality from BLOBs in the DB vs. BLOBs on filesystem, no more "to blob or not to blob")&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Integrated Full Text Search (FTS fully integrated into DB engine, no external storage, no external service, more efficient and reliable costing)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Sparse columns (more efficient storage for 'wide' tables with many columns that repeat and don't contain data)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - New index types (spatial indexes, hierarchical indexes, FILTERED indexes (indexes on filtered values within columns), etc.)&lt;BR&gt;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; Data Warehousing/ETL&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Partitioned Table Parallelism (no more thread limit per partition)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Star Join support (no special syntax, optimizer based, full backward syntax support)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Data compression (see above)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Resource Governor (see above)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Persistent Lookups in SSIS (no more re-querying for lookup operators, cache lookups in multiple ways, persist lookups to disk)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Improved thread scheduling in SSIS (shared thread pool, pipeline parallelism)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Change Data Capture (see above)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - MERGE statement (see above, great uses with slowly changing dimensions)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Scale-out analysis services (read-only storage supports multiple AS servers)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Subspace computations&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - New Tools for Cube design&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Best Practice Design Alerting&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Backup cubes with better scalability&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Data-mining add-ins for Excell&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; Reporting&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - IIS Agnostic Reporting Services Deployment (no IIS required to run RS any longer)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Rich-text support&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Enhanced visualiztion (graphing)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - New Word rendering (render reports to Microsoft Word)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp; Deprecation&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Many 'old' features ARE REMOVED/GONE (those that have been deprecated for some time - 60/65/70 compat modes, nolog / truncateonly syntax, etc.)&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;That's the list I've got for now...I'm sure I missed something or 2, and I'll continue to add to the list if I see something left out. I'm sure there are LOTS of questions around each of these, so I'll be continuing to blog on subsets of the features in-depth over the next few weeks/months. If there are specific questions, by all means post to this blog and/or email me via this blog, and I'll be sure to answer them directly or in a post covering the topic in question. Stay tuned!&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4069971" width="1" height="1"&gt;</description></item><item><title>Katmai - Did you know? Inline variable initialization and Compound assignment</title><link>http://blogs.msdn.com/chadboyd/archive/2007/07/26/katmai-did-you-know-inline-variable-initialization-and-compound-assignment.aspx</link><pubDate>Thu, 26 Jul 2007 01:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4052860</guid><dc:creator>boydc7</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/4052860.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=4052860</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=4052860</wfw:comment><description>&lt;P&gt;In Sql 2008 (Katmai), a couple of the 'smaller' features that are currently in the latest CTP include inline variable initialization and compound assignment (something you App Dev folks have had for years). So, the following types of code now work in Sql 2008:&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&amp;nbsp; declare @d datetime = getdate(),&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @i int = 1,&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @s varchar(100) = 'test';&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; -- Show the values...&lt;BR&gt;&amp;nbsp; select @d, @i, @s&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; -- Increment i, append to s...&lt;BR&gt;&amp;nbsp; select @i += 1, @s += 'ing';&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;nbsp; -- Show the new values...&lt;BR&gt;&amp;nbsp; select @i, @s;&lt;/P&gt;
&lt;P&gt;These operators also work inline with DML statements and columns...for example, a simple UPDATE statement in a table called 'testTable' with a column called 'testColumn' where you wanted to increment the value of testColumn by 1 could be:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; update testTable set testColumn += 1;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;Also would work with other columns...if another column called testColumn2 existed:&lt;/P&gt;
&lt;P&gt;&amp;nbsp; update testTable set testColumn += testColumn2;&lt;BR&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;I'll be posting other tidbits in Sql 2008 ongoing...enjoy!&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4052860" width="1" height="1"&gt;</description></item><item><title>Katmai / Sql Server 2008 Presentations in the DC area (novaSql, caparea.net, CMAP)</title><link>http://blogs.msdn.com/chadboyd/archive/2007/07/18/katmai-sql-server-2008-presentations-in-the-dc-area-novasql-caparea-net-cmap.aspx</link><pubDate>Wed, 18 Jul 2007 12:29:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3937038</guid><dc:creator>boydc7</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/3937038.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=3937038</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=3937038</wfw:comment><description>&lt;P&gt;In August, September, and October I'll be presenting on Sql Server 2008 (Katmai) at a variety of groups in the DC/Baltimore area. We'll be demoing lots of the new functionality with Sql 2008, including but not limited to Change Data Capture, MERGE, Table Valued Parameters, Declarative Management Framework, FILESTREAM, enhancements to Mirroring and Service Broker, etc.&amp;nbsp; I'm hoping to also blog a bit on many of the new and coming changes over the next few months as well in addition to the typical Sql stuff...&lt;/P&gt;
&lt;P&gt;My current known schedule is as follows:&lt;/P&gt;
&lt;P&gt;August 7th, CMAP.NET group (&lt;A href="http://www.cmap-online.org/"&gt;http://www.cmap-online.org&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;August 27th, NovaSql group, my "home" group :-) (&lt;A href="http://www.novasql.com/"&gt;http://www.novasql.com&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;October 23rd, CAPEREA.NET Group (&lt;A href="http://www.caparea.net/"&gt;http://www.caparea.net&lt;/A&gt;)&lt;/P&gt;
&lt;P&gt;Please join us at one of the coming meetings to learn about the next generation of Sql Server!&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3937038" width="1" height="1"&gt;</description></item><item><title>So you think you know SQL...Administration Part I</title><link>http://blogs.msdn.com/chadboyd/archive/2007/07/17/so-you-think-you-know-sql-administration-part-i.aspx</link><pubDate>Tue, 17 Jul 2007 18:23:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:3921084</guid><dc:creator>boydc7</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/3921084.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=3921084</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=3921084</wfw:comment><description>&lt;P&gt;So you think you know SQL...Administration Part I&lt;/P&gt;
&lt;P&gt;The 2nd in the series...this one revolves around Administration and Internals of Sql Server, and is the 1st of 2-4 groups of questions in just Administration and Internals...again, these are seperated into easy, moderate, and difficult groups. As always, if there are any questions/comments/etc., post a comment and we'll discuss it, enjoy!&lt;/P&gt;
&lt;P&gt;For answers to these questions, go here when you're ready to see them: &lt;/P&gt;
&lt;P&gt;Part I: &lt;A href="http://www.mssqltips.com/tip.asp?tip1299" mce_href="http://www.mssqltips.com/tip.asp?tip1299"&gt;http://www.mssqltips.com/tip.asp?tip1299&lt;/A&gt;&lt;BR&gt;Part II: &lt;A href="http://www.mssqltips.com/tip.asp?tip1281" mce_href="http://www.mssqltips.com/tip.asp?tip1281"&gt;http://www.mssqltips.com/tip.asp?tip1281&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Part III: &lt;A href="http://www.mssqltips.com/tip.asp?tip1288"&gt;http://www.mssqltips.com/tip.asp?tip1288&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;--------------------------------------------------------------------------------------------------&lt;BR&gt;EASY&lt;BR&gt;--------------------------------------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;Q: What can you do to guarantee any backup is valid?&lt;/P&gt;
&lt;P&gt;Q: What is the name of the system database that contains all executable system objects (i.e. system stored procedure code, system view definitions, etc.)&lt;/P&gt;
&lt;P&gt;Q: Can you update system tables in Sql Server, and if so, how?&lt;/P&gt;
&lt;P&gt;Q: If a database goes down for whatever reason (assume data file is corrupt for example), and the database cannot be brought back online (i.e. you are in a recovery situation), what must be done first to ensure you can retrieve the latest data modifications (assume FULL recovery model)?&lt;/P&gt;
&lt;P&gt;Q: What are the 3 recovery models SQL Server exposes?&lt;/P&gt;
&lt;P&gt;Q: What 3 basic phases does database recovery go through during recovery, and in what order do they occur?&lt;/P&gt;
&lt;P&gt;Q: Consider a scenario where you take a full backup, then some log backups, then a diff backup, some more log backups, then another diff, then some more log backups, then you crash - if all the diff backups are bad, when is the latest you can restore to?&amp;nbsp; i.e. can you recover the database to the current point in time without using any of the diff backups?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; FOLLOW-UP Q: Assume the same scenario, however instead of taking diff backups, everywhere that the diff backups were taken were instead FULL backups (so you have 3 full backups) - all the full backups are corrupt with the exception of the first full backup - can you recover the database to the current point in time here?&lt;/P&gt;
&lt;P&gt;Q: What options/arguments can be specified in a BACKUP LOG statement to keep inactive log records from being truncated?&lt;/P&gt;
&lt;P&gt;Q: What methods are available for removing fragmentation (any kind) on an index in Sql Server?&lt;/P&gt;
&lt;P&gt;--------------------------------------------------------------------------------------------------&lt;BR&gt;MODERATE:&lt;BR&gt;--------------------------------------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;Q: Name as many operations as possible that cannot be performed on the model database.&lt;/P&gt;
&lt;P&gt;Q: What page verification options are available in Sql Server and how do they work?&lt;/P&gt;
&lt;P&gt;Q: What is the fundamental unit of storage in SQL Server data files and what is it’s size?&lt;/P&gt;
&lt;P&gt;Q: What is the fundamental unit of storage in SQL Server log files and what is it’s size?&lt;/P&gt;
&lt;P&gt;Q: Name as many different types of Pages in SQL Server as possible&lt;/P&gt;
&lt;P&gt;Q: Is the sequence of data rows on given data/index page guaranteed to physically match the logical order of rows (i.e. by index key, row id, etc.)?&lt;/P&gt;
&lt;P&gt;Q: What is the fundamental unit in which space and allocation is managed within Sql Server and what is it’s size?&lt;/P&gt;
&lt;P&gt;Q: What are the primary differences between an index reorganization and an index rebuild?&lt;/P&gt;
&lt;P&gt;Q: If you need to REBUILD a non-clustered index that is 10gb in size and have 5gb of free data-file space available with no room to grow the data file(s), how can you accomplish the task?&lt;/P&gt;
&lt;P&gt;Q: During an index reorganization operation, if the index spans multiple files, will pages be allowed to migrate between files?&lt;/P&gt;
&lt;P&gt;--------------------------------------------------------------------------------------------------&lt;BR&gt;DIFFICULT:&lt;BR&gt;--------------------------------------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;Q: Explain the difference between a fully-logged and minimally-logged operation&lt;/P&gt;
&lt;P&gt;Q: What special type of page within Sql Server is responsible for tracking (via a simple bitmap) extents that have been modified by bulk-logged operations since the last "BACKUP LOG" statement?&lt;/P&gt;
&lt;P&gt;Q: What special type of page within Sql Server is responsible for tracking (via a simple bitmap) extents that have been modified since the last "BACKUP DATABASE" statement?&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=3921084" width="1" height="1"&gt;</description></item><item><title>So you think you know SQL...Concurrency and Locking</title><link>http://blogs.msdn.com/chadboyd/archive/2007/05/29/so-you-think-you-know-sql-concurrency-and-locking.aspx</link><pubDate>Tue, 29 May 2007 21:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2975469</guid><dc:creator>boydc7</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/2975469.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=2975469</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=2975469</wfw:comment><description>&lt;P&gt;The first in hopefully a fairly long series of posts on interview type questions/scenarios/etc., this one will cover Concurrency and Locking related Q/A (simple Q/A only at this point).&amp;nbsp; The questions are separated into easy, moderate, and difficult groups.&amp;nbsp; If you have any comments, by all means please post and lets discuss!&lt;/P&gt;
&lt;P&gt;Typically, answers and content can be found in Books Online and/or MSDN...in this case, Craig Freedman's blog also contributed to the answers/scripts (&lt;A href="http://blogs.msdn.com/craigfr/default.aspx" mce_href="http://blogs.msdn.com/craigfr/default.aspx"&gt;http://blogs.msdn.com/craigfr/default.aspx&lt;/A&gt;).&lt;/P&gt;
&lt;P&gt;For answers to these questions, go here when you're ready to see them: &lt;A href="http://www.mssqltips.com/tip.asp?tip1253" mce_href="http://www.mssqltips.com/tip.asp?tip1253"&gt;http://www.mssqltips.com/tip.asp?tip1253&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;Additionally, see the attached script for some demo-ing of concurrency behaviors in different scenarios...&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;EASY:&amp;nbsp;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P&gt;&lt;B&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;What isolation levels will provide completely read-consistent views of a database to all transactions?&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Within the READ_COMMITTED isolation level, during a read operation how long are locks held/retained for?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Within the REPEATABLE_READ and SERIALIZABLE isolation levels, during a read operation and assuming row-level locking, how long are locks held/retained for?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Can locks ever be de-escalated?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;MODERATE:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;What are the different types of lock modes in Sql Server?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&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; BONUS Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;Can you explain scenarios where each type of lock would be taken?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;What is lock escalation and what triggers it?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Name as many of the lockable resources as possible in Sql Server 2005?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;What requirements must be met for a BULK-UPDATE lock to be granted, and what benefit do they serve?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;What is the least restrictive type of lock? What is the most restrictive?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;What is a deadlock and how is it different from a standard block situation?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Which 2 isolation levels support optimistic/row-versioned-based concurrency control?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;What database options must be set to allow the use of optimistic models?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;What is the size of a lock structure?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;DIFFICULT:&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Describe the differences between the pessimistic SERIALIZABLE model and the optimistic SNAPSHOT model in terms of transactional isolation (i.e., not the concurrency differences, but instead how the exact same transactional modifications may result in different final outcomes).&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;In what circumstances will you see key-range locks, and what are they meant to protect against?&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Explain the purpose of INTENT locks&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Can deadlocks occur on resources other than database object?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&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; BONUS Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;What different types of resources that can deadlock?&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Q:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/STRONG&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Explain how the database engine manages the memory footprint for the lock pool when running in a dynamic lock management mode (different between Sql 2000 and Sql 2005)&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;&lt;SPAN style="FONT-SIZE: 11pt; FONT-FAMILY: 'Calibri','sans-serif'; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2975469" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/chadboyd/attachment/2975469.ashx" length="43786" type="application/octet-stream" /></item><item><title>So you think you know SQL...</title><link>http://blogs.msdn.com/chadboyd/archive/2007/05/29/so-you-think-you-know-sql.aspx</link><pubDate>Tue, 29 May 2007 21:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2975220</guid><dc:creator>boydc7</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/2975220.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=2975220</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=2975220</wfw:comment><description>&lt;P&gt;I'm frequently asked about questions that are asked when interviewing candidates for Sql Server related positions, what topics should be covered, what types of questions should be asked, etc. In spirit of trying to address this as well as a range of basic, intermediate, and advanced level topics, I'm going to begin a series of posts related to just that - interview type questions and answers.&amp;nbsp; We'll start with simple Q/A type things, and as we progress we'll move on to scenario type questions and situational topics (at least as situational as you can get virtually in a blog).&lt;/P&gt;
&lt;P&gt;I'm actually going to be providing content to a friend who runs a Sql Server Tips site (&lt;A href="http://www.mssqltips.com/"&gt;www.mssqltips.com&lt;/A&gt;), so I'll be posting the questions here and links to the answers - hopefully this will allow you to try and answer the questions without seeing the answers, and then be able to check your answers by following the links. I'll also be posting any scripts used for demo purposes directly here as well...&lt;/P&gt;
&lt;P&gt;Each of the posts will start with the "So you think you know SQL..." prefix, followed by the topic of questions/scenarios for the day...the first posting will be following this one shortly.&lt;/P&gt;
&lt;P&gt;On a side note, if anyone out there has any questions, scenarios, topics, etc. that you are having trouble answering and/or understanding, please feel free to send me an email or post a comment to any blog post (like this one) with a short description of the issue/question/scenario, and I'll be happy to try and follow-up with a blog post detailing the answer/possibilties/reasoning/etc.&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2975220" width="1" height="1"&gt;</description></item><item><title>Presenting Service Broker at Capital Area Microsot Integration and Connected Systems - MICSUG - Reston, VA</title><link>http://blogs.msdn.com/chadboyd/archive/2007/05/21/presenting-service-broker-at-capital-area-microsot-integration-and-connected-systems-micsug-reston-va.aspx</link><pubDate>Mon, 21 May 2007 20:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2774229</guid><dc:creator>boydc7</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/2774229.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=2774229</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=2774229</wfw:comment><description>&lt;P&gt;If you're in the DC/Nova/Baltimore area and are interested in a presentation covering Service Broker scenarios with Sql Server 2005, I'll be presenting at the Capital Area Microsot Integration and Connected Systems user group&amp;nbsp;(MICSUG) at the Microsoft office in&amp;nbsp;Reston, VA this coming Thursday, May 24th.&lt;/P&gt;
&lt;P&gt;For more information on the group, check out their site at &lt;A href="http://groups.msn.com/micsug/"&gt;http://groups.msn.com/micsug/&lt;/A&gt;&amp;nbsp;.&lt;/P&gt;
&lt;P&gt;Hope to see many of you there&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2774229" width="1" height="1"&gt;</description></item><item><title>Large log backups with bulk operations and read-only databases</title><link>http://blogs.msdn.com/chadboyd/archive/2007/05/14/large-log-backups-with-bulk-operations-and-read-only-databases.aspx</link><pubDate>Mon, 14 May 2007 20:18:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2632342</guid><dc:creator>boydc7</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/2632342.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=2632342</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=2632342</wfw:comment><description>&lt;P&gt;So, here's an interesting scenario I ran into a few weeks back. A customer had a situation in which they were using a read-only database (to serve reports/ad-hoc queries during production hours) that was loaded nightly with differential data from a variety of systems. This data was imported to the system nightly from flat-files (variety of formats) using a BULK INSERT operation against each file. During non-loading times, the database was physically marked as "read-only", and during load-times only was it marked as "read-write". This database was starting to grow quite large, and to cut-down on the length of backup time and size of backups, the customer switched from a model of taking a full backup nightly to instead taking a single full backup once a week (Sunday) and then taking a single log backup after each bulk-load operation nightly. To accommodate, the database's recovery model was switched from SIMPLE to BULK_LOGGED (where it stayed at all times) The customer figured (correctly) that the nightly log backups would be smaller and quicker to complete as opposed to taking an entire full backup each night.&lt;/P&gt;
&lt;P&gt;So, the high-level outline for a week of processing was similar to the following:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; 1) Full backup on Sunday after the daily data-load&lt;BR&gt;&amp;nbsp;&amp;nbsp; 2) Database marked as "read-only"&lt;BR&gt;&amp;nbsp;&amp;nbsp; 3) Nightly the database is marked as "read-write" temporarily&lt;BR&gt;&amp;nbsp;&amp;nbsp; 3) All flat-file data is bulk-loaded into the database (including a drop/create of an index or two)&lt;BR&gt;&amp;nbsp;&amp;nbsp; 4) Database is set back to "read-only"&lt;BR&gt;&amp;nbsp;&amp;nbsp; 5) Transaction Log backup is taken&lt;/P&gt;
&lt;P&gt;The customer was surprised to see that as the week progressed, their log backups were getting larger and larger and larger until Sunday came around again and a full backup was taken, at which point the log backup for Monday would be the typical size, and each night's log backup thereafter would again become larger and larger and larger. The customer was a bit confused as to why this was occurring, since they figured the nightly log backups should only contain data that was imported in that given night's load. This in fact would be correct under typical circumstances, however in this case, there is a logical error in the processing order that is leading to the bloated log backups.&lt;/P&gt;
&lt;P&gt;Before I discuss the logic issue, I'll first give a very, very brief overview on how minimally logged operations work with relation to what is logged during the operation and how these operations impact transaction log backups. If you already understand these concepts, you can skip this section and jump down a few paragraphs to were I start discussing the issue at hand.&lt;/P&gt;
&lt;P&gt;When you perform a minimally logged operation in Sql Server, you are required to meet a few prerequisites, one of which is that you need to be operating in the BULK_LOGGED recovery model (I won't discuss the others here, but Books Online contains a detailed list under the "Minimally Logged Operations" and "Prerequisites for Minimal Logging in Bulk Import" topics). When you perform a minimally-logged operation, only space allocations are logged during the operation itself (along with the fact that a minimally logged operation occurred); however, as extents in the data files are affected/modified by a bulk operation, bits are flipped in the BCM pages within the file (special pages in Sql Server used to track extents that have been modified during a bulk operation - for more information, see the topic "Tracking Modified Extents" in Books Online). Then, come time for the next log backup, the log backup operation scans through these BCM pages looking for any bits set, and if it finds any, it pushes the contents of those extents out to the log backup that is currently taking place, and then resets the bits in question within the BCM pages back to a non-set value so that the next log backup doesn't need to push those same extents out to the next log backup.&lt;/P&gt;
&lt;P&gt;So, having said that, you may already be able to determine what the problem with the above logic is - given that a log backup operation reads the BCM pages for modified extents, and then in turn flips the bits in the given BCM pages, this obviously requires that the log backup operation be able to WRITE to the BCM pages - if the database is in read-only mode, the log backup operation will be unable to flip the bits in the BCM pages, and hence the next log backup will pull the same extents (plus any others that have changed) in the said backup. In this case, the logic was to first set the database back to "read-only" mode prior to taking the log backup - simple solution here is to take the log backup while the database is still in "read-write" mode, then set the database to "read-only" after the log backup is finished. Once this simple change is made, all nightly log backups are the expected size, and no longer growing indefinitely. The new logic at a high-level became as follows:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; 1) Full backup on Sunday after the daily data-load&lt;BR&gt;&amp;nbsp;&amp;nbsp; 2) Database marked as "read-only"&lt;BR&gt;&amp;nbsp;&amp;nbsp; 3) Nightly the database is marked as "read-write" temporarily&lt;BR&gt;&amp;nbsp;&amp;nbsp; 3) All flat-file data is bulk-loaded into the database (including a drop/create of an index or two)&lt;BR&gt;&amp;nbsp;&amp;nbsp; 4) Transaction Log backup is taken&lt;BR&gt;&amp;nbsp;&amp;nbsp; 5) Database is set back to "read-only"&lt;/P&gt;
&lt;P&gt;Notice the subtle but important change - simply swapping the order of steps 4 and 5 from the original logic...&lt;/P&gt;
&lt;P&gt;I've included sample code below to reproduce this same type of situation if you're interested in seeing it in action. It's important to note that a similar pattern would be noticed if you were using a differential backup model vs. a log backup model, although the sizes of the diff backups taken each progressive night wouldn't be as significantly larger (differential backups use special pages called DCM pages to pull modified extents in a differential backup operation), it just so happens that in this case the customer was using a log backup model.&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;----------------------------------------------------------------------&lt;BR&gt;------------------ CODE ONLY BELOW ------------------&lt;BR&gt;----------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;use master;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Create a test database...&lt;BR&gt;if db_id('bulkLoad_logBackup_sample') &amp;gt; 0&lt;BR&gt;&amp;nbsp;drop database bulkLoad_logBackup_sample;&lt;BR&gt;-- create...&lt;BR&gt;create database bulkLoad_logBackup_sample on&lt;BR&gt;&amp;nbsp;primary (name = 'bulkLoad_logBackup_sample_primary', size = 25mb, filename = 'c:\temp\bulkLoad_logBackup_sample.mdf'),&lt;BR&gt;&amp;nbsp;filegroup data1 default (name = 'bulkLoad_logBackup_sample_data1a', size = 1gb, filename = 'c:\temp\bulkLoad_logBackup_sample_data1a.ndf')&lt;BR&gt;&amp;nbsp;log on (name = 'bulkLoad_logBackup_sample_log', size = 128mb, filename = 'c:\temp\bulkLoad_logBackup_sample.ldf');&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Set to simple recovery temporarily...&lt;BR&gt;alter database bulkLoad_logBackup_sample set recovery simple;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;use bulkLoad_logBackup_sample;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Create a sample table pre-loaded with a bunch of data that we'll use only&lt;BR&gt;-- to export out data to create a sample bulk-load file...&lt;BR&gt;-- This table will currently hold records with id values between 1million and&lt;BR&gt;-- 5million...&lt;BR&gt;if object_id('dbo.t2') &amp;gt; 0&lt;BR&gt;&amp;nbsp;drop table dbo.t2;&lt;BR&gt;-- Load...&lt;BR&gt;select&amp;nbsp;top 2500000 tmp.id, tmp.col1, tmp.filler&lt;BR&gt;into&amp;nbsp;dbo.t2&lt;BR&gt;from&amp;nbsp;(&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;select top 3000000&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;row_number() over(order by a.object_id) as id&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,cast(newid() as char(36)) as col1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,cast(a.name as char(100)) as filler&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;from&amp;nbsp;sys.columns a&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;cross join sys.columns b&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;cross join sys.columns c&lt;BR&gt;&amp;nbsp;&amp;nbsp;) tmp&lt;BR&gt;where&amp;nbsp;tmp.id between 200000 and 3500000;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- bcp the data out to a file...this is what we'll use later to bulk import...&lt;BR&gt;-- should result in about 350mb of data...&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkData.bcp', no_output;&lt;BR&gt;declare @s varchar(200);&lt;BR&gt;select @s = 'bcp bulkLoad_logBackup_sample.dbo.t2 out c:\temp\bulkData.bcp -nTS ' + @@servername;&lt;BR&gt;exec master.dbo.xp_cmdshell @s, no_output;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Remove the temp usage table...&lt;BR&gt;if object_id('dbo.t2') &amp;gt; 0&lt;BR&gt;&amp;nbsp;drop table dbo.t2;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Create the table that will be used for bulk loading...&lt;BR&gt;if object_id('dbo.t1') &amp;gt; 0&lt;BR&gt;&amp;nbsp;drop table dbo.t1;&lt;BR&gt;-- Load data...&lt;BR&gt;select&amp;nbsp;top 100000&lt;BR&gt;&amp;nbsp;&amp;nbsp;row_number() over(order by a.object_id) as id&lt;BR&gt;&amp;nbsp;&amp;nbsp;,cast(newid() as char(36)) as col1&lt;BR&gt;&amp;nbsp;&amp;nbsp;,cast(a.name as char(100)) as filler&lt;BR&gt;into&amp;nbsp;dbo.t1&lt;BR&gt;from&amp;nbsp;sys.columns a&lt;BR&gt;cross join sys.columns b&lt;BR&gt;cross join sys.columns c&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- View the data in the t1 table currently...should be 1million records with &lt;BR&gt;-- id's from 1 to 1million...&lt;BR&gt;select min(id), max(id), count(*) from dbo.t1;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Set the database to a full recovery mode...&lt;BR&gt;alter database bulkLoad_logBackup_sample set recovery full;&lt;BR&gt;checkpoint;&lt;BR&gt;waitfor delay '000:00:05.000';&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Perform a full backup of the database to set the log in a non-auto-truncating mode...&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_fullBackup1.bak', no_output;&lt;BR&gt;backup database bulkLoad_logBackup_sample to disk = 'c:\temp\bulkLoad_logBackup_sample_fullBackup1.bak';&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- On my system, the full backup is about 18mb in size total...&lt;/P&gt;
&lt;P&gt;-- Let's run some simple logged statements to generate some log activity...&lt;BR&gt;if object_id('dbo.t2') &amp;gt; 0&lt;BR&gt;&amp;nbsp;drop table dbo.t2;&lt;BR&gt;-- create...&lt;BR&gt;create table dbo.t2 (id int, col1 char(36), col2 char(200)) on data1;&lt;BR&gt;go&lt;BR&gt;-- insert some data...&lt;BR&gt;insert&amp;nbsp;dbo.t2 (id, col1, col2)&lt;BR&gt;select&amp;nbsp;top 100000&lt;BR&gt;&amp;nbsp;&amp;nbsp;row_number() over(order by a.object_id) as id&lt;BR&gt;&amp;nbsp;&amp;nbsp;,cast(newid() as char(36)) as col1&lt;BR&gt;&amp;nbsp;&amp;nbsp;,cast(a.name as char(100)) as filler&lt;BR&gt;from&amp;nbsp;sys.columns a&lt;BR&gt;cross join sys.columns b;&lt;BR&gt;go&lt;BR&gt;-- update some data...&lt;BR&gt;update&amp;nbsp;dbo.t2&lt;BR&gt;set&amp;nbsp;&amp;nbsp;col1 = cast(newid() as char(36));&lt;BR&gt;go&lt;BR&gt;-- delete some data...&lt;BR&gt;delete&amp;nbsp;dbo.t2&lt;BR&gt;where&amp;nbsp;(id between 100 and 500)&lt;BR&gt;or&amp;nbsp;&amp;nbsp;(id between 1100 and 1500)&lt;BR&gt;or&amp;nbsp;&amp;nbsp;(id between 2100 and 2500)&lt;BR&gt;or&amp;nbsp;&amp;nbsp;(id between 3100 and 3500)&lt;BR&gt;or&amp;nbsp;&amp;nbsp;(id between 4100 and 4500)&lt;BR&gt;or&amp;nbsp;&amp;nbsp;(id between 7000 and 9000);&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Perform a log backup...&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup1.trn', no_output;&lt;BR&gt;backup log bulkLoad_logBackup_sample to disk = 'c:\temp\bulkLoad_logBackup_sample_logBackup1.trn';&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- On my system, the log backup is a little over 50mb in size...&lt;BR&gt;-- At this point, the log should be auto truncated to basically empty (usage space that is, not on-disk space)...&lt;BR&gt;-- Take another log backup to show this...&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup2.trn', no_output;&lt;BR&gt;backup log bulkLoad_logBackup_sample to disk = 'c:\temp\bulkLoad_logBackup_sample_logBackup2.trn';&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- On my system, this log backup is about 100kb in size...&lt;/P&gt;
&lt;P&gt;-- Ok, now let's mimic a bulk-load situation...&lt;BR&gt;-- First, we'll mark the database as writable...&lt;BR&gt;alter database bulkLoad_logBackup_sample set read_write;&lt;BR&gt;go&lt;BR&gt;-- Next, move from full recovery to bulk-logged recovery...&lt;BR&gt;alter database bulkLoad_logBackup_sample set recovery bulk_logged;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Next, bulk-load a bunch of data into the existing t1 table...minimal logging should occur here...&lt;BR&gt;bulk insert bulkLoad_logBackup_sample.dbo.t1 from 'c:\temp\bulkData.bcp'&lt;BR&gt;&amp;nbsp;with (&amp;nbsp;datafiletype = 'native',&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tablock);&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Now we should have much more data in our t1 table...&lt;BR&gt;select min(id), max(id), count(*) from dbo.t1;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Cluster the bulk-loaded table...this too will be minimally logged...&lt;BR&gt;create unique clustered index ix_test on dbo.t1 (id) with sort_in_tempdb;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- At this point, the log file for the "bulkLoad_logBackup_sample" database should still not&lt;BR&gt;-- be any larger than the initial 128mb in size, despite much more than that amount of data&lt;BR&gt;-- being modified (due to minimal logging operations...).&lt;/P&gt;
&lt;P&gt;-- Now, since we performed a bulk-logged operation in the bulk_logged recovery model, we'd typically&lt;BR&gt;-- see the next log backup be much larger than the existing usage size of the active transaction log&lt;BR&gt;-- (since a bulk-logged operation causes minimally logged operations, which simply output space &lt;BR&gt;-- allocations during the operation to the tlog, but flip extent bits in the BCM pages for the&lt;BR&gt;-- affected extents in the operation - then durin the next log backup, any of these marked extents&lt;BR&gt;-- would have their data output to the log backup, and the BCM page bits would be flipped back);&lt;BR&gt;-- however, instead of taking a log backup at this point, let's instead set our database back to&lt;BR&gt;-- being "read-only" prior to taking the log backup...&lt;BR&gt;alter database bulkLoad_logBackup_sample set read_only;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Now, let's take a log backup and see how big it is...&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup3.trn', no_output;&lt;BR&gt;backup log bulkLoad_logBackup_sample to disk = 'c:\temp\bulkLoad_logBackup_sample_logBackup3.trn';&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- On my system, this log backup is over 775mb in size...&lt;BR&gt;-- Let's take another log backup immediately and see what we get for a size...&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup4.trn', no_output;&lt;BR&gt;backup log bulkLoad_logBackup_sample to disk = 'c:\temp\bulkLoad_logBackup_sample_logBackup4.trn';&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Notice that we get yet another large log backup that is over 775mb in size...&lt;BR&gt;-- This will continue to be the case until we perform a log backup with the database in read_write mode&lt;BR&gt;-- to allow the BCM pages to be marked (or more accurately, un-marked)...&lt;/P&gt;
&lt;P&gt;-- Now, let's pretend we were going through yet another bulk-load cycle and see what happens...&lt;/P&gt;
&lt;P&gt;-- First, set the db to read_write...&lt;BR&gt;alter database bulkLoad_logBackup_sample set read_write;&lt;BR&gt;go&lt;BR&gt;-- We're already in bulk_logged recovery, no need to set that...&lt;BR&gt;go&lt;BR&gt;-- Drop the cluster so we can bulk load in a non-ordered fashion...&lt;BR&gt;drop index dbo.t1.ix_test;&lt;BR&gt;go&lt;BR&gt;-- Run a bulk insert again (use the same data)...&lt;BR&gt;bulk insert bulkLoad_logBackup_sample.dbo.t1 from 'c:\temp\bulkData.bcp'&lt;BR&gt;&amp;nbsp;with (&amp;nbsp;datafiletype = 'native',&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;tablock);&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- We should have even more data in our t1 table...(min/max id's will be the same as the last&lt;BR&gt;-- time though, since we just re-imported the same data)...&lt;BR&gt;select min(id), max(id), count(*) from dbo.t1;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Cluster the bulk-loaded table...this too will be minimally logged...&lt;BR&gt;-- this time we'll remove the unique attribute, since that won't work...&lt;BR&gt;create clustered index ix_test on dbo.t1 (id) with sort_in_tempdb;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Again, the tlog for the "bulkLoad_logBackup_sample" database should be no larger than the&lt;BR&gt;-- initial 128mb in size...&lt;/P&gt;
&lt;P&gt;-- Set the database back to read-only...&lt;BR&gt;alter database bulkLoad_logBackup_sample set read_only;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Take another log backup...&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup5.trn', no_output;&lt;BR&gt;backup log bulkLoad_logBackup_sample to disk = 'c:\temp\bulkLoad_logBackup_sample_logBackup5.trn';&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- How large was this one? Much larger...1.5gb or so on my machine...not only does it include the same &lt;BR&gt;-- 785mb or so from the prior bulk operation, but it also includes all the data from the last round of &lt;BR&gt;-- bulk operations (in this case, since we're dropping/creating an index everytime, this will include a &lt;BR&gt;-- lot of redundant data in each backup...&lt;/P&gt;
&lt;P&gt;-- If this pattern were to continue, the log backups would continue to get larger and larger and larger&lt;BR&gt;-- and larger in a neverending pattern...&lt;/P&gt;
&lt;P&gt;-- To see how it should act (i.e. the way it acted initially), simply set the db back to read_write:&lt;BR&gt;alter database bulkLoad_logBackup_sample set read_write;&lt;/P&gt;
&lt;P&gt;-- Then take a log backup (this will be yet another 1.5gb-ish in size...&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup6.trn', no_output;&lt;BR&gt;backup log bulkLoad_logBackup_sample to disk = 'c:\temp\bulkLoad_logBackup_sample_logBackup6.trn';&lt;/P&gt;
&lt;P&gt;-- Now every log backup will be small again...even if you set the db back to read_only first...&lt;BR&gt;alter database bulkLoad_logBackup_sample set read_only;&lt;/P&gt;
&lt;P&gt;-- This log backup will be small...100kb or so on my machine...&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup7.trn', no_output;&lt;BR&gt;backup log bulkLoad_logBackup_sample to disk = 'c:\temp\bulkLoad_logBackup_sample_logBackup7.trn';&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;-- Cleanup...&lt;BR&gt;/*&lt;BR&gt;use master;&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkData.bcp', no_output;&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_fullBackup1.bak', no_output;&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup1.trn', no_output;&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup2.trn', no_output;&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup3.trn', no_output;&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup4.trn', no_output;&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup5.trn', no_output;&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup6.trn', no_output;&lt;BR&gt;exec master.dbo.xp_cmdshell 'del /F /Q c:\temp\bulkLoad_logBackup_sample_logBackup7.trn', no_output;&lt;/P&gt;
&lt;P&gt;drop database bulkLoad_logBackup_sample;&lt;BR&gt;go&lt;BR&gt;--*/&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2632342" width="1" height="1"&gt;</description></item><item><title>Paul Randal presenting at NovaSql user group</title><link>http://blogs.msdn.com/chadboyd/archive/2007/05/13/paul-randal-presenting-at-novasql-user-group.aspx</link><pubDate>Sun, 13 May 2007 14:54:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2601145</guid><dc:creator>boydc7</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/2601145.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=2601145</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=2601145</wfw:comment><description>&lt;P&gt;After a nice vacation (to Italy for a friend's wedding...very nice country...) I'm back and hopefully will be posting a couple of technical topics in the next few days to get caught-up on my absense.&lt;/P&gt;
&lt;P&gt;In the meantime, if any of you are in the DC area next Monday, May 21st, Paul Randal will be doing a virtual presentation on corruption and disaster recovery practices at the NovaSql user group meeting starting at 7:30pm thru 9pm...for more information, see the group's website here:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.novasql.com/"&gt;www.novasql.com&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;I'll be there as well, hope to see you all there,&lt;/P&gt;
&lt;P&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2601145" width="1" height="1"&gt;</description></item><item><title>SERIALIZABLE isolation level (serialized transactions) and duplicate key insertion attempts</title><link>http://blogs.msdn.com/chadboyd/archive/2007/04/18/serializable-isolation-level-serialized-transactions-and-duplicate-key-insertion-attempts.aspx</link><pubDate>Wed, 18 Apr 2007 19:36:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2179316</guid><dc:creator>boydc7</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/chadboyd/comments/2179316.aspx</comments><wfw:commentRss>http://blogs.msdn.com/chadboyd/commentrss.aspx?PostID=2179316</wfw:commentRss><wfw:comment>http://blogs.msdn.com/chadboyd/rsscomments.aspx?PostID=2179316</wfw:comment><description>&lt;P&gt;I ran into an interesting scenario with a customer this past week that behaved a bit differently than I expected (not having ever verified the behavior before, or even considering it I guess) at first. After spending some time thinking about it, I think I arrived at a reasonable explanation for the behavior...&lt;/P&gt;
&lt;P&gt;In this scenario, we're going to be working with 2 concurrent transactions running in a SERIAZABLE isolation level. If you haven't worked with serialized transactions before, they differ from the other isolation levels primarily in the fact that they introduce RANGE level locks that aren't typically used with other levels of isolation. For example, when using a SERIALIZED isolation and querying a table with an integer column called 'id' for records between 10 and 20, this read will in effect 'lock' the entire range of keys in that column from 10 thru 20 inclusive and not allow any modification of data in said range. Even when using the REPEATABLE READ isolation level, the entire range of records isn't locked, only the keys that already exist within that range are locked.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;For example, assume the table has records with 'id' values of 10,11,14,18, and 20...the query in question would return these 5 records to the client. If running in the REPEATABLE READ level of isolation, you wouldn't be able to modify any of the records with the key values of 10,11,14,18, and 20 (via any write-based operation); however, when running in the SERIAZABLE level of isolation, not only wouldn't you be able to modify those key values, but you also wouldn't be able to modify (again, via any write-based operation) any key value in the RANGE of 10 thru 20 inclusive. You ARE allowed to read those values however...&lt;/P&gt;
&lt;P&gt;Ok, so now that we've gotten through that simple explanation (which will be demonstrated in a script below), what about the behavior that surprised me? Well, given that you can read values within a protected serialized range of data from a separate concurrent serialized transaction, I originally expected that if from the separate connection you in fact tried to modify the given protected range of keys (via an insert for example in this case) in a manner that would throw a duplicate key error (or some other form of data-integrity related exception), that you wouldn't be blocked but would immediately receive the exception. In reality, the modification statement will block immediately, and the duplicate key error isn't thrown until the statement becomes freed via a commit/rollback at the blocking connection.&lt;/P&gt;
&lt;P&gt;I've got a script below to reproduce/demonstrate the behavior, but how about the explanation of the behavior first...well, if you were to perform a data modification statement that acted on multiple rows (for example, an insert of multiple rows of data), where some of the rows would succeed and some would fail (due to a duplicate key failure for example) then the successful rows are STILL applied (assuming you commit the transaction, and you don't have the XACT_ABORT option on). In this case, some of the data modifications would possibly still affect the range, and hence shouldn't be allowed.&lt;/P&gt;
&lt;P&gt;Anyhow, if anyone has additional thoughts/experiences, by all means send them along...demo code to repro is below...&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Chad Boyd    ~~~    This posting is provided "AS IS" with no warranties, and confers no rights. Use of any included script samples are subject to the terms specified at http://www.microsoft.com/info/cpyright.htm.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;----------------------------------------------------------------------&lt;BR&gt;------------------ CODE ONLY BELOW ------------------&lt;BR&gt;----------------------------------------------------------------------&lt;/P&gt;
&lt;P&gt;use tempdb;&lt;BR&gt;set nocount on;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;-- Create test objects...&lt;BR&gt;if object_id('dbo.t1') &amp;gt; 0&lt;BR&gt;&amp;nbsp;drop table dbo.t1;&lt;BR&gt;go&lt;BR&gt;create table t1 (pkid int, colA varchar(100), fillerCol char(50));&lt;BR&gt;go&lt;BR&gt;create unique clustered index ix_t1_c_pkid on dbo.t1 (pkid);&lt;BR&gt;create nonclustered index ix_t1_nc_colA on dbo.t1 (colA);&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Add some data...&lt;BR&gt;with cte as (&lt;BR&gt;&amp;nbsp;select&amp;nbsp;top 102 &lt;BR&gt;&amp;nbsp;&amp;nbsp;row_number() over (order by a.object_id) as id,&lt;BR&gt;&amp;nbsp;&amp;nbsp;cast(row_number() over (order by a.object_id) as varchar(10)) + ' - ' + cast(newid() as varchar(50)) as colA,&lt;BR&gt;&amp;nbsp;&amp;nbsp;'blah' as fillerCol&lt;BR&gt;&amp;nbsp;from&amp;nbsp;sys.columns a&lt;BR&gt;&amp;nbsp;cross join sys.columns b&lt;BR&gt;)&lt;BR&gt;insert&amp;nbsp;dbo.t1 (pkid, colA, fillerCol)&lt;BR&gt;select&amp;nbsp;*&lt;BR&gt;from&amp;nbsp;cte&lt;BR&gt;where&amp;nbsp;id not in(4,8)&amp;nbsp;-- Don't insert id's 4 or 8...&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;-- CONNECTION 1&lt;BR&gt;set transaction isolation level serializable;&lt;BR&gt;begin tran;&lt;BR&gt;select&amp;nbsp;*&lt;BR&gt;from&amp;nbsp;dbo.t1 a&lt;BR&gt;where&amp;nbsp;a.pkid between 1 and 10;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;-- CONNECTION 2&lt;BR&gt;set transaction isolation level serializable;&lt;BR&gt;begin tran;&lt;BR&gt;select&amp;nbsp;*&lt;BR&gt;from&amp;nbsp;dbo.t1 a&lt;BR&gt;where&amp;nbsp;a.pkid between 1 and 10;&lt;BR&gt;go&lt;/P&gt;
&lt;P&gt;-- Reads still work fine as expected (i.e. no blocking)...&lt;/P&gt;
&lt;P&gt;-- Now try writing in CONNECTION 2 (keep original xact open)...&lt;BR&gt;-- CONNECTION 2&lt;BR&gt;update&amp;nbsp;dbo.t1&lt;BR&gt;set&amp;nbsp;&amp;nbsp;fillerCol = 'blah1'&lt;BR&gt;where&amp;nbsp;pkid = 5;&lt;/P&gt;
&lt;P&gt;-- Blocks (as expected)...&lt;/P&gt;
&lt;P&gt;-- Stop the update above and instead try the following in CONNECTION 2:&lt;BR&gt;-- CONNECTION 2&lt;BR&gt;update&amp;nbsp;dbo.t1&lt;BR&gt;set&amp;nbsp;&amp;nbsp;fillerCol = 'blah1'&lt;BR&gt;where&amp;nbsp;pkid = 15;&lt;/P&gt;
&lt;P&gt;-- Works as expected...not within the protected range...&lt;/P&gt;
&lt;P&gt;-- Try inserting data with a duplicate key...&lt;BR&gt;-- CONNECTION 2...&lt;BR&gt;insert&amp;nbsp;dbo.t1 (pkid, colA, fillerCol)&lt;BR&gt;select&amp;nbsp;3, '3 - test_repeatableReadInsert', 'blah3';&lt;/P&gt;
&lt;P&gt;-- Blocks despite the fact that it would fail with a duplicate key failure if it wasn't blocked...&lt;BR&gt;-- This is the same behavior as expected if the pkid value wasn't a duplicate...&lt;BR&gt;-- Commit the transaction on CONNECTION 1 and see the CONNECTION 2 throw a duplicate key failure...&lt;/P&gt;
&lt;P&gt;-- CONNECTION 1&lt;BR&gt;commit transaction;&lt;/P&gt;
&lt;P&gt;-- Once done, cleanup...&lt;BR&gt;-- BOTH CONNECTIONS&lt;BR&gt;while @@trancount &amp;gt; 0&lt;BR&gt;&amp;nbsp;rollback tran&lt;BR&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2179316" width="1" height="1"&gt;</description></item></channel></rss>