Lesson Learned From Multi-Threading with dbatools

Over the summer, I spent some (a lot of) time working on updates to a script at work which runs multiple processes in parallel. Everything seemed to work OK for a while, but then everything broke. It broke right around the time dbatools 1.1 dropped, so I started thinking that something must have changed there. As it turns out, it was entirely my fault and I hope this post will help you avoid the same trap.

Regular Expression Search & Replace in Visual Studio Code

Kind of a diversion into a Visual Studio Code/Azure Data Studio tip here (this works in both, as well as SQL Server Management Studio). I’m not a regular expression guru - far from it. I use them occasionally, but usually find myself fumbling around for a bit trying to figure out just the right expression to do what I need.

I’ve known for a while that VSCode/ADS had regular expression matching built into its find/replace feature, but did you know you can also replace with it? It can help remove the tedium of doing a large amount of text processing.

Troubleshooting Backup Compression for Encrypted Databases

For years, I thought that native backups of databases using Transparent Data Encryption (TDE) couldn’t be compressed. Between TDE being limited to Enterprise Edition until SQL Server 2019 and my own lack of experience with TDE in prior positions, I hadn’t really experimented with this myself. Some people have even gone so far as to skip compression in their backup jobs for TDE-enabled databases because there’s no need to burn those CPU cycles if you won’t get any compression, right?

T-SQL Tuesday #136: Your Favorite (or Least Favorite) Data Type

T-SQL Tuesday is a monthly blog party hosted by a different community member each month, and this month Brent Ozar (blog | twitter) asks us to talk about data types.

T-SQL Tuesday Logo

Your mission: write a blog post about your favorite data type, and schedule it for next Tuesday, March 9.

Mad about money? Feverish about float? Tell us what you use your favorite data type for, and what people need to know before they get started using it. Data types have so many interesting edge cases, like when Aaron Bertrand taught us to use lower case for our data types.

Followup for the Kansas City SQL Server User Group

I had a great time speaking at the Kansas City SQL Server User Group on Thursday, February 18th. The more I present my Backup Basics with PowerShell and dbatools session, the more I enjoy it. And each time, I’ve learned something new myself.

In one of the demos I show how Restore-DbaDatabase selects and restores the most recent backup of a database when pointed at a directory holding several backups of a single database. Dan Maenle (twitter) asked how the function knows which one is the most recent. Timestamps? Filenames? Really good guesses? My takeaway from the session was to confirm the method in use.

Speaking at the Kansas City SQL Server User Group

I will be presenting my session “Backup Basics with PowerShell and dbatools” this Thursday, February 18th at 2:30 PM Central Time at the Kansas City SQL Server User Group. I’m looking forward to getting this demo-rich session out in front more of folks to show how easy dbatools makes some of these common backup-related tasks.

Come check it out! Or, if you’d like to see this or one of my other presentations at another user group meeting, please drop me a line!

Upgrading Ola Hallengren's Maintenance Solution with dbatools

While presenting Backup Basics with PowerShell and dbatools at ONDT, I mentioned a caveat with the -ReplaceExisting switch for Install-DbaMaintenanceSolution. This switch drops all of the objects installed by the Maintenance Solution, including the CommandLog table. If you use that table to produce evidence that the various maintenance tasks are being performed on a regular basis or use it to track performance of those tasks over time, dropping that table presents a problem.

A Non-Technical Reason to Not Use SELECT *

I got a merge a while back that included a change I wasn’t expecting from one of my developers. All they were doing was renaming a column on a table. We had names settled a while ago. What’s up with that?

Turns out, when I created the table, I named one of the fields BrithYear. This merge request corrected it to BirthYear. The misspelling slipped past me, past everyone else, it was only discovered because when this developer was building the a new query into their code, they spelled the field as one would expect, and the query threw an error.