<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>SQL Server Consulting &#8211; Straight Path Solutions</title>
	<atom:link href="http://straightpathsql.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://straightpathsql.com/</link>
	<description>Database Managed Services and Pain Relief. Sleep at night!</description>
	<lastBuildDate>Thu, 28 May 2026 23:31:02 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>http://straightpathsql.com/wp-content/uploads/2020/02/cropped-straight-path-solutions-logo-square-32x32.png</url>
	<title>SQL Server Consulting &#8211; Straight Path Solutions</title>
	<link>https://straightpathsql.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>SQL Server: Database or Data Platform?</title>
		<link>http://straightpathsql.com/archives/2026/05/sql-server-database-or-data-platform/</link>
					<comments>http://straightpathsql.com/archives/2026/05/sql-server-database-or-data-platform/#respond</comments>
		
		<dc:creator><![CDATA[Buck Woody]]></dc:creator>
		<pubDate>Fri, 29 May 2026 11:30:00 +0000</pubDate>
				<category><![CDATA[Chief Data Officer]]></category>
		<category><![CDATA[Thoughts]]></category>
		<category><![CDATA[Business Intelligence ETL]]></category>
		<category><![CDATA[Cloud Analytics]]></category>
		<category><![CDATA[Data Estate]]></category>
		<category><![CDATA[Data Strategy]]></category>
		<category><![CDATA[Database Architecture]]></category>
		<category><![CDATA[Database Platform]]></category>
		<category><![CDATA[DuckDB]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server History]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31309</guid>

					<description><![CDATA[<p>I&#8217;ve been working with technology for a very long time. Long enough that I have seen the words &#8220;data base&#8221; mean exactly that: a base body of data. The term implied no specific format, no particular layout, or even an engine to process it. Just raw data used for a given storage of information.  Just ... <a title="SQL Server: Database or Data Platform?" class="read-more" href="http://straightpathsql.com/archives/2026/05/sql-server-database-or-data-platform/" aria-label="Read more about SQL Server: Database or Data Platform?">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/05/sql-server-database-or-data-platform/">SQL Server: Database or Data Platform?</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>I&#8217;ve been working with technology for a very long time. Long enough that I have seen the words &#8220;data base&#8221; mean exactly that: a base body of data. The term implied no specific format, no particular layout, or even an engine to process it. Just raw data used for a given storage of information. </em></p>



<h2 class="wp-block-heading" id="h-just-databases">Just Databases</h2>



<p>Early on in my mainframe days I worked at the Kenedy Space Center for NASA here in Florida. My first foray into databases on a mainframe was IBM&#8217;s Information Management System (IMS). It was a hierarchical database and transaction manager that is still in use, even though it wa developed in the 1960s to track parts for NASA&#8217;s Apollo program. Yes, primitive now, but at the time it eventually became a staple for over 95% of the Fortune 1000. It&#8217;s still in use, processing billions of transactions every day, even now.&nbsp;</p>



<p>I also used a data base software application called SQL/DS on the mainframe, which became DB2. I still have a book around my office somewhere with the &#8220;System R&#8221; logo on it where it was developed at IBM.</p>



<p>In all of those cases, data was just data. We moved from COBOL flat-files to an engine over relational tables, but it was just data. Applications (green-screen terminals, thank you very much) put data in, and took data out. The function of the &#8220;database&#8221; was to do that as quickly, efficiently, and securly as possible.</p>



<h2 class="wp-block-heading" id="h-surely-you-can-do-better-than-that">Surely You Can do Better than That</h2>



<p>And then I disovered and managed and used Oracle. Oracle had *Forms*. It had a reporting system , all built in. And then they added Java! And all kinds of new data types outside text, dates and numbers.&nbsp;</p>



<p>It was this kind of thing, pioneered by companies like Oracle, that allowed organizations to think about centering their data estate (that became a thing) around a database platform.</p>



<h2 class="wp-block-heading" id="h-sql-server-the-little-engine-that-could">SQL Server &#8211; the Little Engine That Could</h2>



<p>In the late 1980&#8217;s, in addition to the mainframes NASA used, we also had IBM&#8217;s OS/2. I joined the team that focused on this product, and one of the interesting applications it had was a command-line based database called &#8220;Microsoft SQL Server&#8221; &#8211; version 1.0. It was even client-server, meaning the database engine could run on one computer and another computer (the client) could access it over the (Token Ring) network. I was fascinated with the &#8220;Transact-SQL&#8221; dialiect of SQL it used.&nbsp;</p>



<p>IBM and Microsoft broke up over OS/2, and I started my journey with Windows operating sytems, including &#8220;Windows NT Advanced Server&#8221;. By now I was using SQL Server version 6+. While Microsoft added Stored Procedures and other engine features, they were just that, engine features. For a database engine.</p>



<p>Except one: The opening of the system with the Replication feature. The ability to send some or all of the data in one database to another using a dedicated system. Data could now be used differently by entirely different application needs. And companies started thinking about the database engine a little differently.</p>



<h2 class="wp-block-heading" id="h-sql-server-let-s-be-a-platform">SQL Server &#8211; Let&#8217;s Be a Platform</h2>



<p>Then came SQL Server version 7 &#8211; a completely rewrite of the platform but with (mostly) backwards compatibility. It included not only a highly capable database engine with a wide suite of programability features, but Microsoft started adding things right in the box that drastically extended the ability of the system to host business-critical data estate functions. One of the most impressive was &#8220;OLAP Services&#8221;, which as the name suggests, was a full Business Intelligence (then a pretty new term) server. To fill, process and orchestrate that system, they added &#8220;Data Transformation Services&#8221; or DTS, a feature that was pushed by us administrators far past its intended purpose of Extract, Transform and Load (ETL).&nbsp;</p>



<h2 class="wp-block-heading" id="h-sql-server-the-kitchen-sink">SQL Server &#8211; The Kitchen Sink</h2>



<p>Fast forward to SQL Server 2005, and we got all the &#8220;S&#8217;s&#8221;: Analysis Services for BI, Reporting Services for, well, reporting, and Integration Services which is actually hard to pin down. Integration Services does so much that I&#8217;ve seen pure Oracle shops buy SQL Server just to use Integration Services for everything from data transforms and movement to a full job system.</p>



<p>Then I Joined Microsoft on the SQL Server team. What an eye-opener for me. This product was massive and had grown FAR beyond a database. You scaled out the data functions to multiple servers, with complicated disk arrangements and multiple network cards.</p>



<p>And from there, more and more features showed up in heavy and rapid fashion. We added every data type you can think of: you could store whole Microsoft Office documents, music, pictures, and search them all. Full text. In-memory.&nbsp; We added not only geographic datatypes, but geo-spatial datatypes. I had one client using that feature to map out their entire warehouse, down to the shelf dimensions so they could find exactly which boxes would fit where for the most efficient storage.&nbsp; In a database!</p>



<p>I moved from the SQL Server engineering team to work as a technical pro at Microsoft in the field, I then joined the team that built Azure, and then I joined the team that was implementing Machine Learning at Microsoft. And of course then that went into SQL Server. You could (and still can) run your own self-contained AI constructs and solutions and applications and never leave SQL Server.&nbsp;</p>



<p>I was also part of the ill-fated &#8220;SQL Server Big Data Clusters&#8221; &#8211; a system ahead of its time that could scale from on-premsises to the cloud, with so many features running in Linux an Kubernetes no less.</p>



<p>Companies large and small, around the world, built their business logic, data processing and analysis, reporting, and now even AI into the SQL Server product.</p>



<p>But it got a bit, well, overwhelming. Having everything, and I mean everything, in the box can make for complex upgrades, complicated troubleshooting, and make it hard to keep up with what the system can really do.&nbsp;</p>



<p>Adding to this, some of the features are more mature and stable than others. Some very much so.&nbsp;</p>



<h2 class="wp-block-heading" id="h-sql-server-just-a-database">SQL Server &#8211; Just a Database</h2>



<p>Things, as they always do, have changed. Developers are now using scale-out, cloud-first, micro-services, per-server data processing, which feeds much larger more spread-out systems. Data storage is now separated away from (as in my COBOL days of old) from the processing engines that used it. Vendors &#8211; even Microsoft &#8211; tended to focus on larger distributed sytems.</p>



<p>The expensive licenses of SQL Server doesn&#8217;t hold the same value if you&#8217;re just using it as a database.&nbsp;Postgres is &#8220;free&#8221; (not really, but that&#8217;s the mindshare) and if your data is small you can use SQLite (love me some SQLite) and the stunningly amazing DuckDB. DuckDB, for me, holds the same excitement level as the SQL Server version 7 days. The little engine that could.&nbsp;</p>



<h2 class="wp-block-heading" id="h-sql-server-so-wither-forth">SQL Server &#8211; So Wither Forth?</h2>



<p><em>In some clients I work with, they feel they are being left behind if they don&#8217;t move to the newest cloud analytics platforms currently battling for their data budget.</em></p>



<p>In some cases, after we do a deep audit of their needs, SQL Server still fills the bill quite well. Yes, it needs to be designed and implemented properly, but if you do, there&#8217;s a lot going for it. Yes, pricing is pretty high, but compared to cloud costs, it can actually be significantly cheaper.</p>



<p>So &#8211; will SQL Server be your &#8220;Platform in a Box&#8221; or cast aside for cheaper, smaller, faster &#8220;Just a Database&#8221; products? I&#8217;ll fall back here on the most famous saying in the Database Administrator (DBA) world: &#8220;It Depends&#8221;. Sorry, but there it is. I think for many, many shops, if you take the time to plan, implement and manage it well, SQL Server cannot be beat. It really can&#8217;t.&nbsp;</p>



<p>For some workloads, however, distributed storage and compute is a great idea. If you haven&#8217;t investigated  with some of the major systems, I highly recommend you do. Oh, and while you&#8217;re at it, play around with <a href="https://duckdb.org/" type="link" id="https://duckdb.org/" target="_blank" rel="noreferrer noopener">DuckDB</a>. It will amaze you with what it can do, directly over storage like Delta/Parquet. And while you&#8217;re at it, take a look at some of the newer systems that bypass the &#8220;Reporting&#8221; layer entirely. I&#8217;ve seen some lately that are an absolute sea-change. </p>



<p><strong>Everything old is new again. </strong></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/05/sql-server-database-or-data-platform/">SQL Server: Database or Data Platform?</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/05/sql-server-database-or-data-platform/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server Log File Full at 2 TB Max with CDC: How We Recovered</title>
		<link>http://straightpathsql.com/archives/2026/05/sql-server-log-file-full-at-2-tb-max-with-cdc-how-we-recovered/</link>
					<comments>http://straightpathsql.com/archives/2026/05/sql-server-log-file-full-at-2-tb-max-with-cdc-how-we-recovered/#comments</comments>
		
		<dc:creator><![CDATA[Jeff Iannucci]]></dc:creator>
		<pubDate>Sat, 16 May 2026 01:12:49 +0000</pubDate>
				<category><![CDATA[Case of the Week]]></category>
		<category><![CDATA[Troubleshooting]]></category>
		<category><![CDATA[AWS]]></category>
		<category><![CDATA[CDC]]></category>
		<category><![CDATA[Change Data Capture]]></category>
		<category><![CDATA[log_reuse_wait_desc]]></category>
		<category><![CDATA[RDS]]></category>
		<category><![CDATA[SQL Server Transaction Log]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31278</guid>

					<description><![CDATA[<p>Quick summary For several versions of SQL Server, the maximum log file size was noted at 2 TB. If you ever reach that limit you could find yourself in a Disaster Recovery scenario. Context We received an emergency call from a client that noted that their SQL Server instances was unresponsive. (This was an Amazon ... <a title="SQL Server Log File Full at 2 TB Max with CDC: How We Recovered" class="read-more" href="http://straightpathsql.com/archives/2026/05/sql-server-log-file-full-at-2-tb-max-with-cdc-how-we-recovered/" aria-label="Read more about SQL Server Log File Full at 2 TB Max with CDC: How We Recovered">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/05/sql-server-log-file-full-at-2-tb-max-with-cdc-how-we-recovered/">SQL Server Log File Full at 2 TB Max with CDC: How We Recovered</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading" id="h-quick-summary"><strong>Quick summary</strong></h2>



<p>For several versions of SQL Server, the maximum log file size was noted at 2 TB. If you ever reach that limit you could find yourself in a <a href="https://straightpathsql.com/archives/tag/disaster-recovery/" type="post_tag" id="302">Disaster Recovery</a> scenario.</p>



<h2 class="wp-block-heading" id="h-context"><strong>Context</strong></h2>



<p>We received an emergency call from a client that noted that their SQL Server instances was unresponsive. (This was an Amazon RDS instance, although that didn’t play much into the ultimate root cause.) The client had some technical staff already looking at the issue, and when we joined the call we were informed that the transaction log for their main production database was completely full, and all transactional activity in the database had stopped.</p>



<p>For many versions, SQL Server has had a default maximum files size of 2 TB on transaction log files. Even though newer versions like SQL Server 2022 and 2025 may say “unlimited”, they aren’t truly unlimited. The current documentation notes that transaction log files still have <a href="https://learn.microsoft.com/en-us/sql/sql-server/maximum-capacity-specifications-for-sql-server?view=sql-server-ver17">a 2 TB maximum file size</a>.</p>



<h2 class="wp-block-heading" id="h-investigation-why-log-reuse-wait-desc-showed-replication">Investigation: Why log_reuse_wait_desc Showed REPLICATION</h2>



<p>After a quick review, we confirmed that the transaction log for their main production database was completely full, and had reached the maximum size of 2 TB. The log reuse description in sys.databases showed “REPLICATION” as the cause for the log being full.</p>



<p>This instance did not have replication, but the client did have Change Data Capture (CDC) enabled on numerous tables, which also shows up as “REPLICATION” in the lof reuse information. We discovered the CDC capture and cleanup jobs had not been running for weeks, which caused the transaction log to hold transactions and not mark them for reuse.</p>



<p>Unfortunately, before we joined the call, the client had enabled CDC thinking that would “clean up the log”, but what that did in the immediate moment was fill up the log faster as it generated more transactions to update data in the CDC support tables.</p>



<p>So now the file was already at the 2 TB limit, meaning it couldn’t be grown further. But here’s the biggest problem: any other solution to reduce the log file size at this point would not work because…it would involve a logged transaction. And the log was full.</p>



<p>Possible solutions include:</p>



<ul class="wp-block-list">
<li>Disable CDC &#8211; that’s a logged transaction</li>



<li>Add another log file – that’s also a logged transaction</li>



<li>Declare it a disaster and restore the entire database from the most recent backups</li>
</ul>



<h2 class="wp-block-heading" id="h-the-fix-kill-another-transaction-and-add-another-log-file"><strong>The fix – kill another transaction and add another log file</strong></h2>



<p>We wanted to avoid restoring the database from backup, as that could mean further hours of downtime as well as more lost transactions. We determined the best possible solution was to try to Kill one of the smaller queries using the transaction log, and then quickly add another log file. It took several tries, but eventually we were able to kill one and add a second transaction log file, which allowed other transactions to start completing again.</p>



<p>Something like this:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="sql" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">BEGIN TRANSACTION;

/* Kill session 99 to release any locks/log space it may be holding */

 KILL 99;

/* Add a second log file to DatabaseName on a different drive */

ALTER DATABASE [DatabaseName]

ADD LOG FILE (

NAME = N'DatabaseName_log2'

, FILENAME = N'L:\ Logs\DatabaseName_log2.ldf'

, SIZE = 64MB

, MAXSIZE = 2TB

, FILEGROWTH = 64MB);

 COMMIT TRANSACTION;</pre>



<p>After we had the second log file we were able to monitor the progress for CDC and the drive space used by all the transactions recorded. This took a few hours but eventually caught up, and afterwards we emptied and removed the extra transaction log file and resized the original log file to reduce the massive amount of Virtual Log Files (VLFs). We also added a job to alert us in case the transaction log became more than 50% full to avoid another occurrence of this issue.</p>



<p>We were very fortunate, because had we not found a tiny windows to add another log file we would have had no choice but restore from backups. While you&#8217;re reading this, make sure your backups are actually ready for restores &#8211; check out our free tool, <a href="https://straightpathsql.com/archives/2024/08/introducing-sp_checkbackup-check-your-sql-server-backups-for-recoverability-issues/" type="post" id="29505">sp_CheckBackup</a> to make sure.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p>The post <a href="http://straightpathsql.com/archives/2026/05/sql-server-log-file-full-at-2-tb-max-with-cdc-how-we-recovered/">SQL Server Log File Full at 2 TB Max with CDC: How We Recovered</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/05/sql-server-log-file-full-at-2-tb-max-with-cdc-how-we-recovered/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Updates for all sp_Check tools – April 2026</title>
		<link>http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/</link>
					<comments>http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/#respond</comments>
		
		<dc:creator><![CDATA[Jeff Iannucci]]></dc:creator>
		<pubDate>Thu, 30 Apr 2026 23:06:23 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Free Tools]]></category>
		<category><![CDATA[sp_check]]></category>
		<category><![CDATA[sp_checkAG]]></category>
		<category><![CDATA[sp_CheckBackup]]></category>
		<category><![CDATA[sp_CheckSecurity]]></category>
		<category><![CDATA[sp_CheckTempdb]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31255</guid>

					<description><![CDATA[<p>It&#8217;s time again for our monthly updates of our FREE sp_Check stored procedures, so here are the April updates. This month we have way more updates than in March, including recommendations from the Issues section of GitHub, so thank you to all who contributed! We also have been working on the content pages referenced by ... <a title="Updates for all sp_Check tools – April 2026" class="read-more" href="http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/" aria-label="Read more about Updates for all sp_Check tools – April 2026">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/">Updates for all sp_Check tools – April 2026</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>It&#8217;s time again for our monthly updates of our FREE sp_Check stored procedures, so here are the April updates.</p>



<p>This month we have way more updates than in March, including recommendations from the Issues section of GitHub, so thank you to all who contributed!</p>



<p>We also have been working on the content pages referenced by the URLs in the stored procedures. We&#8217;ve been going through them all to make sure the content was more helpful. Lots of the previous content pages have had simple sentences that weren&#8217;t very descriptive, so we&#8217;ve been filling those out to provide more explanations.</p>



<p>This month the updates are mostly corrections, although there were additional checks added to  <strong>sp_CheckBackup</strong> and <strong>sp_CheckTempdb</strong>. </p>



<p>We hope these new updates can help you, especially if you’ve never used these stored procedures. Here are the updates for April 2026, with links to the GitHub repositories where you can download the latest versions.</p>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckAG">sp_CheckAG</a></p>



<ul class="wp-block-list">
<li>CORRECT omission of DTC Support check for SQL Server 2016</li>



<li>CORRECT CPU configuration details (CheckID 113)</li>



<li>CORRECT IP Address details for case sensitivity (CheckID 119)</li>



<li>CORRECT check for recent events to account for AlwaysOn_health XE being stopped (CheckID 426)</li>



<li>CORRECT incorrect logic for determining Seeding Mode</li>



<li>ADD check for AlwaysOn_health XE being stopped  (CheckID 429)</li>



<li>UPDATE check for Endpoint Owner to use SID in case sa login renamed (CheckID 406)</li>



<li>UPDATE check for AG Owner to use SID in case sa login renamed (CheckID 407)</li>



<li>UPDATE check for replica database not joined for clarity (CheckID 413)</li>



<li>UPDATE check for session timeout to 2 checks &#8211; one at default, one below (CheckID 415)</li>



<li>UPDATE check for offline listener to include IP and state (CheckID 417)</li>



<li>UPDATE check for replicas not failover ready to include Server Instance (CheckID 421)</li>



<li>ADD EndpointOwnerSID to Endpoints result set</li>



<li>ADD AGOwnerSID to Availability Group result set</li>



<li>CORRECT typos in CheckID 410, 415</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckBackup">sp_CheckBackup</a></p>



<ul class="wp-block-list">
<li>ADD EncryptionType column to @Mode = 2</li>



<li>ADD CompressedBackupSizeInMB and CompressionPercent column to @Mode = 2</li>



<li>ADD check for integrity checks (CheckID 503)</li>



<li>ADD check for backup history not purged (CheckID 216)</li>



<li>ADD check for high VLFs (> 200) (CheckID 217)</li>



<li>ADD check for backups to NUL (CheckID 218)</li>



<li>CORRECTED Check for password protected backups (CheckID 215)</li>



<li>Corrected typo in CHECKID 211</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckSecurity">sp_CheckSecurity</a></p>



<ul class="wp-block-list">
<li>CHANGE check for most recent version for SQL Server security updates</li>



<li>CHANGE Issue, Details, and ActionStep data type in #Results to VARCHAR(MAX)</li>



<li>CHANGE Failed Login check to suppress error message (CheckID 330)</li>



<li>CHANGE Number of Error Logs check to suppress error message (CheckID 801)</li>



<li>CHANGE Hide Instance check to suppress error message (CheckID 348)</li>



<li>CHANGE Extended Protection check to suppress error message (CheckID 348)</li>



<li>CHANGE Force Encryption check to suppress error message (CheckID 349)</li>



<li>CORRECTED logic for creating #InvalidLogins table</li>



<li>CORRECTED incorrect ActionStep for Contained Databases (CheckID 344)</li>



<li>CORRECTED typos in ChecIDs 304, 305, 307, 310, 313, 314, 316, 321, 323, 324, 327, 330, 351, 622</li>



<li>CHANGE CheckID 801 (error log retention is at default) to CheckID 622</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckTempdb">sp_CheckTempdb</a></p>



<ul class="wp-block-list">
<li>ADD description of @Mode = 99 to @Help</li>



<li>CORRECT usage of @Size in @Help</li>



<li>CORRECT checks for Slow reads and Writes (CheckIDs 718 and 719)</li>



<li>CORRECT redundant check for tempdb file with no growth allowed (CheckID 605)</li>



<li>CORRECT redundant check for tempdb file with percentage growth (CheckID 711)</li>



<li>CORRECT redundant check for tempdb file with growth &lt; 64 MB (CheckID 712)</li>



<li>CORRECT redundant check for tempdb file with high usage (CheckID 714)</li>



<li>CORRECT logic for finding more than 8 cores (CheckID 707)</li>



<li>REMOVED redundant code for @UsagePercent</li>



<li>ADD code to avoid negative values for minimum @AvgReadStallMs and @AvgWriteStallMs</li>



<li>ADD drop of #TraceFlg before it is created</li>



<li>ADD check for more than 16 data files (CheckID 730)</li>
</ul>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/">Updates for all sp_Check tools – April 2026</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/04/updates-for-all-sp_check-tools-april-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>From &#8220;Keep it Running&#8221; to &#8220;Make it Valuable&#8221;: Why Your SQL Skills Aren’t Enough Anymore</title>
		<link>http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/</link>
					<comments>http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/#respond</comments>
		
		<dc:creator><![CDATA[Noah Locke]]></dc:creator>
		<pubDate>Fri, 10 Apr 2026 19:01:56 +0000</pubDate>
				<category><![CDATA[Noah Locke on Data]]></category>
		<category><![CDATA[Business Value of Data]]></category>
		<category><![CDATA[Career Development]]></category>
		<category><![CDATA[Data advocacy]]></category>
		<category><![CDATA[Data Leadership]]></category>
		<category><![CDATA[DBA career]]></category>
		<category><![CDATA[SQL Server]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31173</guid>

					<description><![CDATA[<p>You’ve spent a long time learning about tuning indexes, fighting deadlocks, and keeping the green lights on the physical systems and cloud deployments. You’ve got scripts that could shame half the Stack Overflow answers GPT hasn&#8217;t scraped. You know the difference between CXPACKET and CXCONSUMER without Googling. But here’s the kicker: your CIO doesn’t care ... <a title="From &#8220;Keep it Running&#8221; to &#8220;Make it Valuable&#8221;: Why Your SQL Skills Aren’t Enough Anymore" class="read-more" href="http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/" aria-label="Read more about From &#8220;Keep it Running&#8221; to &#8220;Make it Valuable&#8221;: Why Your SQL Skills Aren’t Enough Anymore">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/">From &#8220;Keep it Running&#8221; to &#8220;Make it Valuable&#8221;: Why Your SQL Skills Aren’t Enough Anymore</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>You’ve spent a long time learning about tuning indexes, fighting deadlocks, and keeping the green lights on the physical systems and cloud deployments. You’ve got scripts that could shame half the Stack Overflow answers GPT hasn&#8217;t scraped. You know the difference between CXPACKET and CXCONSUMER without Googling.</em></p>



<p><em><strong>But here’s the kicker: your CIO doesn’t care about page life expectancy. They care about data monetization.</strong></em></p>



<h2 class="wp-block-heading" id="h-the-problem-sql-server-isn-t-the-whole-playground-anymore">The Problem: <strong>SQL Server Isn’t the Whole Playground Anymore</strong></h2>



<p>Once upon a time, uptime was the crown jewel. If the server was online, you were the hero. But now? Data is flowing into cloud warehouses like Snowflake and Databricks &#8211; maybe even Microsoft Fabric. Meanwhile, Marketing spins up SaaS apps faster than you can say “linked server.” And they&#8217;ve hired or subbed out an entire analytics team that&#8217;s building Spark or Data Warehouse with Dashboards or Jupyter Notebooks that bypass you entirely.</p>



<p>And when those silos don’t talk to each other and the data doesn&#8217;t work for what they are doing? Guess who gets blamed. Yep, the DBA. You. Suddenly, you’re not the guardian of uptime; you’re the bottleneck on the road to AI progress or whatever Next Big Thing™ has your CEO&#8217;s ear.</p>



<p>The Pivot: Stop Being the Mechanic, Start Being the Architect</p>



<p>So what do you do? Sure, you can hunker down and work even harder on T-SQL and internals, but will that help? Think of it this way: Mechanics keep the engine running. Architects design solutions so that the engine powers the business.</p>



<p>In larger companies, the Chief Data Officer (CDO) role exists for one reason: to turn data into business value. But you don’t need a fancy title to start acting like one. What you do need is a strategy. That strategy is up-leveling your talents, and maybe bringing in some help.</p>



<p>But Code Though (Because You’re Still a DBA at Heart)</p>



<p>Let’s be honest: you’re not going to stop focusing on the servers and keeping everything up and running. But let&#8217;s take a look at a couple of queries to illustrate the mindshift you need.</p>



<figure class="wp-block-pullquote"><blockquote><p> I&#8217;ve always said, unless you&#8217;re in a small company, people two levels above you have no idea what you do</p></blockquote></figure>



<p>The first one is typical of a report from a monitoring tool. It says, “Hey boss, the server’s been up for 47 days.” You&#8217;ve shown your value &#8211; your systems are up and running when needed. Except….</p>



<pre class="wp-block-code"><code>--<em> Old world: </em>prove uptime SELECT sqlserver_start_time FROM sys.dm_os_sys_info;</code></pre>



<p>That doesn&#8217;t mean anything to your Leadership. I&#8217;ve always said, unless you&#8217;re in a small company, people two levels above you have no idea what you do. So, how do you map the things you do to the things Leadership cares about?</p>



<p>Well, while the monitoring Dashboards you use are probably pretty useful, they don&#8217;t tell the boss why they should care about your work. A better approach is to map the result of your work to something that drives revenue for the company. I know that sounds marketing-y. Don&#8217;t make that face. This is what they care about.</p>



<p>How about this instead:</p>



<pre class="wp-block-code"><code>SELECT s.sqlserver_start_time, COUNT(*) AS ‘CustomerPurchasesLast3Months’ FROM sys.dm_os_sys_info s CROSS JOIN dbo.Customers c JOIN dbo.Orders o ON c.CustomerID = o.CustomerID WHERE o.OrderDate &gt;= DATEADD(month, -3, GETDATE());</code></pre>



<p>&#8212;&#8212;&#8212;</p>



<p>sqlserver_start_time CustomerPurchasesLast3Months</p>



<p>2025-09-01 08:15:00 12,345</p>



<p>This says, “Hey boss, here’s how many customers bought something in the last quarter on that server that I keep running for you.”<em> Guess which one gets you invited to the strategy meeting with the Spark-ly people.</em></p>



<h2 class="wp-block-heading" id="h-be-the-data-advocate">Be the Data Advocate</h2>



<p>Being a “Data Advocate” is the new job security; <a href="https://straightpathsql.com/archives/2025/10/the-age-of-data-advocates-has-begun/" type="post" id="30093" target="_blank" rel="noreferrer noopener">some here at Straight Path say it&#8217;s always been the job</a>. The DBA who only cares about uptime is replaceable. The DBA who champions data as a business asset? That’s the one who probably sticks around, maybe even gets a promotion from time to time. <strong><em>So the next time you’re tempted to brag about your deadlock troubleshooting skills, pause. Ask yourself: How is this data making the company money?</em></strong></p>



<p>That’s the straight path to data leadership.</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/">From &#8220;Keep it Running&#8221; to &#8220;Make it Valuable&#8221;: Why Your SQL Skills Aren’t Enough Anymore</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/04/from-keep-it-running-to-make-it-valuable-why-your-sql-skills-arent-enough-anymore/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server Case of the Week: A Broken Backup Chain Blocks Migration to Azure SQL Managed Instance</title>
		<link>http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/</link>
					<comments>http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/#comments</comments>
		
		<dc:creator><![CDATA[Warren Departee]]></dc:creator>
		<pubDate>Fri, 10 Apr 2026 12:07:27 +0000</pubDate>
				<category><![CDATA[Case of the Week]]></category>
		<category><![CDATA[Azure SQL Managed Instance]]></category>
		<category><![CDATA[backup chain]]></category>
		<category><![CDATA[blob storage]]></category>
		<category><![CDATA[LSN]]></category>
		<category><![CDATA[sp_CheckBackup]]></category>
		<category><![CDATA[transaction log]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31166</guid>

					<description><![CDATA[<p>A client was preparing to move databases from on-prem to Azure SQL Managed Instance. The backup and restore process was going smoothly, full backup restored, differential restored, first log backup restored, everything lining up. Then the next transaction log restore failed due to a mismatched LSN error. The backup chain was broken. The migration was ... <a title="SQL Server Case of the Week: A Broken Backup Chain Blocks Migration to Azure SQL Managed Instance" class="read-more" href="http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/" aria-label="Read more about SQL Server Case of the Week: A Broken Backup Chain Blocks Migration to Azure SQL Managed Instance">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/">SQL Server Case of the Week: A Broken Backup Chain Blocks Migration to Azure SQL Managed Instance</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>A client was preparing to move databases from on-prem to Azure SQL Managed Instance. The backup and restore process was going smoothly, full backup restored, differential restored, first log backup restored, everything lining up. Then the next transaction log restore failed due to a mismatched LSN error. The backup chain was broken. The migration was stalled.</em></p>



<h2 class="wp-block-heading" id="h-the-investigation">The Investigation</h2>



<p><strong>The error message from Azure Managed Instance told the story right away:</strong>  “<em>The restore plan is broken because firstLsn (12345000000456700001) of log backup XXXXX is not equal to the lastLsn (12345000000123400001) restore point in time failed</em>.&#8221; If you&#8217;ve worked with SQL Server backups, you know what the LSN (Log Sequence Number) is. It&#8217;s how SQL Server knows where the last backup left off and where to start the next one, so every transaction is captured. When those numbers don&#8217;t line up, SQL Server won&#8217;t let you restore, and for good reason.</p>



<p>My client had a process in place since they were running the migration, and we were there to catch them if needed. They were going to stop backups with their third-party backup tool, then use native SQL Server backups pointed to Azure Blob Storage to build their restore chain into Managed Instance. The plan made sense.</p>



<p>I quickly grabbed our trusty community tool <a href="https://straightpathsql.com/tool/sp_checkbackup/">sp_CheckBackup</a> and ran this on the source:</p>



<pre class="wp-block-code"><code><code>SP_CheckBackup @Mode = 3, @DatabaseName = 'TheDBTHatIsErroringEvenWithTHeirPlan'</code></code></pre>



<p>Mode 3 checks for <strong>split backup chains</strong>, backups going to different locations, anything that could complicate recovery. Even though they had that plan. this sure felt like a split backup chain&#8230; My gut was right. Some log backups were taken outside of the Blob Storage backup plan, after the initial full, differential, and logs. &#8220;Rogue Backups,&#8221; we call them at Straight Path (though sometimes it gets typoed to rouge backups &#8211; so we&#8217;ve started calling them by either name.)</p>



<p><strong>Here&#8217;s what the timeline looked like:</strong></p>



<ul class="wp-block-list">
<li>12:00 PM &#8211; Full backup to Blob Storage (restored successfully)</li>



<li>6:00 PM &#8211; Differential backup to Blob Storage (restored successfully)</li>



<li>6:10 PM &#8211; Transaction log backup to Blob Storage (restored successfully)</li>



<li><strong>6:20 PM &#8211; Rogue transaction log backup taken by the third-party backup tool</strong> (not in Blob Storage)</li>



<li>7:10 PM &#8211; Next scheduled log backup to Blob Storage (FAILED to restore, LSN mismatch)</li>
</ul>



<p>That rogue backup at 6:20 PM was the problem. Even though the client had removed the database from their third-party backup policy, the backups didn&#8217;t actually stop running. That third-party log backup broke the chain that had been established in Blob Storage because it advanced the LSN past what our next Blob-based log backup expected. </p>



<h2 class="wp-block-heading" id="h-the-fix">The Fix</h2>



<p>Stop the third-party backup solution entirely before initiating backups to Blob Storage. Don&#8217;t just remove the database from the policy. Actually confirm the backups have stopped. Run our free community tool, sp_CheckBackup to verify no rogue backups are sneaking in before you start your restore chain.</p>



<h2 class="wp-block-heading" id="h-the-lesson">The Lesson</h2>



<p>In this case, my client took a fresh full and differential during the migration activity and was eventually successful, but it was painful. And this was for a 1-2GB database. Imagine this with your 2TB or even 24TB database at GO LIVE. <em>Quivers in chair.</em></p>



<p>Here&#8217;s what you should be doing if you&#8217;re planning a migration to Managed Instance (or any backup/restore migration):</p>



<ol class="wp-block-list">
<li><strong>Confirm all third-party backup tools are fully stopped</strong>, not just &#8220;removed from the policy.&#8221; Verify they are no longer touching the database. Run <a href="https://straightpathsql.com/tool/sp_checkbackup/">sp_CheckBackup</a> to confirm.</li>



<li><strong>Validate your backup chain before you start restoring.</strong> Use sp_CheckBackup @Mode = 3 to check for split chains and unexpected backup sources. If someone or something else took a backup you weren&#8217;t expecting, you want to know before you&#8217;re mid-migration, not after.</li>



<li><strong>Bring your DBA team into migration planning early.</strong> With a little coordination on a planning call, gotchas like broken backup chains can be spotted before the big day. This one could have been solved immediately if we&#8217;d been on the call when it happened. And during cutover planning, we could have flagged the risk before it became a problem with a bit more involvement from the start.</li>
</ol>



<p>Rogue backups are one of the most common issues we see across new client environments. Multiple tools taking backups of the same database, often without anyone realizing the other exists. Mike Walsh wrote about this exact pattern in <a href="https://straightpathsql.com/archives/2025/10/sql-server-backups-and-the-illusion-of-safety-confusion/">SQL Server Backups and the Illusion of Safety</a>, where he points out that when <em>everyone </em>is responsible for backups, sometimes <em>no one</em> is actually accountable for recoverability.</p>



<h2 class="wp-block-heading" id="h-the-straight-path-team-and-skills">The Straight Path Team and Skills</h2>



<p>Backup chain integrity is one of the first things we train any new DBA on at Straight Path. <a href="https://straightpathsql.com/tool/sp_checkbackup/">sp_CheckBackup</a> is one of our free community tools, largely built by Jeff Iannucci and David Seis. I&#8217;m confident that anyone on our team would have done the same troubleshooting here. Backups and recoverability are DBA skills 101, and the majority of our clients perform routine restore testing and integrity checks to make sure data is safe and ready for when it matters most.</p>



<p></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><em>Straight Path Solutions is a team of nearly 20 SQL Server experts trusted by 120+ clients. We treat our clients&#8217; environments as if they were our own because our job depends on your success. Making your life pain-free in the land of SQL is the rewarding part of our work. If you&#8217;re planning a migration, dealing with backup concerns, or just want to sleep better knowing someone&#8217;s watching your environment, <a href="https://straightpathsql.com/sql-server-consultant/contact-us/">reach out to us</a>.</em></p>



<p><em>This post is part of our <a href="https://straightpathsql.com/archives/category/case-of-the-week/">Case of the Week</a> series, real SQL Server issues and lessons from the field.</em></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/">SQL Server Case of the Week: A Broken Backup Chain Blocks Migration to Azure SQL Managed Instance</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/04/sql-server-case-of-the-week-a-broken-backup-chain-blocks-migration-to-azure-sql-managed-instance/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Data Contracts: The Agreement Your Pipeline Has Been Missing</title>
		<link>http://straightpathsql.com/archives/2026/04/data-contracts-the-agreement-your-pipeline-has-been-missing/</link>
					<comments>http://straightpathsql.com/archives/2026/04/data-contracts-the-agreement-your-pipeline-has-been-missing/#respond</comments>
		
		<dc:creator><![CDATA[Buck Woody]]></dc:creator>
		<pubDate>Thu, 09 Apr 2026 11:13:40 +0000</pubDate>
				<category><![CDATA[Chief Data Officer]]></category>
		<category><![CDATA[Data Contracts]]></category>
		<category><![CDATA[Data Governance]]></category>
		<category><![CDATA[Data Leadership]]></category>
		<category><![CDATA[Data Products]]></category>
		<category><![CDATA[Data Quality]]></category>
		<category><![CDATA[FromTheCDO]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31162</guid>

					<description><![CDATA[<p>"Data quality is not a technical problem. It's an accountability problem..."</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/data-contracts-the-agreement-your-pipeline-has-been-missing/">Data Contracts: The Agreement Your Pipeline Has Been Missing</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>Formalizing expectations between data producers and consumers stops quality problems before they start</em></p>



<p>A businessperson pulls a report from a data warehouse, runs the same query they&#8217;ve used for two years, and gets a number that doesn&#8217;t match what the finance team presented at yesterday&#8217;s board meeting. Nobody changed the report. Nobody changed the dashboard. But somewhere upstream, an engineering team renamed a field, shifted a column type, or quietly altered the logic in a pipeline, and nobody thought to mention it because there was no mechanism to mention it.</p>



<p>While we think of this as an engineering failure, it&#8217;s more of an implied contract failure. More precisely, it&#8217;s the absence of a formal contract. Data contracts are one of the most practical tools a data organization can adopt, and one of the most underused. The idea is not complicated: a data contract is a formal, enforceable agreement between the team that produces data and the team that consumes it. It defines what the data looks like, what quality standards it must meet, who owns it, and what happens when something changes. Think of it as the API layer for your data, the same guarantee a software engineer expects from a well-documented endpoint, applied to the datasets and pipelines your business depends on. This post is about why that matters at the CDO level and how to get them put in place.</p>



<h2 class="wp-block-heading" id="h-the-problem-with-good-data-intentions">The Problem with Good Data Intentions</h2>



<p>Most data teams operate on informal contracts. A producer team knows that the analytics team uses a certain table. The analytics team assumes that the table will always have the same fields in the same format. It&#8217;s not written down, agreed to, or formalized it. It just became an unspoken convention.</p>



<p>Unspoken conventions are fragile. When the producing team moves to a new schema, the consuming team finds out when the dashboard breaks. When a definition shifts, the downstream metric drifts without warning. When a new consumer starts using a dataset, they&#8217;re inheriting assumptions they didn&#8217;t know existed. Relying on informal agreements to manage data quality at scale is relying on chance and time. Those two things are not working for you, in my experience&#8230;it&#8217;s quite the opposite.</p>



<p>The result is a cycle that most data leaders know by heart: an incident surfaces, a&nbsp;postmortem happens, someone adds a note to a Confluence page, and the cycle repeats six months later with a different field and a different team. The documentation exists, but it isn&#8217;t enforced. Documentation without enforcement is just a polite suggestion.</p>



<p>Data contracts break this cycle by making the agreement explicit, visible, and machine-enforced. They move quality governance from a reactive discipline, where you discover problems after the fact, into a proactive one, where the pipeline validates expectations before data ever reaches a consumer.</p>



<h2 class="wp-block-heading" id="h-what-a-data-contract-actually-contains">What a Data Contract Actually Contains</h2>



<p>A data contract isn&#8217;t a document you put in a SharePoint folder and review annually. It&#8217;s a structured, version-controlled specification that travels with the data and can be executed automatically as part of your pipeline. The components vary by implementation, but the core elements are consistent across mature approaches.</p>



<h3 class="wp-block-heading" id="h-schema-and-structure">Schema and Structure</h3>



<p>This is the foundation. The contract defines the fields, data types, allowed values, and nullability rules for a given dataset or data product. It&#8217;s the equivalent of an API schema, and it enforces the same kind of compatibility guarantees. A consumer who relies on a field being a non-nullable string should not have to discover at 2 a.m. that it&#8217;s now an optional integer.</p>



<h3 class="wp-block-heading" id="h-semantics-and-business-meaning">Semantics and Business Meaning</h3>



<p>Schema alone isn&#8217;t enough. Data contracts include definitions, the actual business meaning of each field. What does customer_id represent? Is it the account-level identifier or the contact-level identifier? Which definition of &#8216;active customer&#8217; does this table use? These are governance questions, and they belong in the contract, not in tribal knowledge held by whoever has been on the team longest.</p>



<h3 class="wp-block-heading" id="h-service-level-agreements">Service Level Agreements</h3>



<p>A contract defines the quality commitments the producer is making. How fresh will this data be? What&#8217;s the acceptable error rate? When does the data land, and what does &#8216;on time&#8217; mean? These are commitments you can monitor, alert on, and hold producers accountable for, because they&#8217;re written down and agreed upon rather than assumed.</p>



<h3 class="wp-block-heading" id="h-ownership-and-stewardship">Ownership and Stewardship</h3>



<p>Every data contract should identify the team or individual responsible for the data product, the escalation path when something goes wrong, and the process for requesting changes. Ownership without a documented path creates the same orphaned-dataset problem that governance programs have struggled with for decades. The contract makes ownership explicit and findable.</p>



<h3 class="wp-block-heading" id="h-change-management-and-versioning">Change Management and Versioning</h3>



<p>This is where contracts earn their value in the long run. When a producer needs to change the schema, the contract defines the process: how much notice is required, how breaking changes are communicated, and how version deprecations are managed. Versioning lets producers evolve their data products without blindsiding the teams that depend on them.</p>



<h2 class="wp-block-heading" id="h-producer-defined-vs-consumer-defined-contracts">Producer-Defined vs. Consumer-Defined Contracts</h2>



<p>Here&#8217;s where implementation gets nuanced, and it&#8217;s worth being direct about what works and what doesn&#8217;t in practice. The obvious approach is to have producers define the contract. They know the data best. They know what it contains, how it&#8217;s generated, and what guarantees they can realistically make. This is what I see most often, and to bue clear, Producer-defined contracts are a significant improvement over no contracts at all.</p>



<p>But there&#8217;s a structural problem: producers often don&#8217;t know how downstream teams are using their data. They optimize for operational concerns. They make changes that seem reasonable from their perspective because they don&#8217;t have visibility into the analytical models, reports, and decisions that depend on the data they produce.</p>



<p>A contract defined only by the producer reflects what the producer thinks the consumer needs. A contract that includes consumer expectations shows what the business department actually needs.</p>



<p>Consumer-defined contracts, or contracts co-developed with meaningful consumer input, solve this issue. When the team building the analytical model has a hand in defining the schema and quality expectations, the contract reflects the actual downstream requirements rather than upstream assumptions. It also creates a feedback loop that a ticket queue will never produce, because consumers are involved in defining the standard before something breaks rather than after.</p>



<p>Here&#8217;s my recommendation: start with consumer-defined awareness. Let consumers document the expectations they rely on. Use that to generate awareness among producers about the downstream impact of their changes. Then move toward formal contracts that are collaboratively defined and enforced in the pipeline. The maturity curve is awareness, then ownership, then governance.</p>



<h2 class="wp-block-heading" id="h-enforcement-is-the-difference-between-a-contract-and-a-wish">Enforcement Is the Difference Between a Contract and a Wish</h2>



<p>The single most important thing to understand about data contracts is that a contract that can&#8217;t be enforced automatically isn&#8217;t a contract. It&#8217;s documentation with good intentions, and documentation without enforcement.</p>



<p>Enforcement means the validation logic lives in the pipeline, not in a spreadsheet. When data arrives from a producer, the pipeline checks it against the contract before making it available to consumers. If the data doesn&#8217;t meet the defined expectations, it doesn&#8217;t pass through. The issue is surfaced at the point of production, not discovered downstream when a dashboard breaks or a model produces nonsense output.</p>



<p>This is sometimes called shift-left&#8221;. Instead of catching problems at the point of consumption, you catch them at the point of creation. The cost of a data quality issue found at the source is a fraction of the cost of the same issue found after it has propagated through six downstream pipelines and influenced a business decision.</p>



<h2 class="wp-block-heading" id="h-patterns-that-work">Patterns that work</h2>



<p>So let&#8217;s dive in to the practical aspects of creating a data contract. They have a few features that I see used with success. Take a look at these (<strong><em>the What</em></strong>), and then decide the physical implementation you will use (<strong><em>the How</em></strong>):</p>



<p><strong>Quality as code: </strong>Contract specifications written in YAML or similar formats, checked into version control, and executed directly in the pipeline. The contract is treated like any other code artifact: reviewed, tested, and deployed through standard engineering workflows.</p>



<p><strong>CI/CD integration: </strong>Contracts are validated as part of the deployment process. A schema change that would break a downstream contract fails the build before it reaches production. Breaking changes require an updated contract version and advance notice to consumers.</p>



<p><strong>Automated monitoring: </strong>Once the contract is live, the pipeline continuously validates incoming data against the specification. Violations trigger alerts, not just log entries. Producers are notified when they&#8217;re breaking a commitment their consumers depend on.</p>



<p><strong>Lineage integration:</strong> Contracts embedded in metadata platforms connect ownership, definitions, and quality expectations to the data catalog. Any consumer who queries a dataset can see the contract, understand the quality commitments, and identify the owner without opening a single ticket.</p>



<h2 class="wp-block-heading" id="h-the-cdo-case-for-data-contracts">The CDO Case for Data Contracts</h2>



<p>As a CDO, you&#8217;re probably not writing YAML specifications. But you are accountable for the organizational conditions that make data contracts work, and you&#8217;re the executive who can remove the barriers that prevent their adoption.</p>



<p>There are four things the CDO function needs to own in a data contract program:</p>



<ol start="1" class="wp-block-list">
<li>Data contracts only work when producers take responsibility for the downstream impact of their changes. That cultural shift requires executive reinforcement. It doesn&#8217;t happen from the bottom of the engineering hierarchy. <strong><em>Mandate the culture of explicit ownership.</em></strong></li>



<li>If producer teams are measured on deployment velocity and nothing else, they&#8217;ll deprioritize the upstream coordination that contract maintenance requires. The metrics that support a contract culture include time to detect quality issues, rate of downstream incidents caused by upstream changes, and consumer satisfaction with data reliability. Measure what you want to see. <strong><em>Align the measurement model.</em></strong></li>



<li>Contracts need a place to live that both producers and consumers can access. A metadata platform or data catalog that supports contract specifications, version history, and automated validation is a prerequisite. This is a platform investment, not a policy investment, and it requires CDO-level sponsorship to get funded. <strong><em>Invest in the shared infrastructure.</em></strong></li>



<li>You don&#8217;t need to contract every dataset all at once. Identify the five to ten data products that drive the most critical business decisions, or that have caused the most downstream incidents in the past year. Contract those first. Build the muscle, prove the value, and expand from there. <strong><em>Start with the data products that matter most.</em></strong></li>
</ol>



<h2 class="wp-block-heading" id="h-what-good-looks-like-in-practice">What &#8220;Good&#8221; Looks Like in Practice</h2>



<p>When data contracts are working in an organization, a few things change in ways that are immediately visible. Engineers stop finding out about breaking changes from an angry Slack message. The pipeline tells them first, before the change reaches production. The conversation shifts from incident response to change coordination.</p>



<p>Analysts stop spending time reconciling conflicting numbers. They know which dataset is authoritative, they know when it was last updated, and they know what quality checks it passed. They spend that time on analysis instead of archaeology.</p>



<p>Data leaders stop measuring quality by the absence of complaints. They have instrumented visibility into contract compliance rates, SLA adherence, and the velocity of quality issues by domain. They can report on data reliability the same way engineering reports on system reliability.</p>



<p>And the business relationship with data changes. When business leaders can trust that a number in a dashboard has been validated against a known specification, they don&#8217;t waste meeting time questioning the data. They make the decision. That&#8217;s the definition of decision velocity, and it&#8217;s what a data organization is actually for.</p>



<h2 class="wp-block-heading" id="h-getting-started-a-practical-sequence">Getting Started: A Practical Sequence</h2>



<p><strong>If you&#8217;re starting from zero, here&#8217;s a sequence that has worked in practice without requiring a rearchitecture of your entire data platform.</strong></p>



<ol start="1" class="wp-block-list">
<li>Which datasets power your most important decisions? Which ones have caused the most downstream incidents? Start there. You don&#8217;t need to tackle everything at once. Audit your highest-impact datasets.</li>



<li>Talk to your consumers. What do they expect from these datasets? What would break their work if it changed? This documentation becomes the foundation of the formal contract. Document the informal contracts that already exist.</li>



<li>Work with both producers and consumers to codify expectations: schema, semantics, SLAs, ownership, and change management process. Put it in version control. Define the contract specification.</li>



<li>Encode the contract&#8217;s quality rules into the pipeline. Automate the checks. Route violations to the producer before data reaches consumers. Implement pipeline validation.</li>



<li>Make contracts discoverable. If a consumer can&#8217;t find the contract, the governance value is lost. A data catalog that links datasets to their contracts, owners, and quality history is the operational infrastructure that makes the program scale. Connect contracts to your metadata layer.</li>



<li>Once the first set of contracts is working, identify domain owners who can drive contract adoption within their area. The CDO&#8217;s office sets the standard. The domains implement it. Expand by domain.</li>
</ol>



<p><strong>Data quality is not a technical problem. It&#8217;s an accountability problem.</strong> The technical tooling, pipelines, catalogs, validation frameworks, is a layer of infrastructure. But infrastructure doesn&#8217;t create accountability. Agreements do.</p>



<p>Data contracts make the agreement visible, enforceable, and real. They transform the implicit expectations that exist in every data organization into explicit commitments that can be monitored, measured, and acted upon.</p>



<p>Your business is already relying on informal contracts. The only question is whether you&#8217;ll formalize them before the next incident, or after it.</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/data-contracts-the-agreement-your-pipeline-has-been-missing/">Data Contracts: The Agreement Your Pipeline Has Been Missing</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/04/data-contracts-the-agreement-your-pipeline-has-been-missing/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Free SQL Server Health Check with dbatools</title>
		<link>http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/</link>
					<comments>http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/#comments</comments>
		
		<dc:creator><![CDATA[David Seis]]></dc:creator>
		<pubDate>Thu, 02 Apr 2026 16:02:50 +0000</pubDate>
				<category><![CDATA[dbatools for the SQL Server DBA]]></category>
		<category><![CDATA[Database Health Check]]></category>
		<category><![CDATA[DBA tools]]></category>
		<category><![CDATA[dbatools]]></category>
		<category><![CDATA[Free Tools]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[SQL Server]]></category>
		<category><![CDATA[SQL Server Health Check]]></category>
		<category><![CDATA[SQL Server Monitoring]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31078</guid>

					<description><![CDATA[<p>After a longer break than expected, I am back to the dbatools for SQL Server DBAs blog series, and this one is a monster! In fact, this project is so big that I think it will be better to release it incrementally. This will allow you clone the repository, test and modify it in your ... <a title="Free SQL Server Health Check with dbatools" class="read-more" href="http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/" aria-label="Read more about Free SQL Server Health Check with dbatools">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/">Free SQL Server Health Check with dbatools</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>After a longer break than expected, I am back to the <a href="https://straightpathsql.com/archives/category/dbatools-for-the-sql-server-dba/" type="category" id="2457">dbatools for SQL Server DBAs blog series</a>, and this one is a monster! In fact, this project is so big that I think it will be better to release it incrementally. This will allow you clone the repository, test and modify it in your own environment and come back for free updates over the weeks/ months to come. It is designed to allow you to customize it to your environment’s needs. This first post will be the initial process overview as well as the first set of checks and how to navigate the report.</p>



<figure class="wp-block-image size-full is-style-default"><img fetchpriority="high" decoding="async" width="975" height="694" src="https://straightpathsql.com/wp-content/uploads/2026/04/image.png" alt="Free SQL Server Health Check Driven by dbatools PowerShell." class="wp-image-31079" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-300x214.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-768x547.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p>My goal was to grab every dbatools discovery command I could find and shape it into a usable health check for you to use. There are 700 dbatools commands, and portion of that is geared for discovery and testing. I did not include every possible command and as you can imagine there are a lot of moving parts. I’ve got it in a good state for you to take, look at, modify, and make your own. This is the dbatools powered checkup that made sense to me, I hope it is useful and exciting for you!</p>



<p>You can access all the source code and follow along in this post and the subsequent posts walking through this <a href="https://github.com/Straight-Path-Solutions/PowerShell-automation/tree/main/Scripts/Dbatools%20Check-up">on our github</a>. Like our family of <a href="https://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/" type="post" id="31073">sp_check*</a> community tools, this is free for you to explore, understand, and use to improve your own environment.</p>



<h2 class="wp-block-heading" id="h-boilerplate">Boilerplate</h2>



<p>As a reminder, I <a href="https://straightpathsql.com/archives/2025/04/why-invoke-dbaquery-is-my-most-used-dbatools-query/" target="_blank" rel="noreferrer noopener">created a multi-subnet lab</a> with three developer edition SQL Server instances, one SQL Express and a network share based on&nbsp;<a href="https://www.sqlskills.com/blogs/jonathan/configuring-a-multi-subnet-sql-server-test-environment/" target="_blank" rel="noreferrer noopener">this blog post by Jonathan Kehayias</a>. I will likely need to rebuild it after the beating it has taken through this blog series, however that makes it all the more useful for this round. If you are not familiar with dbatools yet, now is the perfect time to grab a test instance and learn! On your test environment you can open&nbsp;<a href="https://straightpathsql.com/archives/tag/powershell/">PowerShell</a>&nbsp;and run the following scripts. These will install Dbatools and add it to the path for future projects as well as import it into the current session for the purpose of testing the scripts of this blog post. </p>



<pre class="wp-block-code"><code>Install-Module Dbatools

Import-Module Dbatools</code></pre>



<h2 class="wp-block-heading" id="h-the-core-design-principle-read-only"><strong>The Core Design Principle: Read-Only</strong></h2>



<p id="h-the-core-design-principle-read-only-this-sql-server-health-check-engine-is-designed-to-report-not-add-or-change-the-star-of-the-show-is-meant-to-be-dbatools-i-chose-many-of-the-get-and-test-cmdlets-some-measures-and-a-few-invoke-dbaquery-i-will-dig-into-the-design-and-organization-for-your-own-testing-and-review-but-this-process-is-meant-to-read-and-report-within-your-environment-only-each-finding-is-linked-back-to-the-original-dbatools-function-to-point-out-how-useful-they-are-in-your-day-to-day-dba-administration-and-review-tasks">This SQL Server Health Check engine is designed to report, not add or change. The star of the show is meant to be DBAtools. I chose many of the GET and TEST cmdlets, some measures, and a few invoke-dbaquery. I will dig into the design and organization for your own testing and review, but this process is meant to read and report within your environment only. Each finding is linked back to the original dbatools function to point out how useful they are in your day-to-day DBA administration and review tasks!<br></p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="518" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-2.png" alt="" class="wp-image-31121" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-2.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-2-300x159.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-2-768x408.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p id="h-the-core-design-principle-read-only-this-sql-server-health-check-engine-is-designed-to-report-not-add-or-change-the-star-of-the-show-is-meant-to-be-dbatools-i-chose-many-of-the-get-and-test-cmdlets-some-measures-and-a-few-invoke-dbaquery-i-will-dig-into-the-design-and-organization-for-your-own-testing-and-review-but-this-process-is-meant-to-read-and-report-within-your-environment-only-each-finding-is-linked-back-to-the-original-dbatools-function-to-point-out-how-useful-they-are-in-your-day-to-day-dba-administration-and-review-tasks"></p>



<h2 class="wp-block-heading" id="h-sql-server-health-check-architecture-overview">SQL Server Health Check Architecture Overview</h2>



<p>The suite follows a clean hub-and-spoke architecture with four layers:</p>



<p><strong>Menu → Engine → Spokes → Output</strong></p>



<ul class="wp-block-list">
<li><strong>Start-Checkup.ps1 (Menu):</strong> The single entry point. You configure all thresholds, toggles, and paths here — nothing is buried elsewhere. It builds the canonical $Settings hashtable and calls the engine once.</li>



<li><strong>Checkup.Engine.ps1 (Engine):</strong> The orchestrator. It loads targets, discovers check modules, runs each module against each instance, and hands off to the output layer. It contains zero check logic itself.</li>



<li><strong>Spoke.*.ps1 (Spokes):</strong> Individual check packs covering specific domains. Each is self-contained and communicates with the engine through a strict contract — it receives a $Target, a $Config, and a [ref]$Findings list. Nothing else.</li>



<li><strong>JSON + HTML Output:</strong> Findings are first written to a timestamped JSON file (the system of record), then projected into a self-contained HTML report via Report.HtmlBuilder.ps1.</li>



<li><strong>Checkup.Catalog:</strong> The check catalog is the backend check organization tool. Instead of digging though the Spoke files individually to change the priority and category of a check, you can configure both for each check in one place. You can also edit the Label that shows up in the report, if desired.</li>
</ul>



<p>This separation means you can add a new check pack without touching the engine, update the report template without touching any check logic, and trust that the contracts between layers stay stable.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="646" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-8.png" alt="" class="wp-image-31137" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-8.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-8-300x199.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-8-768x509.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<h2 class="wp-block-heading" id="h-what-dba-best-practices-and-configs-are-checked">What DBA Best Practices and Configs are Checked?</h2>



<p>It will be a lot. This first iteration will ship with the database spoke. Each pack will be covering many of the areas that matter most in day-to-day SQL Server operations for DBAs. The planned spokes are as follows:</p>



<ul class="wp-block-list">
<li><strong>Instance:</strong> Build version currency, startup parameters, sp_configure settings, surface area configuration, error log scanning, and SQL Server Agent status.</li>



<li><strong>Database ( you are getting this one today!):</strong> Backup currency (full, diff, log), VLF counts, auto-growth events, space utilization, anti-pattern detection (Auto-Shrink, Auto-Close), TDE inventory, Query Store status, and owner compliance.</li>



<li><strong>Maintenance:</strong> Last good CHECKDB age, statistics staleness, duplicate/unused/disabled indexes, wait statistics analysis, and identity column capacity.</li>



<li><strong>HADR:</strong> Availability Group health, replica connectivity, log shipping status, and legacy database mirroring.</li>



<li><strong>Security &amp; Audit:</strong> Server-level and database-level audit specifications, SA account status, and surface area exposure.</li>



<li><strong>TempDB:</strong> File count, equal sizing, growth configuration, and space utilization.</li>



<li><strong>Networking:</strong> TCP/IP configuration, named pipes, SPN compliance, static vs. dynamic port, and round-trip latency.</li>



<li><strong>Host:</strong> Power plan compliance, disk space, and OS-level configuration.</li>



<li><strong>Misc:</strong> Database Mail health, Extended Events sessions, and notable trace flags.</li>
</ul>



<p>Every check produces one of three actionable statuses — <strong>Pass</strong>, <strong>Attention</strong>, or <strong>Fail</strong> — plus an <strong>Informational</strong> category for inventory-style output that doesn&#8217;t require action.<br></p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="691" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-7.png" alt="" class="wp-image-31133" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-7.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-7-300x213.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-7-768x544.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<h2 class="wp-block-heading" id="h-scoring-and-the-health-check-report">Scoring and the Health Check Report</h2>



<p>Findings aren&#8217;t just a flat list. Each check carries a configurable weight, and scores roll up by category and across the entire instance into a single health percentage — visualized as a gauge in the report header.</p>



<p><em>We use a similar scoring and multiple category analysis approach in our professional SQL Server scorecard engagements, where we go deeper with expert analysis and a prioritized action plan. We use the same approach with the proactive dashboard we maintain across the 2,000+ SQL Server instances we manage for our more than 120 DBA-as-a-Service clients.</em></p>



<p>The HTML report is fully self-contained (no external dependencies, no server required). It supports:</p>



<ul class="wp-block-list">
<li>An <strong>overview</strong> dashboard showing all instances, category breakdowns, and aggregate scores</li>



<li>A drill-down <strong>per-instance view</strong> with a full findings table</li>



<li>An <strong>all-findings</strong> view filterable by status and category</li>



<li><strong>Import/Export JSON/Excel Workbook</strong> buttons for sharing or archiving results</li>



<li>Sortable tables and color-coded heat cells (red → amber → green)</li>
</ul>



<p>You can email the HTML file, drop it in a SharePoint, or store it alongside your deployment artifacts — it works anywhere a browser does.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="713" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-6.png" alt="" class="wp-image-31132" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-6.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-6-300x219.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-6-768x562.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p><br></p>



<h2 class="wp-block-heading" id="h-configuration-everything-in-one-place">Configuration: Everything in One Place</h2>



<p>One of the deliberate design choices is that all configuration lives in a single file: Start-Checkup.ps1. The goal was that there should be no hidden config files, no registry keys, no scattered settings. Every threshold — from the percentage that triggers an identity column warning to whether Named Pipes being enabled is a Fail or just an Attention — is documented inline with a comment explaining the intent.</p>



<p># Free space thresholds (percent free)</p>



<p>FreeSpacePctAttention = 15.0</p>



<p>FreeSpacePctFail      = 5.0</p>



<p>You configure your targets in a Targets.json file, supporting Windows integrated auth, per-target SQL credentials, or a single shared credential for bulk runs.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="913" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-5.png" alt="" class="wp-image-31131" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-5.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-5-300x281.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-5-768x719.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<h2 class="wp-block-heading" id="h-get-started-building-your-own-sql-server-health-check-and-score-report">Get Started Building Your Own SQL Server Health Check and Score Report</h2>



<p>Prerequisites are minimal: PowerShell 5.1+ and the <a href="https://dbatools.io/">dbatools</a> module. The suite uses dbatools exclusively for SQL connectivity — only read-only cmdlets (Get-*, Test-*, Invoke-Dba*Diagnostic*).</p>



<ol start="1" class="wp-block-list">
<li>Clone or download the suite to a local folder.</li>



<li>Edit 3. Helpers\Targets.json to list your SQL Server instances.</li>



<li>Review thresholds in Start-Checkup.ps1 — the defaults felt reasonable to me, but your environment will have different baseline configurations.</li>



<li>Run Start-Checkup.ps1 from PowerShell.</li>



<li>Once completed, the html report will automatically open, otherwise you can open the HTML report from the 4. Output\Reports folder.</li>



<li>You can export the findings to json (if for some reason you keep the report but not the json result file) or to an excel workbook. The excel workbook has the overview table and the all-findings table. You can also import json if you are wanting to look at a previous run’s data during testing.</li>
</ol>



<p>The first run will create settings.json from your definitions. Subsequent runs reuse those settings unless you pass -OverwriteSettings. More How-To guides and what to expect will be added to the repo as I release more spokes and as you all have questions. Also, the report has a “?” icon in the top right corner that opens a user guide to help you navigate the report results:<br></p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="715" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-4.png" alt="" class="wp-image-31126" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-4.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-4-300x220.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-4-768x563.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<h2 class="wp-block-heading" id="h-conclusion">Conclusion</h2>



<p><strong><em>This is not in its final state; in fact, it is meant to be picked up by you and modified to fit your own needs. </em></strong>I worked on this for longer than I ever expected, and there is more I would do if I had the time. With so many moving parts, I can guarantee you that something has been overlooked. </p>



<p>Please take a look at it, respond here, or log bugs on GitHub if you notice any problems. </p>



<p>Look to our blog here or subscribe to our newsletter to find out when I drop the next posts, when I will be back with the additional spokes I promised above, and will let you all know about the updates we make periodically in response to bug fixes. </p>



<p>Hopefully, in just a few months, this will be an awesome health-check tool for you to keep tabs on your environment, featuring dbatools!<br><br></p>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="707" src="https://straightpathsql.com/wp-content/uploads/2026/04/image-3.png" alt="" class="wp-image-31125" srcset="http://straightpathsql.com/wp-content/uploads/2026/04/image-3.png 975w, http://straightpathsql.com/wp-content/uploads/2026/04/image-3-300x218.png 300w, http://straightpathsql.com/wp-content/uploads/2026/04/image-3-768x557.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<p><br></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/">Free SQL Server Health Check with dbatools</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/04/free-sql-server-health-check-with-dbatools/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>Updates for all sp_Check tools – March 2026</title>
		<link>http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/</link>
					<comments>http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/#respond</comments>
		
		<dc:creator><![CDATA[Jeff Iannucci]]></dc:creator>
		<pubDate>Tue, 31 Mar 2026 22:20:05 +0000</pubDate>
				<category><![CDATA[Free DBA Tool]]></category>
		<category><![CDATA[Free Tools]]></category>
		<category><![CDATA[sp_check]]></category>
		<category><![CDATA[sp_checkAG]]></category>
		<category><![CDATA[sp_CheckBackup]]></category>
		<category><![CDATA[sp_CheckSecurity]]></category>
		<category><![CDATA[sp_CheckTempdb]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31073</guid>

					<description><![CDATA[<p>As promised last month, we are planning for (at least) monthly updates of our FREE sp_Check stored procedures, so here are the March updates. This month we did change the “ReadMore” URL links in the results of all tools to not use redirects. This might have been causing issues for folks who just wanted some ... <a title="Updates for all sp_Check tools – March 2026" class="read-more" href="http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/" aria-label="Read more about Updates for all sp_Check tools – March 2026">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/">Updates for all sp_Check tools – March 2026</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>As promised last month, we are planning for (at least) monthly updates of our FREE sp_Check stored procedures, so here are the March updates. </p>



<p>This month we did change the “ReadMore” URL links in the results of all tools to not use redirects. This might have been causing issues for folks who just wanted some more info about the findings in our tools, and we apologize if you were one of those folks.</p>



<p>Speaking of URLs, we found a bunch that didn’t work because the wording was wrong. We’re not sure how this happened, but we will get these fixed in the April updates.</p>



<p>This month though there are mostly a few small updates for the tools, as next month’s updates should also include many of the issues noted in GitHub (thanks for those!) Most of this month’s updates were to <strong>sp_CheckSecurity</strong>, although we did add “Initial File Size” to the output of <strong>sp_CheckTempdb </strong>since that had been requested by a few folks.</p>



<p>We hope these new updates can help you, especially if you’ve never used these stored procedures. Here are the updates for March 2026, with links to the GitHub repositories where you can download the latest versions.</p>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckAG">sp_CheckAG</a></p>



<ul class="wp-block-list">
<li>CHANGE all Straight Path URLs to not involve redirects</li>



<li>Change High HADR_SYNC_COMMIT waits to avoid arithmetic overflow (CheckID 422)</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckBackup">sp_CheckBackup</a></p>



<ul class="wp-block-list">
<li>CHANGE all Straight Path URLs to not involve redirects</li>



<li>ADD check for password protected backups (CheckID 215)</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckSecurity">sp_CheckSecurity</a></p>



<ul class="wp-block-list">
<li>CHANGE all Straight Path URLs to not involve redirects</li>



<li>CHANGE check for most recent version for SQL Server security updates</li>



<li>CORRECT inconsistent recommendation for Database owner discrepancy (CheckID 306)</li>



<li>CHANGE Database owner discrepancy (CheckID 306) to only check online databases</li>



<li>CHANGE Service Account using local elevated account (CheckID 329) to include the SQL Agent service.</li>



<li>CHANGE Service Account in sysadmin role (CheckID 350) to include the SQL Agent service.</li>



<li>ADD check for SQL Server services in local Administrators group (CheckID 351)</li>
</ul>



<p><a href="https://github.com/Straight-Path-Solutions/sp_CheckTempdb">sp_CheckTempdb</a></p>



<ul class="wp-block-list">
<li>CHANGE all Straight Path URLs to not involve redirects</li>



<li>Add InitialFileSize to @Mode = 1</li>



<li>Remove ordinal values from ORDER BY in @Mode = 1</li>
</ul>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/">Updates for all sp_Check tools – March 2026</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/updates-for-all-sp_check-tools-march-2026/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server Case of the Week: Databases in a “Recovery Pending” state don’t always require surgery</title>
		<link>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/</link>
					<comments>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/#respond</comments>
		
		<dc:creator><![CDATA[Jeff Iannucci]]></dc:creator>
		<pubDate>Fri, 27 Mar 2026 14:40:51 +0000</pubDate>
				<category><![CDATA[Case of the Week]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31061</guid>

					<description><![CDATA[<p>You get an alert that there are one or more databases in a “Recovery Pending&#8221; state. This means the database started but could not complete the recovery pending process for some unknown reason. It is stuck in this state and unusable until recovery can be completed. The Investigation After receiving the alert, I verified that ... <a title="SQL Server Case of the Week: Databases in a “Recovery Pending” state don’t always require surgery" class="read-more" href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/" aria-label="Read more about SQL Server Case of the Week: Databases in a “Recovery Pending” state don’t always require surgery">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/">SQL Server Case of the Week: Databases in a “Recovery Pending” state don’t always require surgery</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>You get an alert that there are one or more databases in a “Recovery Pending&#8221; state. This means the database started but could not complete the recovery pending process for some unknown reason. It is stuck in this state and unusable until recovery can be completed.</em></p>



<h2 class="wp-block-heading" id="h-the-investigation"><strong>The Investigation</strong></h2>



<p>After receiving the alert, I verified that there were multiple databases on the same instance that were in the “Recovery Pending” state. A review of the SQL Server error log showed that the folder on the L drive was inaccessible, so transaction log files could not be read.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="234" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-7.png" alt="" class="wp-image-31062" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-7.png 624w, http://straightpathsql.com/wp-content/uploads/2026/03/image-7-300x113.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p>Those errors were not current though, and the L drive now appeared to be accessible. Moreover, it did not appear to be out of space (which could have been a possible root cause of the error.)</p>



<p>Reviewing the Windows System error log on the server showed there was a storage level issue for that drive only at the time of the errors in the SQL Server error log, and that those errors were no longer persisting.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="491" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-8.png" alt="" class="wp-image-31063" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-8.png 624w, http://straightpathsql.com/wp-content/uploads/2026/03/image-8-300x236.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<h2 class="wp-block-heading" id="h-the-fix"><strong>The Fix</strong></h2>



<p>Often times a database is in the “Recovery Pending” state because there is corruption in the transaction log file. In that case, the database may need to be set to EMERGENCY state, set to SINGLE_USER, and then have DBCC CHECKDB run with REPAIR_ALLOW_DATA_LOSS. As with most situations involving corruption, you’re better off restoring from a backup then trying the “database surgery” method, since you never know how much the data will be lost with the former method.</p>



<p>Fortunately, this was not an issue of corruption, but rather one of the drive with the transaction log files being temporarily unavailable. Since the drive was now available, the databases could be brought online by simply taking them offline, then bringing them online.</p>



<p>ALTER DATABASE&nbsp;[DatabaseName]&nbsp;SET&nbsp;OFFLINE;</p>



<p>GO</p>



<p>ALTER DATABASE&nbsp;[DatabaseName]&nbsp;SET&nbsp;ONLINE;</p>



<p>GO</p>



<p>Since the transaction log files were now readable, the online process was able to successfully complete recovery.</p>



<p>As a side note, since these databases were in a state where there could be no connections we didn’t need to ROLLBACK IMMEDIATE to account for any activity.</p>



<p>One final step was needed, though. Although we did not suspect that the “Pending Recovery” state was due to corruption, we still ran DBCC CHECKDB for each database to verify there were no consistency errors.</p>



<h2 class="wp-block-heading" id="h-the-takeaway"><strong>The Takeaway</strong></h2>



<p>Finding one or more databases in the unusable “Recovery Pending” status can be shocking, but the solution may be shockingly simple.</p>



<ol class="wp-block-list">
<li><strong>Check the SQL Server and Windows error logs</strong>. In this case we were able to quickly identify that the cause was a temporary and not persistent storage level error. Since it the issue only affected some but not all databases, we had hope the quick fix noted above would work.</li>



<li><strong>Try the solution of least resistance first.</strong> Someone with less experience might have tried to solve this by asking a search engine or AI chatbot what to do. I did a quick survey and those solutions said to go the way of repairing with data loss. That should be a last resort, and maybe not even a necessary option if you…</li>



<li><strong>Always have a backup</strong>. Backups are the most important thing you can have for your databases. For “oops” moments, for ransomware, for corrupted data files, and for times like this. If our method had not worked, we still verified that recent backups were available if needed.</li>



<li><strong>You still need an integrity check.</strong> Any time you have a database recovered from an unusual state, you should always run an integrity check. It’s better to know now if you have an issue that requires a database to be restored from backup.</li>
</ol>



<p>Seriously, go check your backups now. We even have <a href="https://straightpathsql.com/tool/sp_checkbackup/">a tool to help you check SQL Server database backups</a> quickly.</p>



<h2 class="wp-block-heading" id="h-the-straight-path-team-and-skills"><strong>The Straight Path Team and Skills</strong></h2>



<p>Andrew Kelly and I collaborated on troubleshooting this issue. All thanks to him for suggesting this simple fix in this case.</p>



<p>Troubleshooting like this is a team effort, and having multiple perspectives and experience with the problem helped us come to a solution in just a few minutes.</p>



<p>This post is part of our Case of the Week series—real SQL Server issues and lessons from the field.</p>



<p>If you are inheriting SQL Server environments and want a team that knows how to dig into the details, reach out to us, and let’s talk about managing your SQL Server environment together. Our team is 20 people deep, and we have MVPs, speakers, bloggers, and authors. We know a lot because we’ve been exposed to a lot.</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/">SQL Server Case of the Week: Databases in a “Recovery Pending” state don’t always require surgery</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-databases-in-a-recovery-pending-state-dont-always-require-surgery/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Data Literacy is a Strategic Opportunity</title>
		<link>http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/</link>
					<comments>http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/#respond</comments>
		
		<dc:creator><![CDATA[Buck Woody]]></dc:creator>
		<pubDate>Thu, 26 Mar 2026 13:29:10 +0000</pubDate>
				<category><![CDATA[Chief Data Officer]]></category>
		<category><![CDATA[Data Literacy]]></category>
		<category><![CDATA[Data Strategy]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31055</guid>

					<description><![CDATA[<p>Every year, organizations spend money on data platforms, business intelligence tooling, and analytics subscriptions. The decision to start these projects get executive sponsorship. The implementation gets a project manager. The launch gets a company-wide email with a lot of enthusiasm and a screenshot of the new dashboard. Then, six months later, the same leadership team ... <a title="Data Literacy is a Strategic Opportunity" class="read-more" href="http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/" aria-label="Read more about Data Literacy is a Strategic Opportunity">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/">Data Literacy is a Strategic Opportunity</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p id="h-">Every year, organizations spend money on data platforms, business intelligence tooling, and analytics subscriptions. The decision to start these projects get executive sponsorship. The implementation gets a project manager. The launch gets a company-wide email with a lot of enthusiasm and a screenshot of the new dashboard. Then, six months later, the same leadership team is still making the same decisions the same way they always have, by instinct, by seniority, and by whoever made the most noise in the last meeting.The technology performed as designed. The strategy around it was incomplete from the start.</p>



<p>This is a pattern I&#8217;ve seen repeated across organizations of every size and industry, and it almost always traces back to the same root cause: leadership thinks infrastructure investment just has an inherent capability benefit. They&#8217;re not the same thing, and no amount of marketing features close that gap.</p>



<p>There&#8217;s a persistent belief I sse that the right platform will, on its own, change how an organization thinks, acts and just makes things better. But the food you see in the fast-food commercial isn&#8217;t always what you get at the counter. A dashboard placed in front of someone who doesn&#8217;t understand what they&#8217;re looking at produces exactly one outcome: confusion dressed up as confidence. People nod knowingly at the chart, return to their desks, and do what they were going to do anyway. I&#8217;ve been in those rooms. We&#8217;ve all been in those rooms.</p>



<p id="h-">This is expected behavior. When organizations invest heavily in data infrastructure but lightly in evaluating the real data capability, they create an asymmetry that no software release can fix. Closing the gap between &#8220;we have data&#8221; and &#8220;we use data well&#8221; is fundamentally a human problem, and it requires a human answer. I&#8217;m very passionate, especially in these data-rich, context-poor times, about Data Literacy. I&#8217;ve created and taught courses and workshops on Data Literacy from high-schools to colleges to C-level staff meetings.</p>



<h2 class="wp-block-heading" id="h-what-we-mean-when-we-say-data-literacy">What We Mean When We Say Data Literacy</h2>



<p>The term &#8220;Data Literacy&#8221; gets used loosely enough that it&#8217;s worth being precise about what it means in practice. Data literacy means equipping people at every level with the ability to read data critically, ask the right questions about what they&#8217;re seeing, and understand its limitations well enough to avoid being misled by it. Writing SQL or building regression models is specialty work. Understanding data correctly is everyone&#8217;s job. Anyone who uses data should be trained in Data Literacy.</p>



<p>Think about financial literacy as a parallel. A financially literate executive doesn&#8217;t personally perform audits. But they know how to read a balance sheet, they recognize when a number doesn&#8217;t make sense in context, and they know which questions will surface the real story beneath a tidy summary. Data literacy is that same capability applied to the information your organization produces and consumes every single day.</p>



<p>In practical terms, this looks like a sales manager who can examine a pipeline report and understand why a conversion rate trending upward during a seasonally slow period deserves skepticism rather than celebration. It looks like an operations director who can distinguish between a process that actually improved and a measurement methodology that changed. It looks like a finance partner who understands why an average can be technically correct and deeply misleading at the same time. None of these are advanced analytical skills. They&#8217;re foundational ones, and most organizations have never deliberately built them.</p>



<h2 class="wp-block-heading" id="h-data-literacy-is-the-cdo-s-job">Data Literacy is the CDO&#8217;s Job</h2>



<p>Chief Data Officers (or a group of people tasked in that capacity) tend to inherit a mandate that&#8217;s heavily weighted toward infrastructure: modernize the stack, migrate to the cloud, build the lake, implement governance. These are legitimate priorities and they deserve real attention. But they&#8217;re enabling work. The actual outcome the business is paying for is better decisions, made faster, with greater confidence. Infrastructure creates the conditions for that outcome. Literacy delivers it. The CDO who hands data literacy off to a learning and development team with a catalog of e-learning modules will consistently underdeliver on the promise of the data function. Literacy is a culture, and culture gets shaped by what leadership measures, rewards, and models, not by what it assigns.</p>



<p>The signals are usually obvious once you know to look for them. If the CDO is the only person in the room asking critical questions about data quality, that&#8217;s a signal. If business reviews treat dashboards as authority rather than as evidence to be interrogated, that&#8217;s a signal. If the phrase &#8220;the data shows&#8221; ends a conversation rather than starts one, that&#8217;s a signal. These are indicators of an organization where data fluency hasn&#8217;t been made a shared expectation, and shared expectations are set by leadership.</p>



<h2 class="wp-block-heading">Building Literacy Into the Work</h2>



<p>The organizations that do this well embed literacy into the work itself rather than running it as a separate program alongside the business. The approach is far more surgical than most people expect.</p>



<p>It starts by identifying the handful of decisions that drive the most value in the business, the ones that, if made faster or more accurately, would compound meaningfully over time. Then you audit those decisions: what data is actually being used, who&#8217;s interpreting it, what assumptions are baked into the framing, and what questions nobody&#8217;s asking yet. That audit almost always reveals that the bottleneck is the shared vocabulary and critical framework needed to act on what the data is saying, with access rarely being the real constraint.</p>



<p>From there, the work gets targeted. You build decision-specific fluency in the people closest to the choices that matter most, rather than spreading broad training across the whole organization. A supply chain team making weekly replenishment decisions needs to understand the difference between a forecast and a plan, and why treating those two things as synonymous is a quiet way to accumulate risk. That&#8217;s the level of fluency that changes behavior.</p>



<p>One of the most effective accelerators I&#8217;ve seen is embedding a data practitioner, whether that&#8217;s an analyst, an engineer, or a dbusiness analyst, directly into a business unit. When someone with real data fluency is present in the daily conversation, literacy transfers through proximity and practice. It&#8217;s a fundamentally different mechanism than coursework, and it works faster than anything else.</p>



<h2 class="wp-block-heading" id="h-measuring-what-matters">Measuring What Matters</h2>



<p>The correct goal is to measure how many decisions that used to be made on instinct are now being made on evidence. Like most things that are strategic, that&#8217;s a harder goal to reach than tracking completions on a training module, but it&#8217;s the measurement that connects data literacy to business performance rather than to HR reporting.</p>



<p>Some leading indicators are more tractable. You can track how often data products are actually opened before decisions get made, not after. You can observe whether leadership teams start requesting clarifying data rather than accepting the first number presented. You can listen for whether the vocabulary in business reviews shifts toward probabilistic language, words like &#8220;likely&#8221; and &#8220;indicates&#8221; and &#8220;given the assumptions,&#8221; rather than the false certainty that tends to dominate when nobody feels empowered to push back on a number.</p>



<p>These are cultural signals, and they accumulate slowly. But they&#8217;re the real evidence that an organization is actually becoming data-driven, rather than simply claiming to be.</p>



<h2 class="wp-block-heading" id="h-cfo-alignment">CFO Alignment</h2>



<p>When your CFO signed off on the data platform budget, they were approving a bet that better information would produce better outcomes. Every dollar you&#8217;ve spent on tooling, talent, and cloud compute is in service of that bet. Data literacy is the part that makes it pay off.</p>



<p>When the people closest to your most important decisions can read data critically, question its assumptions, and use it to challenge their own intuitions, the entire data function starts compounding. Dashboards actually get used. Models get trusted because people understand their boundaries. Governance gets adopted because people can see the value of reliable data, rather than experiencing it as a compliance burden handed down from somewhere above them.</p>



<p>The organizations that win with data are the ones where the most people, at the most levels, know how to think with data, and are expected to. That&#8217;s a leadership decision before it&#8217;s a technology one, and it belongs squarely in the CDO&#8217;s lane.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><em>Not sure where Data Literacy stands in your organization? <a href="https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstraightpathsql.com%2Fdata-estate-audit%2F&amp;data=05%7C02%7Cmike%40straightpathsql.com%7C301467e8da304a09e0b508de793bc9ac%7C037f3b9a86b84db88cc97669513e7e74%7C0%7C0%7C639081494853800992%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&amp;sdata=sBTxczuNVXWqBzwoCUM%2F4qTWKUf7h2SMTQxMt2XBY%2Bs%3D&amp;reserved=0">Straight Path&#8217;s Data Estate Audit</a> is a fixed-scope, four-week engagement led by Chief Data Officer Buck Woody that inventories your data and AI landscape, scores your maturity across key dimensions, and delivers a prioritized roadmap tied directly to your business goals, and delivers a ready-made, across-the-company Data Literacy course. The result is an executive-ready deliverable you can take to your board with confidence.</em></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/">Data Literacy is a Strategic Opportunity</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/data-literacy-is-a-strategic-opportunity/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Before You Hire a Head of AI</title>
		<link>http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/</link>
					<comments>http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/#respond</comments>
		
		<dc:creator><![CDATA[Mike Walsh]]></dc:creator>
		<pubDate>Fri, 20 Mar 2026 15:49:53 +0000</pubDate>
				<category><![CDATA[Chief Data Officer]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[Data Estate Audit]]></category>
		<category><![CDATA[Data Strategy]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31048</guid>

					<description><![CDATA[<p>I&#8217;ve told this story before, but it keeps applying to new things, so here we go again. A few years ago, we built a duplex. In-laws moving into the downstairs units, my office going upstairs. About a month out from moving in, I called the cable company to get service set up. Figured a couple ... <a title="Before You Hire a Head of AI" class="read-more" href="http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/" aria-label="Read more about Before You Hire a Head of AI">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/">Before You Hire a Head of AI</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>I&#8217;ve told this story before, but it keeps applying to new things, so here we go again.</em></p>



<p>A few years ago, we built a duplex. In-laws moving into the downstairs units, my office going upstairs. About a month out from moving in, I called the cable company to get service set up. Figured a couple of weeks, no big deal.</p>



<p><strong>That&#8217;s when I learned about the pole permit.</strong>..</p>



<p>Turns out, the cable was already on the shorter telephone pole. It just needed to be attached to the new taller one right next to it. Simple, right? Nope&#8230; Minimum 90 days to get approval from the power company. For a cable that needed to move about 2 feet, two companies that already worked together&#8230; Who&#8217;da thunk.</p>



<p><em>I didn&#8217;t know what I didn&#8217;t know. And I found out way too late.</em></p>



<p><em><strong>I&#8217;m watching companies make the same kind of mistake with AI right now, except the price tag is a lot bigger than a cable bill.</strong></em></p>



<h2 class="wp-block-heading" id="h-the-250k-discovery-project-disguised-as-a-new-hire">The $250K Discovery Project Disguised as a New Hire</h2>



<p><span style="box-sizing: border-box; margin: 0px; padding: 0px;"><em>Everyone is rushing to hire a Head of AI, called by different titles; it makes sense and can be a good hire for many</em>.</span> I&#8217;m seeing these postings everywhere. $200K-$300K salary, VP or C-level title, and a job description that reads like someone fed ChatGPT the phrase &#8220;we need AI&#8221; and asked it to write a wish list. SQL Server, Fabric Databricks, PySpark, SQL, PostgreSQL, ETL pipelines, Delta Lake, Spark optimization, Data Engineering &#8211; all in one person. That&#8217;s not a job description. That&#8217;s a unicorn wishlist, and it signals something important:<em> the company doesn&#8217;t actually know what they need yet.</em></p>



<p>They&#8217;re listing every data and AI buzzword they&#8217;ve heard, maybe even all the data sources and sinks they use and know about, and hoping someone shows up who can figure it out for them.</p>



<p>Here&#8217;s the thing. Gartner predicted that through 2026, <a href="https://www.gartner.com/en/newsroom/press-releases/2025-02-26-lack-of-ai-ready-data-puts-ai-projects-at-risk">60% of AI projects will be abandoned</a> <strong>because the data isn&#8217;t AI-ready</strong>. Not because the models are bad. Not because the team isn&#8217;t talented. Because nobody did the homework on what data they actually have, where it lives, whether it&#8217;s governed, and whether any of it is connected to anything else.</p>



<p>Your shiny new Head of AI isn&#8217;t going to walk in and start building machine learning pipelines on day one. They&#8217;re going to spend their first six months asking &#8220;where does this data actually live?&#8221; and &#8220;who owns this?&#8221; and &#8220;why is this table called sales_rollup_final_v2_REAL_final?&#8221;</p>



<p>Six months of a $250K salary is $125K. Spent mapping your data landscape. Before a single AI solution gets built.</p>



<h2 class="wp-block-heading">Before You Hire Your Head of AI, Consider This</h2>



<p>Before you write that job description, try answering a few questions first:</p>



<ul class="wp-block-list">
<li><strong>What data do you actually have?</strong> Not what you think you have. What&#8217;s <strong><em>really</em></strong> there. What&#8217;s in the warehouse, what&#8217;s in the ERP, what&#8217;s in Julie&#8217;s &#8220;CFO actual data&#8221; spreadsheet on the shared drive?</li>



<li><strong>Where does it live?</strong> On-prem? Cloud? Hybrid? Bob&#8217;s laptop?</li>



<li><strong>What&#8217;s connected and what&#8217;s siloed?</strong> Can your systems actually talk to each other, or are you moving data between them on thumb drives and email attachments? Don&#8217;t laugh. I&#8217;ve seen it at companies with nine-figure revenue.</li>



<li><strong>What&#8217;s governed and what&#8217;s a mess?</strong> Do you have data ownership? Retention policies? Access controls? Or is it the wild west? What will the [insert regulatory or audit framework people of choice here &#8211; NCUA examiner, State examiner, SOC2 auditor, HIPAA auditor, etc.] say when they realize that we don&#8217;t even know who owns these key data sources?</li>



<li><strong>What&#8217;s your actual business problem?</strong> &#8220;<strong><em>We need AI</em></strong>&#8221; is not a business problem; it&#8217;s sort of a panicked plea to not miss out. &#8220;We&#8217;re losing 15% of customers in the first 90 days and we don&#8217;t know why&#8221; is a business problem. &#8220;The monthly financial snapshot we deliver to the board each month isn&#8217;t trusted by anyone because the data in it keeps changing.&#8221;</li>
</ul>



<h2 class="wp-block-heading">What Changes When You Do the Homework First</h2>



<p><em>When you can answer those questions, three things change.</em></p>



<p>Your job description gets specific and realistic instead of being a buzzword buffet. Maybe you need a data engineer before you need a data scientist. Maybe you need a data governance framework before you need either one.</p>



<p>Your hiring priorities shift. You stop looking for a unicorn who can do everything and start looking for the right person for the actual problem you have.</p>



<p>And your odds of success go way up. Because your new hire walks into clarity instead of chaos, and they can start building on day one instead of spending six months figuring out what century your data infrastructure is in.</p>



<p>Our <a href="https://straightpathsql.com/archives/author/buckwoody/">CDO, Buck Woody</a>, does exactly this kind of work. He calls them <a href="https://straightpathsql.com/data-estate-audit/" type="page" id="30629" target="_blank" rel="noreferrer noopener">Data Estate Audits</a>, and they&#8217;re designed to give companies a clear picture of what they actually have before they start writing big checks for AI strategy. It&#8217;s the kind of thing that turns a six-figure guessing game into an informed decision.</p>



<p><strong><em>Whether you work with someone like Buck or figure it out internally, just do the work first</em></strong>. <em>Map what you have. Name what&#8217;s broken. Understand the connections and the gaps. Then hire.</em></p>



<p>The companies that will win with AI aren&#8217;t the ones that hired a Head of AI the fastest. They&#8217;re the ones who gave that person something real to work with when they showed up.</p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/">Before You Hire a Head of AI</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/before-you-hire-a-head-of-ai/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server Case of the Week: SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022</title>
		<link>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/</link>
					<comments>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/#respond</comments>
		
		<dc:creator><![CDATA[Sandra Delany]]></dc:creator>
		<pubDate>Fri, 20 Mar 2026 11:49:38 +0000</pubDate>
				<category><![CDATA[Case of the Week]]></category>
		<category><![CDATA[Data-Driven Subscriptions]]></category>
		<category><![CDATA[SQL Server 2022]]></category>
		<category><![CDATA[SQL Server Edition Comparison]]></category>
		<category><![CDATA[sql server migration]]></category>
		<category><![CDATA[SSRS]]></category>
		<category><![CDATA[SSRS Migration]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31037</guid>

					<description><![CDATA[<p>You migrate SSRS from SQL Server 2016 to SQL Server 2022. The reports are there. The data sources look right. The encryption key is loaded. Everything checks out until you open the web portal, and your data-driven subscriptions are gone. You can see them in the ReportServer.dbo.Subscriptions table, but the portal won&#8217;t show them. And ... <a title="SQL Server Case of the Week: SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022" class="read-more" href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/" aria-label="Read more about SQL Server Case of the Week: SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/">SQL Server Case of the Week: SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>You migrate SSRS from SQL Server 2016 to SQL Server 2022. The reports are there. The data sources look right. The encryption key is loaded. Everything checks out until you open the web portal, and your data-driven subscriptions are gone. You can see them in the ReportServer.dbo.Subscriptions table, but the portal won&#8217;t show them. And when you try to create a new one, the option doesn&#8217;t even exist. What happened to your subscriptions?</em></p>



<h2 class="wp-block-heading" id="h-the-investigation">The Investigation</h2>



<p>This client was migrating their SSRS environment from a SQL Server 2016 Enterprise Edition instance to a SQL Server 2022 Standard Edition instance, both running on AWS EC2. The new server was built from an AWS template rather than a manual install. The client said they had tested things, but hadn&#8217;t checked subscriptions in the portal or tried creating one.</p>



<p>When I opened the SSRS web portal on the new server, the subscriptions section was empty. No data-driven subscriptions at all.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="205" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-4.png" alt="" class="wp-image-31039" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-4.png 624w, http://straightpathsql.com/wp-content/uploads/2026/03/image-4-300x99.png 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p>On the original server, the subscriptions were all there and accounted for.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="625" height="217" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-5.png" alt="" class="wp-image-31040" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-5.png 625w, http://straightpathsql.com/wp-content/uploads/2026/03/image-5-300x104.png 300w" sizes="(max-width: 625px) 100vw, 625px" /></figure>



<p>When I tried to create a new subscription on the new server, the data-driven subscription option was completely missing from the menu.</p>



<p>I went through a long list of troubleshooting steps. Since I wasn&#8217;t the one who originally migrated the SSRS databases (ReportServer and ReportServerTempDB), I started by verifying that all the SSRS tabs matched between the two servers. I confirmed the encryption key was loaded and all settings were in place.</p>



<p>I checked permissions in the SSRS web portal. Under <strong>Manage folder > Security</strong>, I noticed the original server had BUILTIN\Administrators set to Content Manager. On the new server, the service account configured in the Subscription Settings tab wasn&#8217;t in the local Administrators group, and I didn&#8217;t want it there. I gave that service account Content Manager permission directly.</p>



<p>Under <strong>Site Settings</strong>, BUILTIN\Administrators had System Administrator permission on the old server, so I gave the service account System Administrator permissions on the new server as well. Restarted SSRS. Still no data-driven subscriptions.</p>



<p>I checked the SSRS logs and fixed some email errors along the way, but nothing pointed to why the data-driven subscriptions weren&#8217;t showing. Standard email subscriptions were visible, just not the data-driven ones. I compared the RSReportingServer.config on both servers. Nothing stood out.</p>



<p>Talk about pulling your hair out in frustration.</p>



<h2 class="wp-block-heading" id="h-the-fix">The Fix</h2>



<p>After all of that, I found the answer: <strong>SSRS Standard Edition does not support data-driven subscriptions.</strong> You need Enterprise Edition.</p>



<p>The original server was running SQL Server 2016 Enterprise. The new server, built from the AWS template, was SQL Server 2022 Standard. That edition difference is why the subscriptions disappeared from the portal and why the option to create new ones wasn&#8217;t there, even though the subscription data still existed in the underlying database tables.</p>



<p>The client needed to move to an Enterprise Edition instance. Once that was done and I also reconfigured the <strong>FileShareStorageLocation</strong> in RSReportingServer.config to use a separate drive (the Standard Edition instance had been filling up the C:\ drive with report output), the data-driven subscription option reappeared.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="360" height="129" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-6.png" alt="" class="wp-image-31041" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-6.png 360w, http://straightpathsql.com/wp-content/uploads/2026/03/image-6-300x108.png 300w" sizes="(max-width: 360px) 100vw, 360px" /></figure>



<p>This was just the first of three issues I hit on this single SSRS migration. The full story, including subscription Agent jobs not being created and a permissions issue with xp_sqlagent_notify, is covered in my <a href="https://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/">full blog post on SSRS migration troubleshooting</a>.</p>



<h2 class="wp-block-heading" id="h-the-takeaway">The Takeaway</h2>



<ol class="wp-block-list">
<li><strong>Know your edition features before you migrate.</strong> Data-driven subscriptions are an <a href="https://learn.microsoft.com/en-us/sql/reporting-services/subscriptions/data-driven-subscriptions?view=sql-server-ver17">Enterprise Edition-only feature in SSRS</a>. If you&#8217;re changing editions as part of a migration or upgrade, check the <a href="https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16">SQL Server feature comparison by edition</a> before you start. The subscriptions data will survive in the database tables, but the portal won&#8217;t show them and you won&#8217;t be able to create new ones on Standard.</li>



<li><strong>Test subscriptions specifically.</strong> It&#8217;s easy to validate that reports render and data sources connect, and call the migration &#8220;tested.&#8221; But subscriptions, especially data-driven ones, need their own validation step. Create a test subscription. Verify it fires. Don&#8217;t skip this.</li>



<li><strong>Watch out for AWS templates and pre-built images.</strong> When you&#8217;re using a template to spin up a new EC2 instance, you don&#8217;t always get to choose every detail of the install. In this case, the template delivered Standard Edition when the client&#8217;s environment needed Enterprise. If you&#8217;re using templates for your SQL Server builds, verify the edition and patch level before you start migrating anything onto it.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><em>Straight Path Solutions helps over 120 clients manage, migrate, and upgrade their SQL Server environments. SSRS migrations are <span style="box-sizing: border-box; margin: 0px; padding: 0px;">among the many tasks our team handles as part of our <a href="https://straightpathsql.com/sql-server-consultant/sql-server-dba-services/" target="_blank">DBA-as-a-Service</a></span> offering. If you&#8217;re planning an upgrade or migration, especially from older versions nearing the end of life (like SQL Server 2016 in 3 and a half months), our team has <a href="https://straightpathsql.com/sql-server-consultant/sql-server-upgrade/">a methodology and experience</a> to get it right the first time.</em></p>



<p></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/">SQL Server Case of the Week: SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/sql-server-case-of-the-week-ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022 -Troubleshooting Guide</title>
		<link>http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/</link>
					<comments>http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/#respond</comments>
		
		<dc:creator><![CDATA[Sandra Delany]]></dc:creator>
		<pubDate>Wed, 18 Mar 2026 17:51:08 +0000</pubDate>
				<category><![CDATA[SSRS]]></category>
		<category><![CDATA[Data-Driven Subscriptions]]></category>
		<category><![CDATA[Migration]]></category>
		<category><![CDATA[SQL Server 2022]]></category>
		<category><![CDATA[SSRS Migration]]></category>
		<category><![CDATA[Upgrade]]></category>
		<guid isPermaLink="false">https://straightpathsql.com/?p=31022</guid>

					<description><![CDATA[<p>If you&#8217;ve migrated SSRS to a new server and your data-driven subscriptions have disappeared, or new subscriptions are failing with a generic timeout error, this post walks through three separate issues we hit on a single migration and how we resolved each one. Data-Driven Subscriptions Disappeared After SSRS Migration to SQL 2022 Standard After migrating ... <a title="SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022 -Troubleshooting Guide" class="read-more" href="http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/" aria-label="Read more about SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022 -Troubleshooting Guide">Read more</a></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/">SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022 -Troubleshooting Guide</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><em>If you&#8217;ve migrated SSRS to a new server and your data-driven subscriptions have disappeared, or new subscriptions are failing with a generic timeout error, this post walks through three separate issues we hit on a single migration and how we resolved each one.</em></p>



<h2 class="wp-block-heading" id="h-data-driven-subscriptions-disappeared-after-ssrs-migration-to-sql-2022-standard">Data-Driven Subscriptions Disappeared After SSRS Migration to SQL 2022 Standard</h2>



<p>After migrating SSRS from SQL 2016 Enterprise Edition to SSRS SQL 2022 Standard Edition Data-driven subscriptions disappeared from within the SSRS web portal. However, I could see the subscriptions in the <strong>ReportServer.dbo.Subscriptions</strong> table.</p>



<p>SSRS was migrated from an EC2 instance where SQL and SSRS, etc. was installed by a DBA to an EC2 instance that was built using a template where all components were installed. When this was originally built out, we asked that they test. They said they did some testing, but they did not look at subscriptions in the portal nor did they create a subscription.</p>



<p>What the web portal looked like on the new SQL 2022 Standard Edition server:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="624" height="205" src="https://straightpathsql.com/wp-content/uploads/2026/03/image.jpg" alt="" class="wp-image-31023" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image.jpg 624w, http://straightpathsql.com/wp-content/uploads/2026/03/image-300x99.jpg 300w" sizes="(max-width: 624px) 100vw, 624px" /></figure>



<p>What we were expecting:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="625" height="217" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-1.jpg" alt="" class="wp-image-31024" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-1.jpg 625w, http://straightpathsql.com/wp-content/uploads/2026/03/image-1-300x104.jpg 300w" sizes="(max-width: 625px) 100vw, 625px" /></figure>



<p>If you tried to create a new subscription on the new SSRS server, you do not get the Data-driven subscription option:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="519" height="456" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-2.jpg" alt="" class="wp-image-31025" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-2.jpg 519w, http://straightpathsql.com/wp-content/uploads/2026/03/image-2-300x264.jpg 300w" sizes="(max-width: 519px) 100vw, 519px" /></figure>



<p>The type of subscription that was missing:</p>



<figure class="wp-block-image size-full"><img decoding="async" width="360" height="129" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-1.png" alt="" class="wp-image-31027" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-1.png 360w, http://straightpathsql.com/wp-content/uploads/2026/03/image-1-300x108.png 300w" sizes="(max-width: 360px) 100vw, 360px" /></figure>



<p><strong>Troubleshooting steps that did not help:</strong></p>



<ul class="wp-block-list">
<li>Since I was not the one to do the migration of the SSRS DBs (reportserver and reportservertempdb), I verified that all tabs within SSRS looked the same on both servers, I also checked that the encryption key was loaded and all settings were set.</li>



<li>I looked at permissions within SSRS web portal.<ul><li><strong>Manage folder, Security</strong> &#8211; I noticed on the original SSRS server it had BUILTIN\Administrators permissions set to <strong>Content Manager</strong>. &nbsp;I checked who was in the local administrators’ group on both servers. On the new server, the service account that was set within Subscription Settings tab was not added to the new server local administrators’ group nor did I want it in there. I changed security settings on the new server to so that account had <strong>Content Manager</strong> permission since that service account did not have it set but the BUILTIN\Administrators group did.</li></ul>
<ul class="wp-block-list">
<li><strong>Site settings</strong> &#8211; BUILTIN\Administrators had System Administrator permission so again I set the service account that was set in Subscription Settings to have System Administrator permissions. Restarted SSRS and again no Data-Driven Subscriptions.</li>
</ul>
</li>



<li>I looked at SSRS logs and fixed some email errors, but nothing stood out on why they were not shown. We could see email subscriptions.</li>



<li>I compared the RSReportingServer.config on both servers to see if anything was off. Nothing that stood out besides what I changed.</li>
</ul>



<p>Talk about pulling your hair out in frustration!</p>



<p><strong>The fix for the missing Data-driven subscriptions:</strong></p>



<p>I found out Standard Edition for SSRS does NOT allow you to create data-drive subscriptions!!!! You must have Enterprise Edition!</p>



<p>Again, we used the AWS template to create a new EC2 instance. No, I do not like templates, but they wanted pay-as-you-go, so you must use a template. With this new version\server, I asked to get new drives added and I moved the databases to that new data and log drive as well as moved tempdb onto their own drive.</p>



<p>I set <strong>FileShareStorageLocation</strong> within the <strong>RSReportingServer.config</strong> file to use the D:\ drive instead of C:\ since reports that were running on the Standard Edition server were filling up the C:\ drive which in and of itself caused issues. This change allows reports to use a different drive for report runs. I also disabled any SQL services within <strong>SQL Server Configuration Manager</strong> that were not wanted\needed. With this change, I could now see Types of subscriptions.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="360" height="129" src="https://straightpathsql.com/wp-content/uploads/2026/03/image.png" alt="" class="wp-image-31026" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image.png 360w, http://straightpathsql.com/wp-content/uploads/2026/03/image-300x108.png 300w" sizes="(max-width: 360px) 100vw, 360px" /></figure>



<p>You would have thought my issues were done… NO they were not.</p>



<h2 class="wp-block-heading" id="h-subscription-agent-jobs-not-created-after-upgrading-to-enterprise-edition">Subscription Agent Jobs Not Created After Upgrading to Enterprise Edition</h2>



<p>Once the original problem was “fixed”, I noticed a new issue.&nbsp; On the new Enterprise Edition server, I noticed that the subscription jobs were NOT automatically created. We do not copy those over, on a new SSRS server restarting SSRS “should” create those new subscription jobs if they do not already exist. &nbsp;We want SSRS to create them, so I know all is well when a new subscription is created then a corresponding Agent job gets created via SSRS. They have over a thousand subscriptions; I would NOT easily notice if the test subscription was created and I did not want to spend the time determining which test subscription was tied to which Agent job.</p>



<p><strong>Not the fix but told me a lot:</strong></p>



<ul class="wp-block-list">
<li>I changed the account that started SSRS from using a Virtual Service Account that did not have sysadmin rights to my domain account (yes, I have sysadmin rights within SQL). Restarted SSRS within <strong>Report Server Configuration Manager</strong> and lo and behold the subscription jobs were created. I deleted all 1000+ of them and changed the account back to Virtual Service Account. I wanted to use a Domain account, but the client insisted on using the Virtual Service Account since that is what was set on the server we migrated from.</li>



<li>Why I did the above change… I was troubleshooting an SSRS issue for a different client and an SSRS job would not run without changing the owner to SA and no changes were made to SQL or SSRS. Since this client server was an AG, failovers would change that owner back to the account starting SSRS since I have a mechanism where SSRS jobs get deleted from primary and the restart of SSRS adds that job back to the new primary server which brought me back to square one. I ended up changing the account that started SSRS to my domain account then back to a new domain account that did not have special privileges. The original domain account had DOMAIN ADMIN rights! Yes, you heard that right. I was mortified. I did not build these servers out. I had the client create a new domain account with no special privileges. I added that account to the primary server with no special privileges and removed the old SSRS account. I let SSRS set the permissions for that account which is done when you change accounts within <strong>Report Server Configuration Manager</strong>. I restarted SSRS and ran the job with the owner not changed and it ran. I used DBATools to copy that account to the secondary server. I even ran code to set all permissions for role <strong>RSExecRole</strong> just for giggles. Failed over and ran the newly created subscription job and again it worked. Sometimes thinking out of the box works but sometimes it doesn’t.</li>
</ul>



<p><strong>The fix:</strong></p>



<p>I checked the virtual service account permissions within SQL. I checked to see what was set within MSDB since I knew that is where permissions are set for accounts that we do NOT want to have sysadmin rights to create jobs. I noticed that role <strong>SQLAgentOperatorRole</strong> was not set. I set that permission and restarted SSRS. Reporting Server subscription jobs were now created!</p>



<p>We do NOT want to change the owner of those jobs to something else, especially if we do not give sysadmin rights to that account. Again, why would you give that access? Everyone and their mother <strong>should NOT </strong>have sysadmin rights.</p>



<p>When you migrate to a new server, lock things down and have them test before the final migration. The account that starts SSRS must be the owner of those jobs so that the service account can delete that Agent job if that subscription is removed from within the portal.</p>



<p>At this point, I released the server back to the client, thinking I was done. BUT no…</p>



<h2 class="wp-block-heading" id="h-new-subscriptions-failing-with-timeout-and-an-error-has-occurred">New Subscriptions Failing with Timeout and &#8216;An Error Has Occurred&#8217;</h2>



<p>After releasing the server, the person who creates reports and supports SSRS tried creating a new data-driven subscription. He reported back that the subscription creation would time out, and the “An error has occurred.” message appeared. What a not-so-helpful error! I tried creating a basic email subscription, and I too got the same error.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="595" height="327" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-2.png" alt="" class="wp-image-31028" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-2.png 595w, http://straightpathsql.com/wp-content/uploads/2026/03/image-2-300x165.png 300w" sizes="(max-width: 595px) 100vw, 595px" /></figure>



<p><strong>Troubleshooting steps that did not help:</strong></p>



<ul class="wp-block-list">
<li>This template had an outdated patch level of SSRS installed. For SSRS starting with SQL 2017, you must patch differently. It is no longer included in SQL patching. To find out what build of SSRS that is running open <strong>Report Server Configuration Manager</strong>. Login and the first window <strong>Report Server Status</strong> page will tell you the Product Version. Go to this website to find out what the latest build is &#8211; <a href="https://sqlserverbuilds.blogspot.com/2020/09/sql-server-reporting-services-ssrs.html">https://sqlserverbuilds.blogspot.com/2020/09/sql-server-reporting-services-ssrs.html</a>. Find the version of SSRS you have and want to patch. Look for the green Download <img decoding="async" width="75" height="23" src="blob:https://straightpathsql.com/187aafbd-66bd-4d62-adbf-9e4090231d2a"> button and click it. That button will redirect you so you can download the latest build of SSRS. I patched SSRS and tried creating a new email subscription. Same timeout issue.
<ul class="wp-block-list">
<li>Patching did not help my issue, but it needed to be done.</li>
</ul>
</li>



<li>Again, I looked at everything – SQL logs, SSRS logs, configuration files, etc.</li>
</ul>



<p>At this point, I am so frustrated and want to quit, but that is not who I am. Sometimes you have to throw in the towel and bring someone else in for a fresh set of eyes. I contacted a coworker and went over everything with him again.</p>



<p><strong>The fix:</strong></p>



<ul class="wp-block-list">
<li><strong><em>About those fresh set of eyes</em></strong>…. Apparently, that is the key to finding something you looked at over and over again. After looking at different things on our own again, then coming together on a screen share, he found the issue. But prior to that, we commented out the Oracle and Teradata data sources in the configuration file to help “clean up” errors in the SSRS log. You must restart SSRS to verify they no longer appear. He found a permission issue in the SSRS log that I missed. Maybe because I was searching for the word ERROR, and with so much information in the SSRS log, finding something like that can be easily overlooked. At least that is what I am telling myself to make me feel better in this whole debacle. It was an EXECUTE permission denied on the object ‘xp_sqlagent_notify’. This issue should NOT have existed since permissions should have been set when the role RSExecRole was created via SSRS when I pointed SSRS to use that restored database. Those roles existed in both master and msdb. There are blogs out there that provide the code to grant EXECUTE permissions in master and msdb. He ran it, and I recreated a subscription, and hallelujah, it created the subscription. I verified both the subscription and the job. I deleted the subscription in the portal and again verified the job deleted.</li>
</ul>



<figure class="wp-block-image size-full"><img decoding="async" width="975" height="108" src="https://straightpathsql.com/wp-content/uploads/2026/03/image-3.png" alt="" class="wp-image-31031" srcset="http://straightpathsql.com/wp-content/uploads/2026/03/image-3.png 975w, http://straightpathsql.com/wp-content/uploads/2026/03/image-3-300x33.png 300w, http://straightpathsql.com/wp-content/uploads/2026/03/image-3-768x85.png 768w" sizes="(max-width: 975px) 100vw, 975px" /></figure>



<ul class="wp-block-list">
<li><span style="box-sizing: border-box; margin: 0px; padding: 0px;">I asked my coworker who restored the original DBs on the Standard Edition server <span style="box-sizing: border-box; margin: 0px; padding: 0px;">whether he created the DBs first using <strong>Report Server Configuration Manager,</strong> then followed our migration process, or </span>restored them and then set things up in <strong>Report Server Configuration Manager</strong>.</span> He mentioned the databases were already created and set up, then he just followed our normal process and restored, etc. The only thing I did differently was I restored the two DBs first then used <strong>Report Server Configuration Manager</strong> to point to an existing SSRS database. I have done this before and did not have these issues, so I’m not sure why it happened here.</li>
</ul>



<p><strong>This time, when I released the server back to the client, everything worked as we expected. They officially migrated to this new server and dropped the other server from the AWS portal. </strong></p>
<p>The post <a href="http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/">SSRS Data-Driven Subscriptions Missing After Migration to SQL Server 2022 -Troubleshooting Guide</a> appeared first on <a href="http://straightpathsql.com">SQL Server Consulting - Straight Path Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>http://straightpathsql.com/archives/2026/03/ssrs-data-driven-subscriptions-missing-after-migration-to-sql-server-2022-troubleshooting-guide/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
