<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>spaghettidba</title><link>https://933e05f9.spaghettidba-com.pages.dev/</link><description>Recent content on spaghettidba</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Sat, 16 Sep 2023 08:54:57 +0000</lastBuildDate><atom:link href="https://933e05f9.spaghettidba-com.pages.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>DataMoshpit!</title><link>https://933e05f9.spaghettidba-com.pages.dev/2023/09/16/datamoshpit/</link><pubDate>Sat, 16 Sep 2023 08:54:57 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2023/09/16/datamoshpit/</guid><description>Today I'm presenting at DataMospit, the most metal conference in the data space!
You can download the Sea of Madness bingo card from here: https://github.com/spaghettidba/CodeSamples/raw/master/SQLServerInfernals/InfernalBingo.xlsx
The winner will get a 1 year subscription to QMonitor, the fantastic SQL Server monitoring solution from Quantumdatis.
Good luck!</description></item><item><title>Code signing for mere mortals</title><link>https://933e05f9.spaghettidba-com.pages.dev/2023/06/10/code-signing-for-mere-mortals/</link><pubDate>Sat, 10 Jun 2023 12:35:26 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2023/06/10/code-signing-for-mere-mortals/</guid><description>Well, turns out code signing is pretty complex, so I'm writing this blog post as a guide for my future self. I hope he will appreciate, and perhaps some of you may find it useful as well.
The need for code signing There is a lot of malware out there, we all know it, so you'd better be careful with what you download and install on your computer. Browsers try to help with that and will warn you when you download a suspicious piece of software:</description></item><item><title>Recipe 10: Writing Events to InfluxDB</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/03/04/recipe-10-writing-events-to-influxdb/</link><pubDate>Fri, 04 Mar 2022 14:00:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/03/04/recipe-10-writing-events-to-influxdb/</guid><description>Welcome to the last recipe of this Extended Events cookbook! You will find the first blog post of the series here and you can browse all recipes with the xesmarttarget tag on this blog.
The problem The TIG software stack (Telegraf, InfluxDB, Grafana) is a very powerful combination of software tools that can help you collect, store and analyze data that has a time attribute. In particular, InfluxDB is a time series database, built with sharding, partitioning and retention policies in mind.</description></item><item><title>Recipe 9: Capturing Queries and Plans</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/03/03/recipe-9-capturing-queries-and-plans/</link><pubDate>Thu, 03 Mar 2022 14:00:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/03/03/recipe-9-capturing-queries-and-plans/</guid><description>Welcome to a new recipe of this Extended Events cookbook! You will find the first blog post of the series here and you can browse all recipes with the xesmarttarget tag on this blog.
The problem In the previous recipe we used XESmartTarget to analyze a workload and we could characterize it by application/login/database. Now let’s take one more step: let’s capture all the queries and their plans and add query_hash and query_plan_hash to the analysis table.</description></item><item><title>Recipe 8: Analyzing a Workload</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/03/02/recipe-8-analyzing-a-workload/</link><pubDate>Wed, 02 Mar 2022 14:00:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/03/02/recipe-8-analyzing-a-workload/</guid><description>Welcome to a new recipe of this Extended Events cookbook! You will find the first blog post of the series here and you can browse all recipes with the xesmarttarget tag on this blog.
The problem The idea comes from a blog post by Brent Ozar about "How to Find Out Whose Queries are Using The Most CPU". Brent uses the Resource Governor to detect who's using the CPU. That's an interesting approach, but you can do the same more efficiently with XESmartTarget.</description></item><item><title>Recipe 7: Finding Unused Tables</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/03/01/recipe-7-finding-unused-tables/</link><pubDate>Tue, 01 Mar 2022 14:00:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/03/01/recipe-7-finding-unused-tables/</guid><description>Welcome toa new recipe of this Extended Events cookbook! You will find the first blog post of the series here and you can browse all recipes with the xesmarttarget tag on this blog. The problem The previous recipe showed you how to capture data from Extended Events sessions, summarize it in memory and then save it to a table in SQL Server, merging with any existing rows. This comes extremely handy when the events are not useful individually, but when the story is told by the aggregation of all the events.</description></item><item><title>Recipe 6: Auditing Successful Logins</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/02/28/recipe-6-auditing-successful-logins/</link><pubDate>Mon, 28 Feb 2022 14:05:07 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/02/28/recipe-6-auditing-successful-logins/</guid><description>Welcome to a new recipe of this Extended Events cookbook! You will find the first blog post of the series here and you can browse all recipes with the xesmarttarget tag on this blog. The problem Sometimes you are not interested in the individual events captured by a session, but you want to extract some information from a series of events, by grouping and aggregating them. This is the case of events that happen very often, like, logon events, that can help you validate your story.</description></item><item><title>Recipe 5: Killing blocking SPIDs</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/02/28/recipe-5-killing-blocking-spids/</link><pubDate>Mon, 28 Feb 2022 14:00:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/02/28/recipe-5-killing-blocking-spids/</guid><description>Welcome to the latest recipe of this Extended Events cookbook! You will find the first blog post of the series here and you can browse all recipes with the xesmarttarget tag on this blog.
The problem In the previous recipe, you learned how to notify when specific events occur, using the EmailResponse. Notifications are appropriate when user intervention is required, but when the system can resolve the issue automatically it's better to avoid notifying users of the issue altogether.</description></item><item><title>Recipe 4: Sending Alerts via Email</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/02/25/recipe-4-sending-alerts-via-email/</link><pubDate>Fri, 25 Feb 2022 14:00:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/02/25/recipe-4-sending-alerts-via-email/</guid><description>Welcome to the latest recipe of this Extended Events cookbook! You will find the first blog post of the series here and you can browse all recipes with the xesmarttarget tag on this blog.
The problem In the previous recipe, you learned how to combine multiple Responses together and how to control their output, using filters and Expression Columns. Armed with this knowledge, you can now tackle the most complex problems, using all the available Response types.</description></item><item><title>Recipe 3: Merging and manipulating events</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/02/24/recipe-3-merging-and-manipulating-events/</link><pubDate>Thu, 24 Feb 2022 14:00:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/02/24/recipe-3-merging-and-manipulating-events/</guid><description>Welcome to the third recipe of this Extended Events cookbook! You will find the first blog post of the series here and you can browse all recipes with the xesmarttarget tag on this blog.
The problem In the previous recipe, we wrote event data to a table in the database and each event used field and action names to map to the column names in the table. The same information (the text of the command) was stored in two separate columns, depending on the event type:</description></item><item><title>Recipe 2: Writing Extended Events to a table</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/02/23/recipe-2-writing-extended-events-to-a-table/</link><pubDate>Wed, 23 Feb 2022 14:00:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/02/23/recipe-2-writing-extended-events-to-a-table/</guid><description>Welcome to the second recipe of this Extended Events cookbook! You will find the first blog post of the series here and you can browse all recipes with the xesmarttarget tag on this blog.
The problem This time, you want capture all the queries executing on your server and save the Extended Events data to a table in SQL Server. One of the things you cannot achieve easily with the standard targets in Extended Events is writing to a database table.</description></item><item><title>Recipe 1: Writing Extended Events to a CSV file</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/02/22/recipe-1-writing-extended-events-to-a-csv-file/</link><pubDate>Tue, 22 Feb 2022 14:00:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/02/22/recipe-1-writing-extended-events-to-a-csv-file/</guid><description>Welcome to the first recipe of this Extended Events cookbook! You will find the first blog post of the series here and you can browse all recipes with the xesmarttarget tag on this blog.
Recipes: what are the ingredients? Every recipe starts with a problem to solve and has three ingredients:
A session to capture the eventsA JSON configuration file for XESmartTarget to process the eventsA client application to read the data produced by XESmartTarget The problem In this case, imagine that you wanted to observe the commands executed on a SQL Server instance and save them to a file to process them later.</description></item><item><title>10 DBA recipes with XESmartTarget</title><link>https://933e05f9.spaghettidba-com.pages.dev/2022/02/21/10-dba-recipes-with-xesmarttarget/</link><pubDate>Mon, 21 Feb 2022 10:00:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2022/02/21/10-dba-recipes-with-xesmarttarget/</guid><description>Some time ago, I started a project called XESmartTarget. I find it super useful and you should probably know about it. It’s totally my fault if you’re not using it and I apologize for all the pain that it could have saved you, but it didn’t because I did not promote it enough.
Now I want to remedy my mistake with a 10 days series of blog posts on XESmartTarget, which will show you how useful it can be and how it can be used to accomplish your daily DBA tasks using Extended Events.</description></item><item><title>SQLSaturday is dead, long live DataSaturdays</title><link>https://933e05f9.spaghettidba-com.pages.dev/2020/12/18/sqlsaturday-is-dead-long-live-datasaturdays/</link><pubDate>Fri, 18 Dec 2020 13:20:02 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2020/12/18/sqlsaturday-is-dead-long-live-datasaturdays/</guid><description>This is a very brief post to inform you that PASS has died, killed by the for-profit company behind it. That's sad beyond words, but we, as a community, are not destined to the same fate. The community will rise again and build something new.
One of the things that we don't want to lose is SQLSaturday. It's been a substantial vehicle for involving community members locally and globally. It has been the launchpad for many community speakers.</description></item><item><title>Replaying Workloads to a different Database</title><link>https://933e05f9.spaghettidba-com.pages.dev/2020/03/31/replaying-workloads-to-a-different-database/</link><pubDate>Tue, 31 Mar 2020 09:27:04 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2020/03/31/replaying-workloads-to-a-different-database/</guid><description>One of the features I was asked to implement for WorkloadTools is the ability to replay commands to a database name different from the one recorded in the source workload.
This is something that I had been planning to implement for a while and it totally makes sense. Usually, you have two identical environments for the workload capture and replay, both with the same databases. Sometimes it makes sense to have two different databases as the source and target for the workload, for some particular reasons: resources constraints, ease of testing and so on.</description></item><item><title>Performing a real-time replay with WorkloadTools</title><link>https://933e05f9.spaghettidba-com.pages.dev/2020/03/03/performing-a-real-time-replay-with-workloadtools/</link><pubDate>Tue, 03 Mar 2020 18:50:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2020/03/03/performing-a-real-time-replay-with-workloadtools/</guid><description>In a previous blog post, I showed you how to use WorkloadTools to replay a workload in two different scenarios. However, there is a third scenario that is worth exploring: the real-time replay.
Before we jump to how, I’d better spend some words on why a real-time replay is needed.
The main reason is the complexity involved in capturing and analyzing a workload for extended periods of time. Especially when performing migrations and upgrades, it is crucial to capture the entire business cycle, in order to cover all possible queries issued by the applications.</description></item><item><title>Collecting Diagnostic data from multiple SQL Server instances with dbatools</title><link>https://933e05f9.spaghettidba-com.pages.dev/2019/11/24/collecting-diagnostic-data-from-multiple-sql-server-instances-with-dbatools/</link><pubDate>Sun, 24 Nov 2019 19:32:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2019/11/24/collecting-diagnostic-data-from-multiple-sql-server-instances-with-dbatools/</guid><description>Keeping their SQL Server instances under control is a crucial part of the job of a DBA. SQL Server offers a wide variety of DMVs to query in order to check the health of the instance and establish a performance baseline.
My favourite DMV queries are the ones crafted and maintained by Glenn Berry: the SQL Server Diagnostic Queries. These queries already pack the right amount of information and can be used to take a snapshot of the instance’s health and performance.</description></item><item><title>Troubleshooting "Could not obtain information about Windows NT group/user"</title><link>https://933e05f9.spaghettidba-com.pages.dev/2019/08/16/troubleshooting-could-not-obtain-information-about-windows-nt-group-user/</link><pubDate>Fri, 16 Aug 2019 15:00:48 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2019/08/16/troubleshooting-could-not-obtain-information-about-windows-nt-group-user/</guid><description>This is one of those typical blog posts that I write for my future self, the guy who keeps fixing the same stuff over and over and forgets what he did the next minute.
If you want to query information about a Windows user or group and its access path in SQLServer, you can use the extended stored procedure "xp_logininfo". Here's an example:
EXEC xp_logininfo 'MyDomain\SomeUser','all'; If everything is configured correctly, you will see a list of Windows accounts and the login(s) they are mapped to in SQLServer.</description></item><item><title>Workload replay with WorkloadTools</title><link>https://933e05f9.spaghettidba-com.pages.dev/2019/06/20/workload-replay-with-workloadtools/</link><pubDate>Thu, 20 Jun 2019 16:01:28 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2019/06/20/workload-replay-with-workloadtools/</guid><description>In my last post, I described how to capture a workload to a file, in order to run a replay against your target environment at a later time. Well, that later time has come and you’re ready to roll.
Of course, WorkloadTools has got you covered.
Before I show you how SqlWorkload can run the replay, reading all data from the workload file, I need to spend some time describing how to set up your target environment.</description></item><item><title>Life behind a proxy server: downloading content for SSMS Help Viewer</title><link>https://933e05f9.spaghettidba-com.pages.dev/2019/05/09/life-behind-a-proxy-server-downloading-content-for-ssms-help-viewer/</link><pubDate>Thu, 09 May 2019 17:24:10 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2019/05/09/life-behind-a-proxy-server-downloading-content-for-ssms-help-viewer/</guid><description>Life behind a proxy server can be problematic. Not every software out there is tested correctly for proxy interaction and oftentimes the experience for the corporate user is a bit frustrating. I blogged about this before, regarding Powershell Gallery and regarding how to download and install content for the SSMS Help Viewer in SQL Server 2014 and SQL Server 2016.
When I tried to update my post for SQL Server 2017, I got stuck, because my "</description></item><item><title>Generating a Jupyter Notebook for Glenn Berry's Diagnostic Queries with PowerShell</title><link>https://933e05f9.spaghettidba-com.pages.dev/2019/03/20/generating-a-jupyter-notebook-for-glenn-berrys-diagnostic-queries-with-powershell/</link><pubDate>Wed, 20 Mar 2019 20:35:46 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2019/03/20/generating-a-jupyter-notebook-for-glenn-berrys-diagnostic-queries-with-powershell/</guid><description>The March release of Azure Data Studio now supports Jupyter Notebooks with SQL kernels. This is a very interesting feature that opens new possibilities, especially for presentations and for troubleshooting scenarios.
For presentations, it is fairly obvious what the use case is: you can prepare notebooks to show in your presentations, with code and results combined in a convenient way. It helps when you have to establish a workflow in your demos that the attendees can repeat at home when they download the demos for your presentation.</description></item><item><title>Capturing a Workload with WorkloadTools</title><link>https://933e05f9.spaghettidba-com.pages.dev/2019/03/12/capturing-a-workload-with-workloadtools/</link><pubDate>Tue, 12 Mar 2019 16:03:41 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2019/03/12/capturing-a-workload-with-workloadtools/</guid><description>Last week I showed you how to use WorkloadTools to analyze a workload. As you have seen, using SqlWorkload to extract performance data from your workload is extremely easy and it just takes a few keystrokes in your favorite text editor to craft the perfect .json configuration file.
Today I’m going to show you how to capture a workload and save it to a file. If you’ve ever tried to perform this task with any other traditional benchmarking tool, like RML Utilities or Distributed Replay, your palms are probably sweaty already, but fear not: no complicated traces to set up, no hypertrophic scripts to create extended events captures.</description></item><item><title>Workload analysis with WorkloadTools</title><link>https://933e05f9.spaghettidba-com.pages.dev/2019/02/26/workload-analysis-with-workloadtools/</link><pubDate>Tue, 26 Feb 2019 19:53:32 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2019/02/26/workload-analysis-with-workloadtools/</guid><description>Last week I introduced WorkloadTools and promised additional posts to describe what it can do in more detail. So, here we go: in this post I will show you how to use WorkloadTools to capture a workload and analyze it, in order to find things like the most resource-intensive queries or discover how the application behaves over time.
Capturing the workload First of all, you need to capture the workload using SqlWorkload.</description></item><item><title>Benchmarking with WorkloadTools</title><link>https://933e05f9.spaghettidba-com.pages.dev/2019/02/15/benchmarking-with-workloadtools/</link><pubDate>Fri, 15 Feb 2019 18:16:53 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2019/02/15/benchmarking-with-workloadtools/</guid><description>If you ever tried to capture a benchmark on your SQL Server, you probably know that it is a complex operation. Not an impossible task, but definitely something that needs to be planned, timed and studied very thoroughly.
The main idea is that you capture a workload from production, you extract some performance information, then you replay the same workload to one or more environments that you want to put to test, while capturing the same performance information.</description></item><item><title>A bug in merge replication with FILESTREAM data</title><link>https://933e05f9.spaghettidba-com.pages.dev/2018/07/03/a-bug-in-merge-replication-with-filestream-data/</link><pubDate>Tue, 03 Jul 2018 12:05:55 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2018/07/03/a-bug-in-merge-replication-with-filestream-data/</guid><description>I wish I could say that every DBA has a love/hate relationship with Replication, but, let&amp;rsquo;s face it, it&amp;rsquo;s only hate. But it could get worse: it could be Merge Replication. Or even worse: Merge Replication with FILESTREAM.
What could possibly top all this hatred and despair if not a bug? Well, I happened to find one, that I will describe here.
The scenario I published tables with FILESTREAM data before, but it seems like there is a particular planetary alignment that triggers an error during the execution of the snapshot agent.</description></item><item><title>Recovering the PsGallery Repository behind a Corporate Proxy</title><link>https://933e05f9.spaghettidba-com.pages.dev/2017/12/19/recovering-the-psgallery-repository-behind-a-corporate-proxy/</link><pubDate>Tue, 19 Dec 2017 14:44:45 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2017/12/19/recovering-the-psgallery-repository-behind-a-corporate-proxy/</guid><description>While getting a new workstation is usually nice, reinstalling all your softwares and settings is definitely not the most pleasant thing that comes to my mind. One of the factors that can contribute the most to making the process even less pleasant is working around the corporate proxy.
Many applications live on the assumption that nobody uses proxy servers, thus making online repositories inaccessible for new installations and for automatic updates.</description></item><item><title>How To Enlarge Your Columns With No Downtime</title><link>https://933e05f9.spaghettidba-com.pages.dev/2017/11/15/how-to-enlarge-your-columns-with-no-downtime/</link><pubDate>Wed, 15 Nov 2017 19:44:45 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2017/11/15/how-to-enlarge-your-columns-with-no-downtime/</guid><description>Let&amp;rsquo;s face it: column enlargement is a very sensitive topic. I get thousands of emails every month on this particular topic, although most of them end up in my spam folder. Go figure&amp;hellip;
The inconvenient truth is that enlarging a fixed size column is a long and painful operation, that will make you wish there was a magic lotion or pill to use on your column to enlarge it on the spot.</description></item><item><title>Introducing XESmartTarget</title><link>https://933e05f9.spaghettidba-com.pages.dev/2017/10/19/introducing-xesmarttarget/</link><pubDate>Thu, 19 Oct 2017 11:56:04 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2017/10/19/introducing-xesmarttarget/</guid><description>Three years ago, I started to work on a project called ExtendedTsqlCollector. I blogged about it multiple times here on spaghettidba.com.
Even if I received positive feedback, I knew that one aspect was slowing down the adoption of the project: the Data Collector. That particular feature of SQL Server has a very bad reputation for being difficult to set up, customize and monitor. ExtendedTSQLCollector tried to address some of those issues, but the damage was already done and I knew that the Data Collector was already on the verge of extinction.</description></item><item><title>Expensive Enterprise Backup Tools – A survival guide</title><link>https://933e05f9.spaghettidba-com.pages.dev/2017/09/13/expensive-enterprise-backup-tools-a-survival-guide/</link><pubDate>Wed, 13 Sep 2017 11:15:16 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2017/09/13/expensive-enterprise-backup-tools-a-survival-guide/</guid><description>If you’re working for a big company, chances are that your IT already has a strategy and tools for dealing with backups. Many objects need to backed up (files, emails, virtual machines, databases…) and vendors are happy to provide software solutions for all those needs.
Usually, the first type of object that has to be protected is files: every company, even the smaller ones, have file servers with lots of data that has to be regularly backed up, so the data protection solution found in the majority of companies is typically built around the capabilities and features of backup tools designed and engineered for protecting the file system.</description></item><item><title>Using Virtual Desktops for Presentations</title><link>https://933e05f9.spaghettidba-com.pages.dev/2017/03/13/using-virtual-desktops-for-presentations/</link><pubDate>Mon, 13 Mar 2017 17:30:45 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2017/03/13/using-virtual-desktops-for-presentations/</guid><description>Today I was reading William Durkin&amp;lsquo;s fine post on Presentation Mode in SSMS vNext when inspiration struck.
One of the things that really annoys me when presenting is the transition between slides and demos. Usually, I try to improve the process as much as possible by having the least minimum amount of windows open while presenting, so that I don&amp;rsquo;t land on the wrong window. Unfortunately, that is not always easy.</description></item><item><title>Upcoming Speaking Engagements</title><link>https://933e05f9.spaghettidba-com.pages.dev/2017/02/27/upcoming-speaking-engagements-2/</link><pubDate>Mon, 27 Feb 2017 18:24:53 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2017/02/27/upcoming-speaking-engagements-2/</guid><description>In the next few months I will be speaking at some awesome events around Europe.
SQLBits - April 5-8 SQLBits is THE SQL Server event in Europe, with a very long tradition and a fantastic audience. I totally love SQLBits! This time I will speak about &amp;ldquo;Benchmarking like a PRO&amp;rdquo;. In this session I will demonstrate how to capture a baseline with RML Utilities and how to replay it against a target machine to compare baseline and benchmarks.</description></item><item><title>Installing SQL Server 2016 Language Reference Help from disk</title><link>https://933e05f9.spaghettidba-com.pages.dev/2016/10/17/installing-sql-server-2016-language-reference-help-from-disk/</link><pubDate>Mon, 17 Oct 2016 14:35:49 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2016/10/17/installing-sql-server-2016-language-reference-help-from-disk/</guid><description>A couple of years ago I blogged about Installing the SQL Server 2014 Language Reference Help from disk.
With SQL Server 2016 things changed significantly: we have the new Help Viewer 2.2, which is shipped with the Management Studio setup kit.
However, despite all the changes in the way help works and is shipped, I am still unable to download and install help content from the web, so I resorted to using the same trick that I used for SQL Server 2014.</description></item><item><title>ForumSurfer - a RSS reader for the SQL Server online community</title><link>https://933e05f9.spaghettidba-com.pages.dev/2016/08/31/forumsurfer-a-rss-reader-for-the-sql-server-online-community/</link><pubDate>Wed, 31 Aug 2016 17:10:52 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2016/08/31/forumsurfer-a-rss-reader-for-the-sql-server-online-community/</guid><description>Today I published the first release of ForumSurfer, a RSS reader designed explicitly to be a tool for the SQL Server online community.
Here is a screenshot:
ForumSurfer has some unique features that will help you help others online:
it is designed to help you keep an eye on multiple communities through their RSS feeds it opens questions in the integrated web browser it can update from the feeds much more often than online RSS readers do it has built-in support for boilerplate answers it supports high-DPI displays, letting you choose the appropriate zoom level for individual sites it can import/export OPML files (you can start by importing the OPML file containing all the online SQL Server communities I'm keeping on the radar) What are you waiting for?</description></item><item><title>SSMS is now High-DPI ready</title><link>https://933e05f9.spaghettidba-com.pages.dev/2016/08/18/ssms-2016-is-now-hidpi-ready/</link><pubDate>Thu, 18 Aug 2016 15:15:18 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2016/08/18/ssms-2016-is-now-hidpi-ready/</guid><description>One of the most popular posts on this bog describes how to enable bitmap scaling is SSMS on high DPI displays, which is a sign that more and more people are starting to use 4K displays and are unhappy with SSMS&amp;rsquo;s behaviour at high DPI. The solution described in that post is to enable bitmap scaling, which renders graphic objects correctly, at the price of some blurriness.
The good news is that starting with SSMS 16.</description></item><item><title>My Feedback on my PASS Abstracts Feedback</title><link>https://933e05f9.spaghettidba-com.pages.dev/2016/06/30/my-feedback-on-my-pass-abstracts-feedback/</link><pubDate>Thu, 30 Jun 2016 23:03:32 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2016/06/30/my-feedback-on-my-pass-abstracts-feedback/</guid><description>Brent Ozar recently published the feedback he got on his abstract submissions for PASS Summit 2016 and, as he often does, started a trend which some others followed. I think the feedback is interesting and useful for speakers that plan to improve their own submissions for the years to come, so I decided I will publish my feedback as well.
I did not get selected and, obviously, I would be happier if I got selected instead.</description></item><item><title>Upcoming Speaking Engagements</title><link>https://933e05f9.spaghettidba-com.pages.dev/2016/04/14/upcoming-speaking-engagements/</link><pubDate>Thu, 14 Apr 2016 18:01:30 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2016/04/14/upcoming-speaking-engagements/</guid><description>The next few months will be crazy for me. I will be travelling a lot around Europe, speaking about SQL Server topics.
Here is where you will find me in the upcoming weeks:
May 4: SQLNexus SQLNexus is a new conference in Copenhagen and will be the official launch event in Denmark for SQL Server 2016. I will speak about "Responding to Extended Events in near Real-Time". May 5: SQLBits SQLBits doesn't need to be introduced.</description></item><item><title>Weird Things Happen with Windows Users</title><link>https://933e05f9.spaghettidba-com.pages.dev/2016/03/18/weird-things-happen-with-windows-users/</link><pubDate>Fri, 18 Mar 2016 11:48:44 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2016/03/18/weird-things-happen-with-windows-users/</guid><description>This will be no surprise to those who have been working with SQL Server for a long time, but it can be puzzling at first and actually I was a bit confused myself when I stumbled upon this behavior for the first time.
SQL Server treats windows users in a special way, a way that could lead us to some interesting observations.
First of all, we need a test database and a couple of windows principals to perform our tests:</description></item><item><title>An annoying Bug in the Restore Dialog</title><link>https://933e05f9.spaghettidba-com.pages.dev/2016/02/23/an-annoying-bug-in-the-restore-dialog/</link><pubDate>Tue, 23 Feb 2016 17:06:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2016/02/23/an-annoying-bug-in-the-restore-dialog/</guid><description>Today, thanks to a customer, I discovered one of those annoying little things that can really drive you nuts.
Basically, they were trying to restore a backup using the SSMS Restore Database window and they kept getting &amp;ldquo;No backupset selected to be restored&amp;rdquo; whenever a backup file was selected.
You just had to select a file for restore and click OK&amp;hellip;
&amp;hellip; to be met with an error message in the Restore Database window:</description></item><item><title>SSMS in High-DPI Displays: How to Stop the Madness</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/10/14/ssms-in-high-dpi-displays-how-to-stop-the-madness/</link><pubDate>Wed, 14 Oct 2015 01:11:56 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/10/14/ssms-in-high-dpi-displays-how-to-stop-the-madness/</guid><description>I spent the last few weeks travelling a lot compared to my usual routine and I got quickly fed up with bringing my mobile workstation with me. My Dell precision M4600 is a powerhouse, but it’s definitely too big and too heavy for travelling, so I decided it was time to buy a small laptop just for travelling and presenting at SQL Saturdays and events around Europe.
After lots of research, I pulled the trigger on a new XPS13.</description></item><item><title>SQL Server Infernals – Circle 6: Environment Pollutors</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/07/31/sql-server-infernals-circle-6-environment-pollutors/</link><pubDate>Fri, 31 Jul 2015 11:35:20 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/07/31/sql-server-infernals-circle-6-environment-pollutors/</guid><description>Don’t tell me that you didn’t see it coming: at some point, Developers end up being put to hell by a DBA!
I don’t want to enter the DBA/Developer wars, but some sins committed by Developers really deserve a ticket to the SQL Server hell. In particular, some of those sins are perpetrated when not even a single line of code is written yet and they have to do with the way the development environment is set up.</description></item><item><title>SQL Server Infernals - Circle 5: Inconsistent Baptists</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/07/17/sql-server-infernals-circle-5-inconsistent-baptists/</link><pubDate>Fri, 17 Jul 2015 17:25:08 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/07/17/sql-server-infernals-circle-5-inconsistent-baptists/</guid><description>There’s a place in the SQL Server hell where you can find poor souls wandering the paths of their circle, shouting nonsense table names or system-generated constraint names, trying to baptize everything they find on their way in a different manner. They might seem innocuous at a first glance, but beware those damned souls, as they can raise confusion and endanger performance.
What they say in Heaven Guided by the Intelligent Designer’s hands, database architects in Heaven always name their tables, columns and all database objects following the rules in the ISO 11179 standard.</description></item><item><title>SQL Server Infernals - Circle 4: Anarchic Designers</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/07/07/sql-server-infernals-circle-4-anarchic-designers/</link><pubDate>Tue, 07 Jul 2015 18:06:27 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/07/07/sql-server-infernals-circle-4-anarchic-designers/</guid><description>Constraints are sometimes annoying in real life, but no society can exist without rules and regulations. The same concept is found in Database Design: no good data can exist without constraints.
What they say in Heaven Constraints define what is acceptable in the database and what does not comply with business rules. In Heaven, where the perfect database runs smoothly, no constraint is overlooked and all the data obeys to the rules of angels: Every column accepts only the data it was meant for, using the appropriate data type Every column that requires a value has a NOT NULL constraint Every column that references a key in a different table has a FOREIGN KEY constraint Every column that must comply with a business rule has a CHECK constraint Every column that must be populated with a predefined value has a DEFAULT constraint Every table has a PRIMARY KEY constraint Every group of columns that does not accept duplicate values has a UNIQUE constraint Chaos belongs to hell OK: Heaven is Heaven, but what about hell?</description></item><item><title>SQL Server Infernals - Circle 3: Shaky Typers</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/07/02/sql-server-infernals-circle-3-shaky-typers/</link><pubDate>Thu, 02 Jul 2015 09:53:29 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/07/02/sql-server-infernals-circle-3-shaky-typers/</guid><description>Choosing the right data type for your columns is first of all a design decision that has tremendous impact on the correctness of the database schema. It is not just about performance or space usage: the data type is the first constraint on your data and it decides what can be persisted in your columns and what is not acceptable.
Choosing the wrong data type for your columns is a mistake that might make your life as a DBA look like hell.</description></item><item><title>SQL Server Infernals - Circle 2: Generalizers</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/06/24/sql-server-infernals-circle-2-generalizers/</link><pubDate>Wed, 24 Jun 2015 23:10:18 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/06/24/sql-server-infernals-circle-2-generalizers/</guid><description>Object-Oriented programming taught us that generalizing is a good thing and, whenever possible, we should do it. Complex class hierarchies are a good way of reusing code, hitting the specialized classes only when a special implementation is needed.
In the database world, the concept doesn’t play exactly well.
What they say in Heaven In Heaven, there is a lookup table for each attribute, no matter how simple and no matter how small is the lookup table.</description></item><item><title>SQL Server Infernals – Circle 1: Undernormalizers</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/06/17/sql-server-infernals-row-1-undernormalizers/</link><pubDate>Wed, 17 Jun 2015 17:34:32 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/06/17/sql-server-infernals-row-1-undernormalizers/</guid><description>There’s a special place in the SQL Server Hell for those who design their schema without following the Best Practices. In this first episode of SQL Server Infernals, we will explore together the Row of the Poor Schema Designers, also known as “undernormalizers”.
What they say in Heaven In Heaven, where all Best Practices are followed and everything runs smoothly while angels sing, they design their databases following the rules of normalization.</description></item><item><title>Announcing SQL Server Infernals</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/06/09/announcing-sql-server-infernals/</link><pubDate>Tue, 09 Jun 2015 18:29:44 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/06/09/announcing-sql-server-infernals/</guid><description>Today I&amp;rsquo;m starting a new blog series called &amp;ldquo;SQL Server Infernals&amp;rdquo;.
Throughout this series, I will take your hand and walk you through the hell of SQL Server Worst Practices, as Virgil did with Dante in his Commedia.
You may ask why you should care about worst practices, when you have loads of great sources for Best Practices. The answer is that they are not enough.
There are too many Best Practices: how are you supposed to know all of them?</description></item><item><title>Native Client Aliases don't like Trailing Spaces</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/05/26/native-client-aliases-dont-like-trailing-spaces/</link><pubDate>Tue, 26 May 2015 23:13:13 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/05/26/native-client-aliases-dont-like-trailing-spaces/</guid><description>I usually don&amp;rsquo;t post small things like this, but today I fought with this obnoxious problem long enough to convince me that it deserved a shout out to the community.
When you create an alias in the SQL Server Configuration Manager, make sure that the alias name contains no spaces, otherwise it won&amp;rsquo;t work as you expect.
In my case, I had a Reporting Services instance with many data sources pointing to a SQL Server instance (let&amp;rsquo;s call it MyServer) and I wanted to redirect connections to a different instance using an alias.</description></item><item><title>Counting the number of rows in a table</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/05/18/counting-the-number-of-rows-in-a-table/</link><pubDate>Mon, 18 May 2015 18:10:08 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/05/18/counting-the-number-of-rows-in-a-table/</guid><description>Don&amp;rsquo;t be fooled by the title of this post: while counting the number of rows in a table is a trivial task for you, it is not trivial at all for SQL Server.
Every time you run your COUNT(*) query, SQL Server has to scan an index or a heap to calculate that seemingly innocuous number and send it to your application. This means a lot of unnecessary reads and unnecessary blocking.</description></item><item><title>How to post a T-SQL question on a public forum</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/</link><pubDate>Fri, 24 Apr 2015 18:42:10 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/</guid><description>If you want to have faster turnaround on your forum questions, you will need to provide enough information to the forum users in order to answer your question.
In particular, talking about T-SQL questions, there are three things that your question must include:
Table scripts Sample data Expected output &amp;nbsp; Table Script and Sample data Please make sure that anyone trying to answer your question can quickly work on the same data set you’re working on, or, at least the problematic part of it.</description></item><item><title>Tracking Table Usage and Identifying Unused Objects</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/04/20/tracking-table-usage-and-identifying-unused-objects/</link><pubDate>Mon, 20 Apr 2015 10:49:57 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/04/20/tracking-table-usage-and-identifying-unused-objects/</guid><description>One of the things I hate the most about &amp;ldquo;old&amp;rdquo; databases is the fact that unused tables are kept forever, because nobody knows whether they&amp;rsquo;re used or not. Sometimes it&amp;rsquo;s really hard to tell. Some databases are accessed by a huge number of applications, reports, ETL tools and God knows what else. In these cases, deciding whether you should drop a table or not is a tough call.
Search your codebase The easiest way to know if a table is used, is to search the codebase for occurences of the table name.</description></item><item><title>Should I check tempdb for corruption?</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/03/02/should-i-check-tempdb-for-corruption/</link><pubDate>Mon, 02 Mar 2015 18:04:39 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/03/02/should-i-check-tempdb-for-corruption/</guid><description>You all know that checking our databases for corruption regularly is a must. But what about tempdb? Do you need to check it as well?
The maintenance plans that come with SQL Server do not run DBCC CHECKDB on tempdb, which is a strong indicator that it’s a special database and something different is happening behind the scenes. If you think that relying on the behavior of a poor tool such as maintenance plans to make assumptions on internals is a bit far-fetched, well, I see your point.</description></item><item><title>Speaking at SQLSaturday Pordenone</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/02/20/speaking-at-sqlsaturday-pordenone/</link><pubDate>Fri, 20 Feb 2015 00:28:52 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/02/20/speaking-at-sqlsaturday-pordenone/</guid><description>Next week, on Saturday 28, make sure you don&amp;rsquo;t miss SQLSaturday Pordenone!
Pordenone is the place where the Italian adventure with SQLSaturday started, more than two years ago. It was the beginning of a journey that brought many SQLSaturdays to Italy, with our most successful one in Parma last November.
Now we&amp;rsquo;re back in Pordenone to top that result!
We have a fantastic schedule for this event, with a great speaker lineup and great topics for the sessions.</description></item><item><title>Please Throw this Hardware at the Problem</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/02/12/please-throw-this-hardware-at-the-problem/</link><pubDate>Thu, 12 Feb 2015 20:30:52 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/02/12/please-throw-this-hardware-at-the-problem/</guid><description>We’re being told over and over that “throwing hardware at the problem” is not the correct solution for performance problems and a 2x faster server will not make our application twice as fast. Quite true, but there’s one thing that we can do very easily without emptying the piggy bank and won’t hurt for sure: buying more RAM.
The price for server-class RAM has dropped so dramatically that today you can buy a 16 GB module for around € 200.</description></item><item><title>Blame it on Connect</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/02/02/blame-it-on-connect/</link><pubDate>Mon, 02 Feb 2015 18:34:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/02/02/blame-it-on-connect/</guid><description>Some weeks ago I blogged about the discouraging signals coming from Connect and my post started a discussion that didn’t go very far. Instead it died quite soon: somebody commented the post and ranted about his Connect experience. I&amp;rsquo;m blogging again about Connect, but I don&amp;rsquo;t want to start a personal war against Microsoft: today I want to look at what happened from a new perspective.
What I find disappointing is a different aspect of the reactions from the SQL Server community, which made me think that maybe it’s not only Connect’s fault.</description></item><item><title>Installing multiple default instances on a single server</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/01/29/installing-multiple-default-instances-on-a-single-server/</link><pubDate>Thu, 29 Jan 2015 19:17:03 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/01/29/installing-multiple-default-instances-on-a-single-server/</guid><description>As you probably know, SQL Server allows only one default instance per server. The reason is not actually something special to SQL Server, but it has to do with the way TCP/IP endpoints work.
In fact, a SQL Server default instance is nothing special compared to a named instance: it has a specific instance id (MSSQLSERVER) and listens on a well-known TCP port (1433), but it has no other intrinsic property or feature that makes it different from any other instance.</description></item><item><title>The big disconnect with Connect</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/01/07/the-big-disconnect-with-connect/</link><pubDate>Wed, 07 Jan 2015 19:58:35 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/01/07/the-big-disconnect-with-connect/</guid><description>A couple of years ago I blogged about a bug on the Data Collector that I couldn&amp;rsquo;t resolve but with an ugly workaround. At the end of that post, I stated that I wouldn&amp;rsquo;t have bothered filing the bug on Connect, due to prior discouraging results. Well, despite what I wrote there, I took the time to open a bug on Connect (the item can be found here), which was promptly closed as &amp;ldquo;won&amp;rsquo;t fix&amp;rdquo;.</description></item><item><title>I'm an MVP: now what?</title><link>https://933e05f9.spaghettidba-com.pages.dev/2015/01/02/im-an-mvp-now-what/</link><pubDate>Fri, 02 Jan 2015 00:36:16 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2015/01/02/im-an-mvp-now-what/</guid><description>Today when I checked my mailbox I found an amazing surprise: I joined the ranks of the Most Valuable Professionals for SQL Server!
I am honoured to join a community of people that I highly respect and have always been my inspiration. The MVPs I had the pleasure to meet are a model to strive for: exceptional technical experts and great community leaders that devote their own time to spread their knowledge.</description></item><item><title>Monitoring blocking and deadlocking with Extended T-SQL Collector</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/12/12/monitoring-blocking-and-deadlocking-with-extended-t-sql-collector/</link><pubDate>Fri, 12 Dec 2014 18:29:25 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/12/12/monitoring-blocking-and-deadlocking-with-extended-t-sql-collector/</guid><description>Monitoring blocking and deadlocking hasn&amp;rsquo;t always been easy. Sometimes, the tools available in SQL Server are not as friendly as we would like them to be.
Some are very useful for alerting, but don&amp;rsquo;t provide a simple way to capture additional information about the event. For instance, a simple SQLAgent alert for &amp;ldquo;deadlocks/sec &amp;gt; 0&amp;rdquo; is enough to shoot an email to the DBAs whenever a deadlock happens, but it doesn&amp;rsquo;t provide a simple way to capture the deadlock graph and include it in the email or save it to a destination table.</description></item><item><title>Another good reason to avoid AUTO_CLOSE</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/11/13/another-good-reason-to-avoid-auto_close/</link><pubDate>Thu, 13 Nov 2014 19:10:09 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/11/13/another-good-reason-to-avoid-auto_close/</guid><description>Does anybody need another good reason to avoid setting AUTO_CLOSE on a database? Looks like I found one.
Some days ago, all of a sudden, a database started to throw errors along the lines of &amp;ldquo;The log for database MyDatabase is not available&amp;rdquo;. The instance was an old 2008 R2 Express (don&amp;rsquo;t get me started on why an Express Edition is in production&amp;hellip;) with some small databases.
The log was definitely there and the database looked online.</description></item><item><title>Installing SQL Server 2014 Language Reference Help from disk</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/09/25/installing-sql-server-2014-language-reference-help-from-disk/</link><pubDate>Thu, 25 Sep 2014 17:24:19 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/09/25/installing-sql-server-2014-language-reference-help-from-disk/</guid><description>Some weeks ago I had to wipe my machine and reinstall everything from scratch, SQL Server included.
For some reason that I still don&amp;rsquo;t understand, SQL Server Management Studio installed fine, but I couldn&amp;rsquo;t install Books Online from the online help repository. Unfortunately, installing from offline is not an option with SQL Server 2014, because the installation media doesn&amp;rsquo;t include the Language Reference documentation.
The issue is well known: Aaron Bertrand blogged about it back in april when SQL Server 2014 came out and he updated his post in august when the documentation was finally completely published.</description></item><item><title>Database Free Space Monitoring - The right way</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/09/05/database-free-space-monitoring-the-right-way/</link><pubDate>Fri, 05 Sep 2014 15:28:03 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/09/05/database-free-space-monitoring-the-right-way/</guid><description>Lately I spent some time evaluating some monitoring tools for SQL Server and one thing that struck me very negatively is how none of them (to date) has been reporting database free space correctly. I was actively evaluating one of those tools when one of my production databases ran out of space without any sort of warning. I was so upset that I decided to code my own monitoring script.</description></item><item><title>Announcing ExtendedTSQLCollector</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/07/22/announcing-extendedtsqlcollector/</link><pubDate>Tue, 22 Jul 2014 18:04:26 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/07/22/announcing-extendedtsqlcollector/</guid><description>I haven’t been blogging much lately, actually I haven’t been blogging at all in the last 4 months. The reason behind is I have been putting all my efforts in a new project I started recently, which absorbed all my attention and spare time.
I am proud to announce that my project is now live and available to everyone for download.
The project name is ExtendedTSQLCollector and you can find it at http://extendedtsqlcollector.</description></item><item><title>Hangout #18 with Boris Hristov</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/04/18/hangout-18-with-boris-hristov/</link><pubDate>Fri, 18 Apr 2014 17:19:09 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/04/18/hangout-18-with-boris-hristov/</guid><description>Yesterday evening I had the honour and pleasure of recording one of his famous SQL Hangout with my friend Boris Hristov (b|t).
We discussed some of the new features in SQL Server 2014, in particular the new Cardinality Estimator and the Delayed Durability. Those are definitely interesting innovations and something everybody should be checking out when planning new work on SQL Server 2014. The two features have nothing to do with each other, but we decided to speak about both of them nevertheless.</description></item><item><title>Uniquifiers: all rows or the duplicate keys only?</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/03/14/uniquifiers-all-rows-or-the-duplicate-keys-only/</link><pubDate>Fri, 14 Mar 2014 18:39:49 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/03/14/uniquifiers-all-rows-or-the-duplicate-keys-only/</guid><description>Some days ago I was talking with my friend Davide Mauri about the uniquifier that SQL Server adds to clustered indexes when they are not declared as UNIQUE.
We were not completely sure whether this behaviour applied to duplicate keys only or to all keys, even when unique.
The best way to discover the truth is a script to test what happens behind the scenes:
-- ============================================= -- Author: Gianluca Sartori - @spaghettidba -- Create date: 2014-03-15 -- Description: Checks whether the UNIQUIFIER column -- is added to a column only on -- duplicate clustering keys or all -- keys, regardless of uniqueness -- ============================================= USE tempdb GO IF OBJECT_ID(&amp;#39;sizeOfMyTable&amp;#39;) IS NOT NULL DROP VIEW sizeOfMyTable; GO -- Create a view to query table size information -- Not very elegant, but saves a lot of typing CREATE VIEW sizeOfMyTable AS SELECT OBJECT_NAME(si.</description></item><item><title>Verdasys Digital Guardian and SQL Server</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/02/03/verdasys-digital-guardian-and-sql-server-setup/</link><pubDate>Mon, 03 Feb 2014 20:15:25 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/02/03/verdasys-digital-guardian-and-sql-server-setup/</guid><description>I&amp;rsquo;m writing this post as a reminder for myself and possibly to help out the poor souls that may suffer the same fate as me.
There&amp;rsquo;s a software out there called &amp;ldquo;Digital Guardian&amp;rdquo; which is a data loss protection tool. Your computer may be running this software without you knowing: your system administrators may have installed it in order to prevent users from performing operations that don&amp;rsquo;t comply to corporate policies and may lead to data loss incidents.</description></item><item><title>Non-unique indexes that COULD be unique</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/01/30/non-unique-indexes-that-could-be-unique/</link><pubDate>Thu, 30 Jan 2014 15:45:30 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/01/30/non-unique-indexes-that-could-be-unique/</guid><description>In my last post I showed a query to identify non-unique indexes that should be unique.
You maybe have some other indexes that could be unique based on the data they contain, but are not.
To find out, you just need to query each of those indexes and group by the whole key, filtering out those that have duplicate values. It may look like an overwhelming amount of work, but the good news is I have a script for that:</description></item><item><title>Non-unique indexes that should be unique</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/01/29/non-unique-indexes-that-should-be-unique/</link><pubDate>Wed, 29 Jan 2014 19:21:14 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/01/29/non-unique-indexes-that-should-be-unique/</guid><description>Defining the appropriate primary key and unique constraints is fundamental for a good database design.
One thing that I often see overlooked is that all the indexes with a key that includes completely another UNIQUE index&amp;rsquo;s key should in turn be created as UNIQUE. You could argue that such an index has probably been created by mistake, but it&amp;rsquo;s not always the case.
If you want to check your database for indexes that can be safely made UNIQUE, you can use the following script:</description></item><item><title>SQL Server Agent in Express Edition</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/01/23/sql-server-agent-in-express-edition/</link><pubDate>Thu, 23 Jan 2014 19:38:40 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/01/23/sql-server-agent-in-express-edition/</guid><description>As you probably know, SQL Server Express doesn&amp;rsquo;t ship with SQL Server Agent.
This is a known limitation and many people offered alternative solutions to schedule jobs, including windows scheduler, free and commercial third-party applications.
My favourite SQL Server Agent replacement to date is Denny Cherry&amp;rsquo;s Standalone SQL Agent, for two reasons:
It uses msdb tables to read job information. This means that jobs, schedules and the like can be scripted using the same script you would use in the other editions.</description></item><item><title>COPY_ONLY backups and Log Shipping</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/01/22/copy_only-backups-and-log-shipping/</link><pubDate>Wed, 22 Jan 2014 19:44:27 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/01/22/copy_only-backups-and-log-shipping/</guid><description>Last week I was in the process of migrating a couple of SQL Server instances from 2008 R2 to 2012.
In order to let the migration complete quickly, I set up log shipping from the old instance to the new instance. Obviously, the existing backup jobs had to be disabled, otherwise they would have broken the log chain.
That got me thinking: was there a way to keep both “regular” transaction log backups (taken by the backup tool) and the transaction log backups taken by log shipping?</description></item><item><title>Open SSMS Query Results in Excel with a Single Click</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/01/16/open-ssms-query-results-in-excel-with-a-single-click/</link><pubDate>Thu, 16 Jan 2014 00:58:32 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/01/16/open-ssms-query-results-in-excel-with-a-single-click/</guid><description>The problem One of the tasks that I often have to complete is manipulate some data in Excel, starting from the query results in SSMS. Excel is a very convenient tool for one-off reports, quick data manipulation, simple charts.
Unfortunately, SSMS doesn’t ship with a tool to export grid results to Excel quickly.
Excel offers some ways to import data from SQL queries, but none of those offers the rich query tools available in SSMS.</description></item><item><title>2013 in review</title><link>https://933e05f9.spaghettidba-com.pages.dev/2014/01/02/2013-in-review/</link><pubDate>Thu, 02 Jan 2014 15:50:48 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2014/01/02/2013-in-review/</guid><description>The WordPress.com stats helper monkeys prepared a 2013 annual report for this blog.
Here&amp;rsquo;s an excerpt:
The concert hall at the Sydney Opera House holds 2,700 people. This blog was viewed about 19,000 times in 2013. If it were a concert at Sydney Opera House, it would take about 7 sold-out performances for that many people to see it. Click here to see the complete report.</description></item><item><title>Copy user databases to a different server with PowerShell</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/10/31/copy-user-databases-to-a-different-server-with-powershell/</link><pubDate>Thu, 31 Oct 2013 18:08:46 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/10/31/copy-user-databases-to-a-different-server-with-powershell/</guid><description>Sometimes you have to copy all user databases from a source server to a destination server.
Copying from development to test could be one reason, but I&amp;rsquo;m sure there are others.
Since the question came up on the forums at SQLServerCentral, I decided to modify a script I published some months ago to accomplish this task.
Here is the code:
## ============================================= ## Author: Gianluca Sartori - @spaghettidba ## Create date: 2013-10-07 ## Description: Copy user databases to a destination ## server ## ============================================= cls sl &amp;#34;c:\&amp;#34; $ErrorActionPreference = &amp;#34;Stop&amp;#34; # Input your parameters here $source = &amp;#34;SourceServer\Instance&amp;#34; $sourceServerUNC = &amp;#34;SourceServer&amp;#34; $destination = &amp;#34;DestServer\Instance&amp;#34; # Shared folder on the destination server # For instance &amp;#34;\\DestServer\D$&amp;#34; $sharedFolder = &amp;#34;\\DestServer\sharedfolder&amp;#34; # Path to the shared folder on the destination server # For instance &amp;#34;D:&amp;#34; $remoteSharedFolder = &amp;#34;PathOfSharedFolderOnDestServer&amp;#34; $ts = Get-Date -Format yyyyMMdd # # Read default backup path of the source from the registry # $SQL_BackupDirectory = @&amp;#34; EXEC master.</description></item><item><title>Ten features you had in Profiler that are missing in Extended Events</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/10/29/ten-features-you-had-in-profiler-that-are-missing-in-extended-events/</link><pubDate>Tue, 29 Oct 2013 00:37:56 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/10/29/ten-features-you-had-in-profiler-that-are-missing-in-extended-events/</guid><description>Oooooops!
I exchanged some emails about my post with Jonathan Kehayias and looks like I was wrong on many of the points I made.
I don&amp;rsquo;t want to keep misleading information around and I definitely need to fix my wrong assumptions.
Unfortunately, I don&amp;rsquo;t have the time to correct it immediately and I&amp;rsquo;m afraid it will have to remain like this for a while.
Sorry for the inconvenience, I promise I will try to fix it in the next few days.</description></item><item><title>Error upgrading MDW from 2008R2 to 2012</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/10/24/error-upgrading-mdw-from-2008r2-to-2012/</link><pubDate>Thu, 24 Oct 2013 21:48:49 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/10/24/error-upgrading-mdw-from-2008r2-to-2012/</guid><description>Some months ago I posted a method to overcome some quirks in the MDW database in a clustered environment.
Today I tried to upgrade that clustered instance (in a test environment, fortunately) and I got some really annoying errors.
Actually, I got what I deserved for messing with the system databases and I wouldn&amp;rsquo;t even dare posting my experience if it wasn&amp;rsquo;t cause by something I suggested on this blog.</description></item><item><title>SQL Server services are gone after upgrading to Windows 8.1</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/10/24/sql-server-services-are-gone-after-upgrading-to-windows-8-1/</link><pubDate>Thu, 24 Oct 2013 17:02:10 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/10/24/sql-server-services-are-gone-after-upgrading-to-windows-8-1/</guid><description>Yesterday I upgraded my laptop to Windows 8.1 and everything seemed to have gone smoothly.
I really like the improvements in Windows 8.1 and I think they&amp;rsquo;re worth the hassle of an upgrade if you&amp;rsquo;re still on Windows 8.
As I was saying, everything seemed to upgrade smoothly. Unfortunately, today I found out that SQL Server services were gone.
My configuration manager looked like this:
My laptop had an instance of SQL Server 2012 SP1 Developer Edition and the windows upgrade process had deleted all SQL Server services but SQL Server Browser.</description></item><item><title>Check SQL Server logins with weak password</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/09/09/check-sql-server-logins-with-weak-password/</link><pubDate>Mon, 09 Sep 2013 18:22:10 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/09/09/check-sql-server-logins-with-weak-password/</guid><description>SQL Server logins can implement the same password policies found in Active Directory to make sure that strong passwords are being used.
Unfortunately, especially for servers upgraded from previous versions, the password policies are often disabled and some logins have very weak passwords.
In particular, some logins could have the password set as equal to the login name, which would by one of the first things I would try to hack a server.</description></item><item><title>SQL2014: Defining non-unique indexes in the CREATE TABLE statement</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/06/28/defining-non-unique-indexes/</link><pubDate>Fri, 28 Jun 2013 17:02:48 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/06/28/defining-non-unique-indexes/</guid><description>Now that my SQL Server 2014 CTP1 virtual machine is ready, I started to play with it and some new features and differences with the previous versions are starting to appear.
What I want to write about today is a T-SQL enhancement to DDL statements that brings in some new interesting considerations.
SQL Server 2014 now supports a new T-SQL syntax that allows defining an index in the CREATE TABLE statement without having to issue separate CREATE INDEX statements.</description></item><item><title>SQL Server 2014 CTP1 available for download</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/06/25/sql-server-2014-ctp1-available-for-download/</link><pubDate>Tue, 25 Jun 2013 08:44:36 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/06/25/sql-server-2014-ctp1-available-for-download/</guid><description>The day has come at last! SQL Server 2014 CTP1 is available for download!
You can now start playing with Hekaton and all the exciting features included in this version.
Mi suggestion is to create a new virtual machine for your playground: this CTP version won&amp;rsquo;t install on a machine with other installations of SQL Server.
If you prefer it and you have a subscription, you can also try SQL Server 2014 on Windows Azure.</description></item><item><title>A viable alternative to dynamic SQL in administration scripts</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/04/22/a-viable-alternative-to-dynamic-sql-in-administration-scripts/</link><pubDate>Mon, 22 Apr 2013 17:53:41 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/04/22/a-viable-alternative-to-dynamic-sql-in-administration-scripts/</guid><description>As a DBA, you probably have your toolbox full of scripts, procedures and functions that you use for the day-to-day administration of your instances.
I’m no exception and my hard drive is full of scripts that I tend to accumulate and never throw away, even if I know I will never need (or find?) them again.
However, my preferred way to organize and maintain my administration scripts is a database called “TOOLS”, which contains all the scripts I regularly use.</description></item><item><title>Moving system databases to the default data and log paths</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/03/22/move-system-databases-to-the-default-data-and-log-paths/</link><pubDate>Fri, 22 Mar 2013 13:02:03 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/03/22/move-system-databases-to-the-default-data-and-log-paths/</guid><description>Recently I had to assess and tune quite a lot of SQL Server instances and one the things that are often overlooked is the location of the system databases.
I often see instance where the system databases are located in the system drives under the SQL Server default installation path, which is bad for many reasons, especially for tempdb.
I had to move the system databases so many times that I ended up coding a script to automate the process.</description></item><item><title>Data Collector Clustering Woes</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/03/19/data-collector-clustering-woes/</link><pubDate>Tue, 19 Mar 2013 23:46:57 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/03/19/data-collector-clustering-woes/</guid><description>During the last few days I’ve been struggling to work around something that seems to be a bug in SQL Server 2008 R2 Data Collector in a clustered environment. It’s been quite a struggle, so I decided to post my findings and my resolution, hoping I didn’t contend in vain.
SYMPTOMS:
After setting up a Utility Control Point, I started to enroll my instances to the UCP and everything was looking fine.</description></item><item><title>dba_runCHECKDB v2(012)</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/02/27/dba_runcheckdb-v2012/</link><pubDate>Wed, 27 Feb 2013 20:48:44 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/02/27/dba_runcheckdb-v2012/</guid><description>If you are one among the many that downloaded my consistency check stored procedure called “dba_RunCHECKDB”, you may have noticed a “small” glitch… it doesn’t work on SQL Server 2012!
This is due to the resultset definition of DBCC CHECKDB, which has changed again in SQL Server 2012. Trying to pipe the results of that command in the table definition for SQL Server 2008 produces a column mismatch and it obviously fails.</description></item><item><title>Discovering resultset definition of DBCC commands in SQL Server 2012</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/02/26/discovering-resultset-definition-of-dbcc-commands-sql-server-2102/</link><pubDate>Tue, 26 Feb 2013 00:56:49 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/02/26/discovering-resultset-definition-of-dbcc-commands-sql-server-2102/</guid><description>Back in 2011 I showed a method to discover the resultset definition of DBCC undocumented commands.
At the time, SQL Server 2012 had not been released yet and nothing suggested that the linked server trick could stop working on the new major version. Surprisingly enough it did.
If you try to run the same code showed in that old post on a 2012 instance, you will get a quite explicit error message:</description></item><item><title>Extracting DACPACs from all databases with Powershell</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/02/13/extracting-dacpacs-from-all-databases-with-powershell/</link><pubDate>Wed, 13 Feb 2013 18:20:34 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/02/13/extracting-dacpacs-from-all-databases-with-powershell/</guid><description>If you are adopting Sql Server Data Tools as your election tool to maintain database projects under source control and achieve an ALM solution, at some stage you will probably want to import all your databases in SSDT.
Yes, it can be done by hand, one at a time, using either the &amp;ldquo;import live database&amp;rdquo; or &amp;ldquo;schema compare&amp;rdquo; features, but what I have found to be more convenient is the &amp;ldquo;import dacpac&amp;rdquo; feature.</description></item><item><title>Using QUERYTRACEON in plan guides</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/02/08/using-querytraceon-in-plan-guides/</link><pubDate>Fri, 08 Feb 2013 18:34:02 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/02/08/using-querytraceon-in-plan-guides/</guid><description>Yesterday the CSS team made the QUERYTRACEON hint publicly documented.
This means that now it&amp;rsquo;s officially supported and you can use it in production code.
After reading the post on the CSS blog, I started to wonder whether there is some actual use in production for this query hint, given that it requires the same privileges as DBCC TRACEON, which means you have to be a member of the sysadmin role.</description></item><item><title>Manual Log Shipping with PowerShell</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/02/08/manual-log-shipping-with-powershell/</link><pubDate>Fri, 08 Feb 2013 13:57:31 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/02/08/manual-log-shipping-with-powershell/</guid><description>Recently I had to implement log shipping as a HA strategy for a set of databases which were originally running under the simple recovery model.
Actually, the databases were subscribers for a merge publication, which leaves database mirroring out of the possible HA options. Clustering was not an option either, due to lack of shared storage at the subscribers.
After turning all databases to full recovery model and setting up log shipping, I started to wonder if there was a better way to implement it.</description></item><item><title>Do you need sysadmin rights to backup a database?</title><link>https://933e05f9.spaghettidba-com.pages.dev/2013/01/09/do-you-need-sysadmin-rights-to-backup-a-database/</link><pubDate>Wed, 09 Jan 2013 22:57:51 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2013/01/09/do-you-need-sysadmin-rights-to-backup-a-database/</guid><description>Looks like a silly question, doesn&amp;rsquo;t it? - Well, you would be surprised to know it&amp;rsquo;s not.
Obviously, you don&amp;rsquo;t need to be a sysadmin to simply issue a BACKUP statement. If you look up the BACKUP statement on BOL you&amp;rsquo;ll see in the &amp;ldquo;Security&amp;rdquo; section that
BACKUP DATABASE and BACKUP LOG permissions default to members of the sysadmin fixed server role and the db_owner and db_backupoperator fixed database roles. But there's more to it than just permissions on the database itself: in order to complete successfully, the backup device must be accessible: [.</description></item><item><title>Replaying Workloads with Distributed Replay</title><link>https://933e05f9.spaghettidba-com.pages.dev/2012/11/22/replaying-workloads-distributed-replay/</link><pubDate>Thu, 22 Nov 2012 20:00:40 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2012/11/22/replaying-workloads-distributed-replay/</guid><description>A couple of weeks ago I posted a method to convert trace files from the SQL Server 2012 format to the SQL Server 2008 format.
The trick works quite well and the trace file can be opened with Profiler or with ReadTrace from RML Utilities. What doesn&amp;rsquo;t seem to work just as well is the trace replay with Ostress (another great tool bundled in the RML Utilities).
For some reason, OStress refuses to replay the whole trace file and starts throwing lots of errors.</description></item><item><title>More on converting Trace Files</title><link>https://933e05f9.spaghettidba-com.pages.dev/2012/11/08/more-on-converting-trace-files/</link><pubDate>Thu, 08 Nov 2012 13:48:37 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2012/11/08/more-on-converting-trace-files/</guid><description>Yesterday I posted a method to convert trace files from SQL Server 2012 to SQL Server 2008R2 using a trace table.
As already mentioned in that post, having to load the whole file into a trace table has many shortcomings:
The trace file can be huge and loading it into a trace table could take forever The trace data will consume even more space when loaded into a SQL Server table The table has to be written back to disk in order to obtain the converted file You need to have Profiler 2008 in order to write a trace in the "</description></item><item><title>Convert a Trace File from SQLServer 2012 to SQLServer 2008R2</title><link>https://933e05f9.spaghettidba-com.pages.dev/2012/11/07/convert-trace-file-sqlserver2012-2008r/</link><pubDate>Wed, 07 Nov 2012 00:55:45 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2012/11/07/convert-trace-file-sqlserver2012-2008r/</guid><description>Recently I started using RML utilities quite a lot.
ReadTrace and Ostress are awesome tools for benchmarking and baselining and many of the features found there have not been fully implemented in SQLServer 2012, though Distributed Replay was a nice addition.
However, as you may have noticed, ReadTrace is just unable to read trace files from SQLServer 2012, so you may get stuck with a trace file you wont&amp;rsquo; abe able to process.</description></item><item><title>Replay a T-SQL batch against all databases</title><link>https://933e05f9.spaghettidba-com.pages.dev/2012/06/27/replay-a-t-sql-batch-against-all-databases/</link><pubDate>Wed, 27 Jun 2012 21:25:32 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2012/06/27/replay-a-t-sql-batch-against-all-databases/</guid><description>It’s been quite a lot since I last posted on this blog and I apologize with my readers, both of them :-).
Today I would like to share with you a handy script I coded recently during a SQL Server health check. One of the tools I find immensely valuable for conducting a SQL Server assessment is Glenn Berry’s SQL Server Diagnostic Information Queries. The script contains several queries that can help you collect and analyze a whole lot of information about a SQL Server instance and I use it quite a lot.</description></item><item><title>Hide service accounts from Windows logon screen</title><link>https://933e05f9.spaghettidba-com.pages.dev/2012/04/05/hide-service-accounts-from-windows-logon-screen/</link><pubDate>Thu, 05 Apr 2012 10:34:10 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2012/04/05/hide-service-accounts-from-windows-logon-screen/</guid><description>If you are playing with multiple Virtual Machines and multiple SQL Server instances and features, it&amp;rsquo;s very likely that your virtual machines logon screens are showing all the users you set up for service accounts.
In this case, my Master Data Services playground shows the &amp;ldquo;MDSAppPoolUser&amp;rdquo; I set up for the MDS web application:
Needless to say that I will never need to logon as one of those service accounts and I would be happier if the logon screen just hid them.</description></item><item><title>SQL Server and Custom Date Formats</title><link>https://933e05f9.spaghettidba-com.pages.dev/2012/03/23/sql-server-and-custom-date-formats/</link><pubDate>Fri, 23 Mar 2012 12:49:47 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2012/03/23/sql-server-and-custom-date-formats/</guid><description>Today SQL Server Central is featuring my article Dealing with custom date formats in T-SQL.
There&amp;rsquo;s a lot of code on that page and I thought that making it available for download would make it easier to play with.
You can download the code from this page or from the Code Repository.
CustomDateFormat.cs formatDate_Islands_iTVF.sql formatDate_Recursive_iTVF.sql formatDate_scalarUDF.sql parseDate_Islands_iTVF.sql I was also asked to include a performance chart for the different methods included in the article.</description></item><item><title>How to Eat a SQL Elephant in 10 Bites</title><link>https://933e05f9.spaghettidba-com.pages.dev/2012/03/15/how-to-eat-a-sql-elephant/</link><pubDate>Thu, 15 Mar 2012 14:04:12 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2012/03/15/how-to-eat-a-sql-elephant/</guid><description>One byte at a time, obviously!
No elephants were harmed during photoshopping. Sometimes, when you have to optimize a poor performing query, you may find yourself staring at a huge statement, wondering where to start. Some developers think that a single elephant statement is better than multiple small statements, but this is not always the case.
Let’s try to look from the perspective of software quality:
Efficiency The optimizer will likely come up with a suboptimal plan, giving up early on optimizations and transformations.</description></item><item><title>SQL Server 2012 RTM</title><link>https://933e05f9.spaghettidba-com.pages.dev/2012/03/06/sql-server-2012-rt/</link><pubDate>Tue, 06 Mar 2012 19:53:18 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2012/03/06/sql-server-2012-rt/</guid><description>Today Microsoft announced that SQL Server 2012 codename &amp;ldquo;Denali&amp;rdquo; has Released To Manufacturing and will be available for download starting from April 1.
April fool&amp;rsquo;s? I don&amp;rsquo;t think so. Time will tell.
One thing is sure: each and every bug discovered in this version will be ascribed to that unusual release date. :-)
If you&amp;rsquo;re a MSDN/TechNet subscriber, you can download them as of March 7. Yes, tomorrow! Keep your fingers ready to push the download button!</description></item><item><title>My first year in blogging</title><link>https://933e05f9.spaghettidba-com.pages.dev/2012/01/03/my-first-year-in-blogging/</link><pubDate>Tue, 03 Jan 2012 11:16:45 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2012/01/03/my-first-year-in-blogging/</guid><description>WordPress.com prepared a 2011 annual report for this blog and I want to share it with you.
Here&amp;rsquo;s an excerpt:
A San Francisco cable car holds 60 people. This blog was viewed about 2,900 times in 2011. If it were a cable car, it would take about 48 trips to carry that many people. Click here to see the complete report. This is my first year as a blogger and I&amp;rsquo;m very happy with it.</description></item><item><title>Code Repository</title><link>https://933e05f9.spaghettidba-com.pages.dev/code-repository/</link><pubDate>Mon, 02 Jan 2012 12:18:26 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/code-repository/</guid><description>This page is a repository for the code found in some of my blog posts. If you like my code, feel free to download it and use it. Code Post sp_Template.sql My stored procedure code template dba_runCHECKDB.sql Setting up an e-mail alert for DBCC CHECKDB errors dba_ForEachDB.sql A better sp_MSForEachDB verify_script.sql How to Eat a SQL Elephant in 10 Bites CustomDateFormat.cs SQL Server and Custom Date Formats formatDate_Islands_iTVF.sql SQL Server and Custom Date Formats formatDate_Recursive_iTVF.</description></item><item><title>Mirrored Backups: a useful feature?</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/12/29/mirrored-backups-a-usefu-feature/</link><pubDate>Thu, 29 Dec 2011 16:56:28 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/12/29/mirrored-backups-a-usefu-feature/</guid><description>One of the features found in the Enterprise Edition of SQL Server is the ability to take mirrored backups. Basically, taking a mirrored backup means creating additional copies of the backup media (up to three) using a single BACKUP command, eliminating the need to perform the copies with copy or robocopy.
The idea behind is that you can backup to multiple locations and increase the protection level by having additional copies of the backup set.</description></item><item><title>Setting up an e-mail alert for DBCC CHECKDB errors</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/11/28/email-alert-dbcc-checkdb/</link><pubDate>Mon, 28 Nov 2011 23:55:22 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/11/28/email-alert-dbcc-checkdb/</guid><description>Some months ago I posted a script on a SQLServerCentral forum to help a member automating the execution of DBCC CHECKDB and send and e-mail alert in case a consistency error is found.
The original thread can be found here.
I noticed that many people are actually using that script and I also got some useful feedback on the code itself, so I decided to write this post to make an enhanced version available to everyone.</description></item><item><title>Discovering resultset definition of DBCC commands</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/11/16/discovering-the-output-of-dbcc-commands/</link><pubDate>Wed, 16 Nov 2011 15:54:03 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/11/16/discovering-the-output-of-dbcc-commands/</guid><description>Lots of blog posts and discussion threads suggest piping the output of DBCC commands to a table for further processing. That’s a great idea, but, unfortunately, an irritatingly high number of those posts contains an inaccurate table definition for the command output.
The reason behind this widespread inaccuracy is twofold.
On one hand the output of many DBCC commands changed over time and versions of SQL Server, and a table that was the perfect fit for the command in SQL Server 2000 is not perfect any more.</description></item><item><title>RunCore mSata SSD on Dell precision laptops</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/10/19/runcore-msata-ssd-on-dell-precision-laptops/</link><pubDate>Wed, 19 Oct 2011 16:32:04 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/10/19/runcore-msata-ssd-on-dell-precision-laptops/</guid><description>What I was planning to write on this post is a total different story from the one you will read here. I was ready to describe in detail how to open the laptop, put the drive in and combine the speed of SSD with the capacity of traditional spin disks on your laptop.
Well, you won’t read anything about that here: despite being advertised as compatible on the product page, this mSata drive won’t work on Dell precision laptops.</description></item><item><title>Concatenating multiple columns across rows</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/10/13/concatenating-multiple-columns-across-rows/</link><pubDate>Thu, 13 Oct 2011 17:22:23 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/10/13/concatenating-multiple-columns-across-rows/</guid><description>Today I ran into an interesting question on the forums at SQLServerCentral and I decided to share the solution I provided, because it was fun to code and, hopefully, useful for some of you.
Many experienced T-SQL coders make use of FOR XML PATH(‘’) to build concatenated strings from multiple rows. It’s a nice technique and pretty simple to use. For instance, if you want to create a list of databases in a single concatenated string, you can run this statement:</description></item><item><title>Formatting dates in T-SQL</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/10/05/formatting-dates-in-t-sql/</link><pubDate>Wed, 05 Oct 2011 17:10:53 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/10/05/formatting-dates-in-t-sql/</guid><description>First of all, let me say it: I don&amp;rsquo;t think this should ever be done on the database side. Formatting dates is a task that belongs to the application side and procedural languages are already featured with lots of functions to deal with dates and regional formats.
However, since the question keeps coming up on the forums at SQLServerCentral, I decided to code a simple scalar UDF to format dates.</description></item><item><title>Typing the Backtick key on non-US Keyboards</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/09/19/typing-the-backtick-key-on-non-us-keyboards/</link><pubDate>Mon, 19 Sep 2011 22:47:20 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/09/19/typing-the-backtick-key-on-non-us-keyboards/</guid><description>You may be surprised to know that not all keyboard layouts include the backtick key, and if you happen to live in a country with such a layout and want to do some PowerShell coding, you’re in big trouble.
For many years all major programming languages took this layout mismatch into consideration and avoided the use of US-only keys in the language definition. Now, with PowerShell, serious issues arise for those that want to wrap their code on multiple lines and reach for the backtick key, staring hopelessly at an Italian keyboard.</description></item><item><title>Jeff Moden is the Exceptional DBA 2011!</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/09/14/jeff-moden-is-the-exceptional-dba-2011/</link><pubDate>Wed, 14 Sep 2011 13:06:42 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/09/14/jeff-moden-is-the-exceptional-dba-2011/</guid><description>The contest is over and the winner is Jeff Moden! Champagne! I won’t repeat all the reasons why I think that Jeff deserves the award, I just want to say that I could not agree more with this result.
To say it with Grant Fritchey’s (blog|twitter) words: “Of the year? I think I&amp;rsquo;d put it down to of the decade, but that&amp;rsquo;s not what the contest was.”
The exceptional DBA 2011 Jeff Moden will receive:</description></item><item><title>A better sp_MSForEachDB</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/09/09/a-better-sp_msforeachdb/</link><pubDate>Fri, 09 Sep 2011 17:53:17 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/09/09/a-better-sp_msforeachdb/</guid><description>Though undocumented and unsupported, I’m sure that at least once you happened to use Microsoft’s built-in stored procedure to execute a statement against all databases. Let’s face it: it comes handy very often, especially for maintenance tasks.
Some months ago, Aaron Bertand (blog|twitter) came up with a nice replacement and I thought it would be fun to code my own.
The main difference with his (and Microsoft’s) implementation is the absence of a cursor.</description></item><item><title>Enforcing Complex Constraints with Indexed Views</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/08/03/enforcing-complex-constraints-with-indexed-views/</link><pubDate>Wed, 03 Aug 2011 16:55:33 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/08/03/enforcing-complex-constraints-with-indexed-views/</guid><description>Some days ago I blogged about a weird behaviour of “table-level” CHECK constraints. You can find that post here.
Somehow, I did not buy the idea that a CHECK with a scalar UDF or a trigger were the only possible solutions. Scalar UDFs are dog-slow and also triggers are evil.
I also read this interesting article by Alexander Kuznetsov (blog) and some ideas started to flow.
Scalar UDFs are dog-slow because the function gets invoked RBAR (Row-By-Agonizing-Row, for those that don’t know this “Modenism”).</description></item><item><title>Exceptional DBA Awards 2011</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/07/29/exceptional-dba-awards-2011/</link><pubDate>Fri, 29 Jul 2011 14:28:34 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/07/29/exceptional-dba-awards-2011/</guid><description>Time has come for the annual Exceptional DBA Awards contest, sponsored by Red Gate and judged by four really exceptional DBAs:
Steve Jones (blog|twitter) Rodney Landrum (blog|twitter) Brad McGehee (blog|twitter) Brent Ozar (blog|twitter) The judges picked their finalists and it would really be hard to choose the winner if I didn’t happen to know one of them. I won’t talk around it: please vote for Jeff Moden!
I don’t know the other three finalists and I am sure that they really are very good DBAs, probably exceptional DBAs, otherwise they would not have made it to the final showdown.</description></item><item><title>Table-level CHECK constraints</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/07/27/table-level-check-constraints/</link><pubDate>Wed, 27 Jul 2011 22:12:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/07/27/table-level-check-constraints/</guid><description>EDITED 2011-08-05: This post is NOT about the "correct" way to implement table-level check constraints. If that is what you're looking for, see this post instead. Today on SQL Server Central I stumbled upon an apparently simple question on CHECK constraints. The question can be found here. The OP wanted to know how to implement a CHECK constraint based on data from another table. In particular, he wanted to prohibit modifications to records in a detail table based on a datetime column on the master table.</description></item><item><title>Oracle: does PARALLEL_DEGREE_LIMIT really limit the DOP?</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/07/20/oracle-does-parallel_degree_limit-really-limit-the-dop/</link><pubDate>Wed, 20 Jul 2011 15:04:48 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/07/20/oracle-does-parallel_degree_limit-really-limit-the-dop/</guid><description>Understanding Oracle Parallel Execution in 11.2 is a pain, not because the topic itself is overly complex, rather because Oracle made it much more complicated than it needed to be. Basically, the main initialization parameter that controls the parallel execution is PARALLEL_DEGREE_POLICY. According to Oracle online documentation, this parameter can be set to:
MANUAL: Disables automatic degree of parallelism, statement queuing, and in-memory parallel execution. This reverts the behaviour of parallel execution to what it was prior to Oracle Database 11g Release 2 (11.</description></item><item><title>An annoying bug in Database Mail Configuration Wizard</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/07/15/an-annoying-bug-in-database-mail-configuration-wizard/</link><pubDate>Fri, 15 Jul 2011 14:36:15 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/07/15/an-annoying-bug-in-database-mail-configuration-wizard/</guid><description>Looks like a sneaky bug made its way from SQL Server 2005 CTP to SQL Server 2008 R2 SP1 almost unnoticed, or, at least, ignored by Microsoft.
Imagine that you installed a new SQL Server instance (let’s call it “TEST”) and you want Database Mail configured in the same way as your other instances. No problem: you navigate the object explorer to Database Mail, start the wizard and then realize that you don’t remember the parameters to enter.</description></item><item><title>My stored procedure code template</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/07/08/my-stored-procedure-code-template/</link><pubDate>Fri, 08 Jul 2011 16:51:46 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/07/08/my-stored-procedure-code-template/</guid><description>Do you use code templates in SSMS? I am sure that at least once you happened to click &amp;ldquo;New stored procedure&amp;rdquo; in the object explorer context menu.
The default template for this action is a bit disappointing and the only valuable line is &amp;ldquo;SET NOCOUNT ON&amp;rdquo;. The rest of the code has to be heavily rewritten or deleted. Even if you use the handy keyboard shortcut for &amp;ldquo;Specify values for template parameters&amp;rdquo; (CTRL+SHIFT+M), you end up entering a lot of useless values.</description></item><item><title>Backup all user databases with TDPSQL</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/07/06/backup-all-user-databases-with-tdpsq/</link><pubDate>Wed, 06 Jul 2011 14:49:06 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/07/06/backup-all-user-databases-with-tdpsq/</guid><description>Stanislav Kamaletdin (twitter) today asked on #sqlhelp how to backup all user databases with TDP for SQL Server:
My first thought was to use the &amp;ldquo;*&amp;rdquo; wildcard, but this actually means all databases, not just user databases.
I ended up adapting a small batch file I&amp;rsquo;ve been using for a long time to take backups of all user databases with full recovery model:
@ECHO OFF SQLCMD -E -Q &amp;#34;SET NOCOUNT ON; SELECT name FROM sys.</description></item><item><title>The Spaghetti-Western Database</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/06/28/the-spaghetti-western-database/</link><pubDate>Tue, 28 Jun 2011 17:15:56 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/06/28/the-spaghetti-western-database/</guid><description>Today I noticed in my WordPress site stats that somebody landed on this blog from a search engine with the keywords &amp;ldquo;spaghetti dba&amp;rdquo;.
I found it hilarious that somebody was really searching for me that way, and I performed the search on Google to see how this blog would rank.
The third result from Google made me chuckle: The Spaghetti-Western Database Trailer. And here is the video showing on that page:</description></item><item><title>Setting up linked servers with an out-of-process OLEDB provider</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/06/09/setting-up-linked-servers-with-an-out-of-process-oledb-provider/</link><pubDate>Thu, 09 Jun 2011 10:25:12 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/06/09/setting-up-linked-servers-with-an-out-of-process-oledb-provider/</guid><description>A new article on SQLServerCentral today: Setting up linked servers with an out-of-process OLEDB provider.
I had to struggle to find the appropriate security settings to make a commercial OLEDB provider work with out-of-process load and I want to share the results of my research with you.
It took 50 hours of Microsoft paid support to partially solve the issue and a huge time spent on Google and MSDN to find a complete resolution.</description></item><item><title>Setup failed to start</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/05/27/setup-failed-to-start/</link><pubDate>Fri, 27 May 2011 15:30:22 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/05/27/setup-failed-to-start/</guid><description>Yesterday I ran into this error message while installing a new SQL Server 2005 instance on a Windows 2003 cluster: Setup failed to start on the remote machine. Check the Task scheduler event log on the remote machine. SQL Server 2005 setup, in a clustered environment, relies on a remote setup process started on the passive nodes through a scheduled task:
For some weird reason, the remote scheduled task refuses to start if there is an active RDP session on the passive nodes.</description></item><item><title>Changing Server Collation</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/05/26/changing-server-collation/</link><pubDate>Thu, 26 May 2011 13:25:21 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/05/26/changing-server-collation/</guid><description>In order to avoid collation conflict issues with TempDB, all user databases on a SQL Server instance should be set to the same collation.
Temporary tables and table variables are stored in TempDB, that means that, unless explicitly defined, all character-based columns are created using the database collation, which is the same of the master database. If user databases have a different collation, joining physical tables to temporary tables may cause a collation conflict.</description></item><item><title>Trace Flag 3659</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/05/20/trace-flag-3659/</link><pubDate>Fri, 20 May 2011 22:15:01 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/05/20/trace-flag-3659/</guid><description>Many setup scripts for SQL Server include the 3659 trace flag, but I could not find official documentation that explains exactly what this flag means. After a lot of research, I found a reference to this flag in a script called AddSelfToSqlSysadmin, written by Ward Beattie, a developer in the SQL Server product group at Microsoft.
The script contains a line which suggests that this flag enables logging all errors to errorlog during server startup.</description></item><item><title>Windows authenticated sysadmin, the painless way</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/03/10/make-your-sysadmin-windows-user-smarter/</link><pubDate>Thu, 10 Mar 2011 10:54:00 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/03/10/make-your-sysadmin-windows-user-smarter/</guid><description>Personally, I hate having a dedicated administrative account, different from the one I normally use to log on to my laptop, read my email, write code and perform all the tasks that do not involve administering a server. A dedicated account means another password to remember, renew periodically and reset whenever I insist typing it wrong (happens quite frequently).
I hate it, but I know I cannot avoid having it. Each user should be granted just the bare minimum privileges he needs, without creating dangerous overlaps, which end up avoiding small annoyances at the price of huge security breaches.</description></item><item><title>Oracle BUG: UNPIVOT returns wrong data for non-unpivoted columns</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/03/09/oracle-bug-unpivot-returns-wrong-data-for-non-unpivoted-columns/</link><pubDate>Wed, 09 Mar 2011 10:08:27 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/03/09/oracle-bug-unpivot-returns-wrong-data-for-non-unpivoted-columns/</guid><description>Some bugs in Oracle&amp;rsquo;s code are really surprising. Whenever I run into this kind of issue, I can&amp;rsquo;t help but wonder how nobody else noticed it before.
Some days ago I was querying AWR data from DBA_HIST_SYSMETRIC_SUMMARY and I wanted to turn the columns AVERAGE, MAXVAL and MINVAL into rows, in order to fit this result set into a performance graphing application that expects input data formatted as {TimeStamp, SeriesName, Value}.</description></item><item><title>A short-circuiting edge case</title><link>https://933e05f9.spaghettidba-com.pages.dev/2011/03/03/a-short-circuiting-edge-case/</link><pubDate>Thu, 03 Mar 2011 23:40:52 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2011/03/03/a-short-circuiting-edge-case/</guid><description>Bart Duncan (blog) found a very strange edge case for short-circuiting and commented on my article on sqlservercentral.
In my opinion it should be considered a bug. BOL says it clearly:
Searched CASE expression: Evaluates, in the order specified, Boolean_expression for each WHEN clause. Returns result_expression of the first Boolean_expression that evaluates to TRUE. If no Boolean_expression evaluates to TRUE, the Database Engine returns the else_result_expression if an ELSE clause is specified, or a NULL value if no ELSE clause is specified.</description></item><item><title>My First Article!</title><link>https://933e05f9.spaghettidba-com.pages.dev/2010/12/30/14/</link><pubDate>Thu, 30 Dec 2010 11:27:22 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/2010/12/30/14/</guid><description>Today SQL Server Central published my first article:
Understanding T-SQL Expression Short-Circuiting
It &amp;rsquo;s a great joy and pride for me. I hope you enjoy it.</description></item><item><title>About</title><link>https://933e05f9.spaghettidba-com.pages.dev/about/</link><pubDate>Wed, 29 Dec 2010 14:13:52 +0000</pubDate><guid>https://933e05f9.spaghettidba-com.pages.dev/about/</guid><description>Gianluca Sartori Founder and CEO of Quantumdatis · Microsoft Data Platform MVP
I have more than 20 years of experience designing, managing, diagnosing, and optimizing Microsoft data platforms. I have worked hands-on with business-critical production environments and shared practical experience at international conferences. My technical articles and community work have earned me Microsoft Data Platform MVP recognition for 13 years.
My areas of focus include:
SQL Server performance and architecture High availability and disaster recovery Migration, automation, and mentoring I am a SQL Server and Oracle DBA based in Conegliano, Italy.</description></item></channel></rss>