For many years, SQL Server administrators have tried to ensure their systems run smoothly by executing DBCC commands against their production databases. As workloads have grown, this has become an issue with resource contention with production users. Backups have had the same issue, and the smart DBAs have offloaded this work to another server. With the more recent versions of SQL Server, we could move backups and DBCC checks to secondary systems.
The problem with this has been licensing. Microsoft has required a secondary node (often referred to as passive, which Allan Hirt notes is incorrect) to be separately licensed if any activity is performed, which includes DBCC. We could have a secondary system receiving data as a part of Software Assurance licensing, but no activity on this system. A common misunderstanding, and a long and often raised complaint by customers.
That has changed as of Nov 1, 2019. Microsoft posted a blog that now lets us use those secondary systems for a number of purposes. We can now run DBCC, log and full backups, and monitor resource usage data on a secondary system without requiring licensing. What’s more, we can now have multiple secondary systems that are not separately licensed for both HA and DR purposes.
Perhaps best of all, this isn’t limited to SQL Server 2019. This is in effect for all supported SQL Server systems. With SQL Server 2012 in Extended Support, I would assume this would apply there. The caveat is that you need Software Assurance (SA) on the licensed systems. You don’t get this for free, but many organizations get SA to allow them to upgrade, and this will be a welcome addition to the value for SA.
I think this should have been the way that licensing worked forever, as I’d argue DBCC isn’t a workload, but a verification that things are working appropriately. SQL Server should detect this stuff automatically to me, but since it doesn’t, this isn’t any active workload. Neither are backups. Finally, Microsoft agrees.