<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>La bodeguita de Nacho</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/ialonso/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/ialonso/feed.xml</link>
    <description>SQL Server Troubleshooting Stories - &amp;quot;y una ración de bravas&amp;quot;</description>
    <lastBuildDate>Wed, 24 Feb 2016 14:13:21 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Planning to set up an Always On Availability Group configuration to move data data from a 2012 primary replica into a 2014 “readable” secondary replica? Think it twice!</title>
      <link>https://docs.microsoft.com/archive/blogs/ialonso/planning-to-set-up-an-always-on-availability-group-configuration-to-move-data-data-from-a-2012-primary-replica-into-a-2014-readable-secondary-replica-think-it-twice</link>
      <pubDate>Mon, 18 May 2015 09:12:03 GMT</pubDate>
      <dc:creator><![CDATA[Nacho Alonso Portillo]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ialonso/2015/05/18/planning-to-set-up-an-always-on-availability-group-configuration-to-move-data-data-from-a-2012-primary-replica-into-a-2014-readable-secondary-replica-think-it-twice/</guid>
      <description><![CDATA[I had a customer who wanted to use AOAG, not as a HA/DR solution but as one to replicate data to...]]></description>
      <content:encoded><![CDATA[<p>I had a customer who wanted to use AOAG, not as a HA/DR solution but as one to replicate data to another instance to which they planned to offload all read-only workload. The instance hosting the secondary replica of the database was expected to run a new set of business processes which consumed data from the tables in the read-only replicated database, and whose pattern (that of some of those processes) would greatly benefit from having the possibility to use some memory optimized tables stored in a separate local database in that same instance (and maybe some natively stored procedures as well.) That would require them to run SQL Server 2014 Enterprise Edition on the instance hosting the secondary replica.</p>  <p>Now, the primary replica was running SQL Server 2012 Enterprise Edition. It was hosting several databases whose contents were accessed by a server product which supported SQL Server 2012 but, unfortunately, didn’t support SQL Server 2014 yet. That was an impediment which required them to have the instance hosting the primary replica running SQL Server 2012.</p>  <p>Since they didn’t ever plan to failover the availability group to the secondary, and in the event they accidentally did so they were fully aware of the consequences such action would imply, their question was whether or not such AOAG configuration would be one we support as a long term solution.</p>  <p>Every piece of documentation we had where mixed versions configurations were discussed, always referred to them in the context of a rolling upgrade. However, there was no topic in BOLs, KB article, post in the AlwaysON MSDN’s blog, or other authoritative source where we either stated that such setup was not supported as a permanent solution.</p>  <p>It happens that such configuration is not supported because it is possible to have a secondary replica running on a higher version than the primary, and it can even be configured for readable access, but in practice it cannot be accessed for read only until it has been “promoted” to primary. It’s only at that point when the metadata and physical structures in its files are upgraded to be at the level that version of the engine can work with.</p>  <p>Before having done so (ie having upgraded the version of the database) any attempt to startup the database via a USE statement or a reference to an object in that database from the context of a different database, would fail with error 946 (Cannot open database '%.*ls' version %d. Upgrade the database to the latest version), or a 18456 (Login failed for user '%.*ls'.%.*ls%.*ls) with 18337 (Reason: Failed to open the explicitly specified database '%.*ls'. ) for its reason when attempted via a login with explicit initial database specified in the login payload.</p>  <p>So, a doable alternative for what this customer required, could be setting up transactional replication to move data from the 2012 instance into the 2014 instance.</p>]]></content:encoded>
    </item>
    <item>
      <title>How is @@DBTS expected to behave on an Always On Availability Group secondary replica, a Database Mirroring mirror, or a database which is being created out of a restored backup and is in standby or in-recovery state?</title>
      <link>https://docs.microsoft.com/archive/blogs/ialonso/how-is-dbts-expected-to-behave-on-an-always-on-availability-group-secondary-replica-a-database-mirroring-mirror-or-a-database-which-is-being-created-out-of-a-restored-backup-and-is-in-standby-or-i</link>
      <pubDate>Fri, 08 May 2015 07:04:27 GMT</pubDate>
      <dc:creator><![CDATA[Nacho Alonso Portillo]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ialonso/2015/05/08/how-is-dbts-expected-to-behave-on-an-always-on-availability-group-secondary-replica-a-database-mirroring-mirror-or-a-database-which-is-being-created-out-of-a-restored-backup-and-is-in-standby-or-i/</guid>
      <description><![CDATA[A coworker recently posted the following to an internal forum:  “We are redirecting read load of our...]]></description>
      <content:encoded><![CDATA[<p>A coworker recently posted the following to an internal forum:</p>  <p>“We are redirecting read load of our SSIS Packages from Primary to Secondary, and our delta logic is dependent of @@dbts values. </p>  <p>On primary, the value of @@dbts always changes. But the same on secondary doesn’t change. Any experience around this.”</p>  <p>And this is what I answered based on my findings on how this works:</p>  <p>“On the secondary replica, it shouldn’t be static, it should increase but less often and not monotonically as in the primary replica, but in much bigger steps, typically equidistant to one another. This is by design. Let me explain...</p>  <p>@@DBTS is incremented by a builtin function which is incorporated in the query tree produced by the relational engine, while it algebrizes certain DML statements and binds a column of timestamp type.</p>  <p>The boot page of each database stores the high water mark value (dbt_maxDbTimestamp) that database uses for handing out timestamps in its context. When you create a database the initial value for that field is what the model database in that instance has in it (run DBCC DBINFO(model) WITH TABLERESULTS and look for the row where the column “Field” equals “dbi_maxDbTimestamp”.)</p>  <p>Now, during a database startup, initial/current value of DBTS is set to whatever the value of that high water mark is. And the first time a DML statement that includes a node to execute the builtin mentioned above is executed, it will increase the current value monotonically. But, before doing so, it will check whether the high water mark has been reached (which after a database startup is always the case). If the high mark was reached (ie current value equals high mark), it will bump up the value of the high mark and replace the previous value in the boot page with this new one. That modification of the row stored in the boot page gets logged and therefore will eventually be transferred to your secondary HADRON replicas. When the high water mark is bumped up, it is increased by a factor which is 1K times the number of visible schedulers in that instance, so it may well vary from one environment to another.</p>  <p>What happens on a secondary replica is that you begin restoring (with norecovery) a full backup which was taken on the primary replica. If at that point you check what’s the value of @@DBTS on the secondary, it will be whatever it has retrieved from the boot page and loaded into DBINFO structure in the dbt_maxDbTimestamp field. And, since no DMLs can be executed in a secondary&#160; replica, that current value of @@DBTS will never be monotonically increased. However, there might come a point in the primary replica where current DBTS reaches the high mark, in which case it gets bumped up and logged, the log operation gets transferred to the secondary which, when redone, will modify the value of high water mark and also that of DBTS, since it becomes the new current value.</p>  <p>So it means the product is working as it was designed to do, and only we need to know you cannot count on the value returned by @@DBTS to say whether tables with timestamp columns have been affected by changes or not, if those changes come in the form of a transaction log operation which is simply redone. This is the case with non-recovered/standby in-restore databases, log shipped databases, database mirroring mirrors, and Always On Availability Groups secondary replicas.</p>  <p>You’ll have to resort to some a mechanism other than the value returned by @@dbts if you want to detect that changes have occurred on a secondary replica of a database.”</p>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server 2005 upgrade to SQL Server 2014 and compatibility levels</title>
      <link>https://docs.microsoft.com/archive/blogs/ialonso/sql-server-2005-upgrade-to-sql-server-2014-and-compatibility-levels</link>
      <pubDate>Fri, 17 Apr 2015 02:38:17 GMT</pubDate>
      <dc:creator><![CDATA[Nacho Alonso Portillo]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ialonso/2015/04/17/sql-server-2005-upgrade-to-sql-server-2014-and-compatibility-levels/</guid>
      <description><![CDATA[A database currently attached to an instance of SQL Server 2005 could be either backed up (or...]]></description>
      <content:encoded><![CDATA[<p>A database currently attached to an instance of SQL Server 2005 could be either backed up (or detached), and later restored (or attached) on top of an instance of SQL Server 2014, and SQL Server 2014 won’t complain as it typically did in the past when you tried to restore (or attach) databases across database engines more distant than n-2 major versions.</p>  <p>With SQL Server 2014, it is also possible and supported by the Setup code, to do an in-place upgrade of an existing instance of SQL Server 2005 without having to upgrade it first to any intermediate version (2008/2008R2/2012) which would put it in the n-2 range.</p>  <p>The supportability of those upgrade methods (backup/restore, detach/attach, or in-place upgrade) are documented in the “SQL Server 2014 Support for SQL Server 2005” section of the <a href="https://msdn.microsoft.com/en-us/library/ms143393(v=sql.120).aspx">Supported Version and Edition Upgrades</a> topic in he documentation.</p>  <p>And there is a note in it which reads “When a SQL Server 2005 database is upgraded to SQL Server 2014, the database compatibility level will be changed from 90 to 100. (In SQL Server 2014, valid values for the database compatibility level are 100, 110 and 120.)”</p>  <p>Because I had to investigate how this worked internally to provide an authoritative answer to the question asked by a customer who wanted to know what happened with databases he had in instances of SQL Server 2005 whose compatibility level set to 80, I’ll share my findings here.</p>  <p>When a database is upgraded from a previous version to SQL Server 2014, there’s an upgrade process which sequentially executes a chain of upgrade processes to get it from whatever version it was, up to what the storage engine in 2014 is coded to work with.</p>  <p>The more recent the version of the legacy database is the lesser processes will have to be executed during that upgrade phase.</p>  <p>Assuming your starting version is SQL Server 2005, it will execute (as far as the compatibility level upgrade goes):</p>  <ol>   <li>one function (the one that would bring it to the SQL Server 2008/2008R2 level) which upgrades the compatibility level of the database to 80 if it was set to a value lower than that. Or to 100 if the database being upgraded is either TEMPDB or MODEL (these cases only happen during an in-place upgrade)</li>    <li>one function (the one that would bring it to the SQL Server 2012 level) which upgrades the compatibility level of the database to 90 if it was set to a value lower than that. Or to 110 if the database being upgraded is either TEMPDB or MODEL</li>    <li>one function (the one that would bring it to the SQL Server 2014 level) which upgrades the compatibility level of the database to 100 if it was set to a value lower than that. Or to 120 if the database being upgraded is either TEMPDB or MODEL</li> </ol>  <p>So, for example, if your database in SQL Server 2005 had its compatibility level set to 70 or 80, and you don’t bump it up before upgrading it to SQL Server 2014, the upgrade process will do it for you.</p>]]></content:encoded>
    </item>
    <item>
      <title>How to identify whether a database has participated in a cross-database transaction or in a distributed transaction</title>
      <link>https://docs.microsoft.com/archive/blogs/ialonso/how-to-identify-whether-a-database-has-participated-in-a-cross-database-transaction-or-in-a-distributed-transaction</link>
      <pubDate>Fri, 10 Apr 2015 07:42:28 GMT</pubDate>
      <dc:creator><![CDATA[Nacho Alonso Portillo]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ialonso/2015/04/10/how-to-identify-whether-a-database-has-participated-in-a-cross-database-transaction-or-in-a-distributed-transaction/</guid>
      <description><![CDATA[When customers evaluate using Database Mirroring or AlwaysOn Availability Groups as a HA/DR solution...]]></description>
      <content:encoded><![CDATA[<p>When customers evaluate using Database Mirroring or AlwaysOn Availability Groups as a HA/DR solution to protect one or more of their databases, there comes a point where they come to know there exists one documented limitation with the use of those technologies because of which it is not supported to protect databases that participate in <a href="https://msdn.microsoft.com/en-us/library/ms366279.aspx">cross-database or distributed transactions.</a></p>  <p>Next question I typically get is: How do I know whether any of the databases which I’m trying to protect participates or has participated in one of those two types?</p>  <p>The answer to that question is in the transaction log of the databases you are planning to protect. Whenever a cross-database or distributed transaction is committed, the <a href="https://en.wikipedia.org/wiki/Two-phase_commit_protocol">commit happens in two phases</a>. In the first phase, all involved resource managers (or databases, if it’s a cross-database transaction) participating in the transaction need to vote yes/no to the prepare request sent by the coordinator. For a SQL Server database, the fact that the database voted yes to commit is reflected in its transaction log through the write of a LOP_PREP_XACT operation.</p>  <p>So, if we find at least one record of that type in the transaction log of our database, we can tell for sure, that database has participated in a cross-database or distributed transaction. But, in the event we want to know in more detail, can we tell whether it was one or the other?</p>  <p>The answer is yes.</p>  <p>It happens that the PREP_XACT type of log operation has room for a couple of fields which are only used for cross-database transactions: “Master DBID” and “Master XDESID” (XDESID standing for transaction descriptor identifier.) They include the database id of the one database acting as the coordinator, and the descriptor of the transaction in that coordinating database. Since those two fields are useless in the context of a distributed transaction, in that case they are left empty.</p>  <p>So, if you want to find out whether there is evidence in the transaction log of a given database that it has participated in a cross database transaction, then you can set yourself in the context of that database and run the following batch:</p>  <p><font face="Consolas">if exists(select * from fn_dblog(NULL, NULL) where Operation = 'LOP_PREP_XACT' and [Master DBID] &lt;&gt; 0)</font></p>  <p><font face="Consolas">print 'Based on the active part of the transaction log read, there is evidence that this database has participated in cross-database transactions.'</font></p>  <p><font face="Consolas">else</font></p>  <p><font face="Consolas">print 'Based on the active part of the transaction log read, there is no evidence of this database having participated in cross-database transactions.'</font></p>  <p>You can use the following alternative predicate and it will work just the same:</p>  <p><font face="Consolas">Operation = 'LOP_PREP_XACT' and [Master XDESID] &lt;&gt; '0000:00000000'</font></p>  <p>As for finding out evidence of your database having transactions which were coordinated by a DTC (aka distributed transactions), run this one below:</p>  <p><font face="Consolas">if exists(select * from fn_dblog(NULL, NULL) where Operation = 'LOP_PREP_XACT' and [Master DBID] = 0)</font></p>  <p><font face="Consolas">print 'Based on the active part of the transaction log read, there is evidence that this database has participated in distributed transactions.'</font></p>  <p><font face="Consolas">else</font></p>  <p><font face="Consolas">print 'Based on the active part of the transaction log read, there is no evidence of this database having participated in distributed transactions.'</font></p>  <p>The following WHERE predicate would also do the trick:</p>  <p><font face="Consolas">Operation = 'LOP_PREP_XACT' and [Master XDESID] = '0000:00000000'</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Why is everyone classified in the internal workgroup?</title>
      <link>https://docs.microsoft.com/archive/blogs/ialonso/why-is-everyone-classified-in-the-internal-workgroup</link>
      <pubDate>Wed, 25 Feb 2015 08:45:57 GMT</pubDate>
      <dc:creator><![CDATA[Nacho Alonso Portillo]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ialonso/2015/02/25/why-is-everyone-classified-in-the-internal-workgroup/</guid>
      <description><![CDATA[A PFE colleague recently posted a question describing what seemed like a weird and unexpected...]]></description>
      <content:encoded><![CDATA[<p>A PFE colleague recently posted a question describing what seemed like a weird and unexpected situation he observed while he was onsite in one customer.</p>  <p>From SQL Server Management Studio, every single entry in the Processes section of the Activity Monitor showed as being classified as the “internal” in the “Workload Group” column, just like the screenshot below shows:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/54/98/metablogapi/7144.ActivityMonitor_301515CD.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-98-metablogapi/7144.ActivityMonitor_5F00_301515CD.png"><img title="ActivityMonitor" style="border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px" border="0" alt="ActivityMonitor" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/54/98/metablogapi/3884.ActivityMonitor_thumb_0AADB310.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-54-98-metablogapi/3884.ActivityMonitor_5F00_thumb_5F00_0AADB310.png" width="804" height="251" /></a></p>  <p>None of the reasons exposed by Bob in <a href="https://blogs.msdn.com/b/psssql/archive/2009/02/23/how-it-works-resource-governor-internal-group.aspx">How It Works: Resource Governor ‘INTERNAL’ Group</a> seemed appropriate for this particular case, since my colleague was observing it wasn’t a temporary condition at all.</p>  <p>What that post doesn’t explain is that there are two possible conditions under which each and EVERY session is classified as internal for their whole existence. Those two reasons are when the instance monitored corresponds to:</p>  <ol>   <li>an Enterprise SKU with trace flag 8040 enabled via a –T startup parameter, or </li>    <li>an SKU for which RG is disabled (ie anything other than Evaluation, Developer, or Enterprise editions) </li> </ol>  <p>In either of those two cases, every session is classified in the same internal group, and never changes to any other (whether default or a user-defined one.)</p>]]></content:encoded>
    </item>
    <item>
      <title>sys.dm_exec_requests showing negative values for total_elapsed_time, wait_time, or any other column it exposes as an integer (int) data type</title>
      <link>https://docs.microsoft.com/archive/blogs/ialonso/sys-dm_exec_requests-showing-negative-values-for-total_elapsed_time-wait_time-or-any-other-column-it-exposes-as-an-integer-int-data-type</link>
      <pubDate>Fri, 06 Feb 2015 08:17:43 GMT</pubDate>
      <dc:creator><![CDATA[Nacho Alonso Portillo]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ialonso/2015/02/06/sys-dm_exec_requests-showing-negative-values-for-total_elapsed_time-wait_time-or-any-other-column-it-exposes-as-an-integer-int-data-type/</guid>
      <description><![CDATA[In the case of that DMV (and probably in many other) the problem is that the internal value which...]]></description>
      <content:encoded><![CDATA[<p>In the case of that DMV (and probably in many other) the problem is that the internal value which populates the column (total_elapsed_time, or open_transaction_count, or open_resultset_count for that matter) is returned as a ULONG (32bit unsigned integer covering a range of values spanning 0 to 4294967295 decimal.) </p>  <p>However, the GetRow method of the internal table valued function sysrequests grabs that value and stores it into a CXVariant of type XVT_I4 which corresponds to a 32 signed integer covering the range from -2147483648 through 2147483647. </p>  <p>Therefore the following sequence of bits   <br />01111111 11111111 11111111 11111111    <br />both as a ULONG or a LONG represents the same decimal value: 2147483647. </p>  <p>But adding one to it results in   <br />10000000 00000000 00000000 00000000    <br />which as ULONG represents decimal 2147483648, but as a LONG represents -2147483648. </p>  <p>So, as a workaround, for columns with that problem you can refer to them like this: </p>  <p><font face="Consolas">case when total_elapsed_time &lt; 0 then 2147483647+(2147483649+total_elapsed_time) else total_elapsed_time end as total_elapsed_time</font> </p>  <p>and that way you always get the correct unsigned positive integer representation of whatever value, even when the DMV returns a negative signed representation. </p>  <p>Thanks, </p>  <p>Nacho</p>]]></content:encoded>
    </item>
    <item>
      <title>Microsoft SQL Server 2008 R2 Best Practice Analyzer fails with “Engine - Login does not exist or is not a member of the System Administrator role”</title>
      <link>https://docs.microsoft.com/archive/blogs/ialonso/microsoft-sql-server-2008-r2-best-practice-analyzer-fails-with-engine-login-does-not-exist-or-is-not-a-member-of-the-system-administrator-role</link>
      <pubDate>Wed, 04 Feb 2015 14:09:51 GMT</pubDate>
      <dc:creator><![CDATA[Nacho Alonso Portillo]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ialonso/2015/02/04/microsoft-sql-server-2008-r2-best-practice-analyzer-fails-with-engine-login-does-not-exist-or-is-not-a-member-of-the-system-administrator-role/</guid>
      <description><![CDATA[If the Windows account you are using for SQL BPA to connect and analyze an instance of SQL Server...]]></description>
      <content:encoded><![CDATA[<p>If the Windows account you are using for SQL BPA to connect and analyze an instance of SQL Server Database Engine doesn’t have an individual login created in the instance and that login is a member of the System Administrator server role, you will get that error, even if the login has been made a member of sysadmin via its membership to a Windows Group login which is member of sysadmin.</p>  <p>This is a flaw in the UA tool and there’s no current fix for it, neither plans to get it solved in the near future. So, proceed with the workaround which consist of creating a login for the account, and making it a member of sysadmin server role.</p>]]></content:encoded>
    </item>
    <item>
      <title>Do the 10GB DB size limit in SQL Server Express SKUs also apply to TempDB?</title>
      <link>https://docs.microsoft.com/archive/blogs/ialonso/do-the-10gb-db-size-limit-in-sql-server-express-skus-also-apply-to-tempdb</link>
      <pubDate>Wed, 04 Feb 2015 14:00:17 GMT</pubDate>
      <dc:creator><![CDATA[Nacho Alonso Portillo]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ialonso/2015/02/04/do-the-10gb-db-size-limit-in-sql-server-express-skus-also-apply-to-tempdb/</guid>
      <description><![CDATA[No, it doesn’t. The CheckSize function from the file manager class, which is called when a file is...]]></description>
      <content:encoded><![CDATA[<p>No, it doesn’t. The CheckSize function from the file manager class, which is called when a file is grown or shrinked skips checking for the limits imposed by the SKU when the file correspond to the master, tempdb, or model system databases.</p>  <p>For further information about the “Maximum Relational Database Size” limit imposed by every SKU, refer to the list of <a href="https://msdn.microsoft.com/en-us/library/cc645993.aspx#CrossBoxScale">Cross-Box Scale Limits section of the Features Supported by the Editions of SQL Server 2014</a> topic in the documentation of the product.</p>]]></content:encoded>
    </item>
    <item>
      <title>Got a read only database and the contents of sys.dm_db_index_usage_stats.last_user_update contains today’s date. How’s that possible?</title>
      <link>https://docs.microsoft.com/archive/blogs/ialonso/got-a-read-only-database-and-the-contents-of-sys-dm_db_index_usage_stats-last_user_update-contains-todays-date-hows-that-possible</link>
      <pubDate>Fri, 03 Oct 2014 12:08:00 GMT</pubDate>
      <dc:creator><![CDATA[Nacho Alonso Portillo]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ialonso/2014/10/03/got-a-read-only-database-and-the-contents-of-sys-dm_db_index_usage_stats-last_user_update-contains-todays-date-hows-that-possible/</guid>
      <description><![CDATA[Any attempt to update the index (via any DML statement) updates that index usage statistics as part...]]></description>
      <content:encoded><![CDATA[<p>Any attempt to update the index (via any DML statement) updates that index usage statistics as part of the query scan setup/initialization, even before the iterator&rsquo;s GetRow method is invoked (i.e. before the iterator attempts to actually insert, delete or update a single row.) In the case of a R/O database, it could happen that there are DML statements trying to make any modifications which will eventually fail with exception 3906 &ldquo;Failed to update database "%.*ls" because the database is read-only.&rdquo;, but before they fail the index/indexes potentially affected by the DML get their usage stats updated.</p>]]></content:encoded>
    </item>
    <item>
      <title>Standard edition of SQL Server supports only a 2 node cluster, but will it support multi-subnet clustering or do we need Enterprise edition?</title>
      <link>https://docs.microsoft.com/archive/blogs/ialonso/standard-edition-of-sql-server-supports-only-a-2-node-cluster-but-will-it-support-multi-subnet-clustering-or-do-we-need-enterprise-edition</link>
      <pubDate>Fri, 03 Oct 2014 12:03:43 GMT</pubDate>
      <dc:creator><![CDATA[Nacho Alonso Portillo]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/ialonso/2014/10/03/standard-edition-of-sql-server-supports-only-a-2-node-cluster-but-will-it-support-multi-subnet-clustering-or-do-we-need-enterprise-edition/</guid>
      <description><![CDATA[Even though the Features Supported by the Editions of SQL Server 2014 doesn’t have any indication on...]]></description>
      <content:encoded><![CDATA[<p>Even though the <a href="https://technet.microsoft.com/en-us/library/cc645993(v=sql.120).aspx">Features Supported by the Editions of SQL Server 2014</a> doesn’t have any indication on which SKUs the multi-subnet FCIs improvement is available, after having confirmed with the program manager who owned the stretch cluster improvement back in 2008, the answer to the question is: multi-subnet failover clustered instances is available and supported on all editions where SQL clustering is available.</p>]]></content:encoded>
    </item>
  </channel>
</rss>