<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Database maintenance on Rudi Bruchez</title><link>https://www.pachadata.com/en/docs/howtos/database-maintenance/</link><description>Recent content in Database maintenance on Rudi Bruchez</description><generator>Hugo</generator><language>en</language><atom:link href="https://www.pachadata.com/en/docs/howtos/database-maintenance/index.xml" rel="self" type="application/rss+xml"/><item><title>A complete guide to SHRINK in SQL Server</title><link>https://www.pachadata.com/en/docs/howtos/database-maintenance/shrink-database-file/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate><guid>https://www.pachadata.com/en/docs/howtos/database-maintenance/shrink-database-file/</guid><description>&lt;div class="alert alert-success" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;TL;DR&lt;/div&gt;&#10;&lt;p&gt;A shrink is a &lt;strong&gt;manual, one-off&lt;/strong&gt; operation, never automated and never scheduled.&#10;Always use &lt;code&gt;DBCC SHRINKFILE&lt;/code&gt; on a specific file, never &lt;code&gt;DBCC SHRINKDATABASE&lt;/code&gt;.&#10;On large files, shrink in small increments rather than in one go.&#10;The operation never corrupts the database: SQL Server is dependable here.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="when-should-you-shrink"&gt;When should you shrink?&lt;/h2&gt;&#10;&lt;p&gt;Shrinking is discouraged as a general rule.&#10;It is an expensive operation that &lt;strong&gt;fragments indexes heavily&lt;/strong&gt;.&#10;&lt;a href="https://www.sqlskills.com/about/paul-s-randal/"&gt;Paul Randal&lt;/a&gt;, who wrote the SHRINK command in SQL Server 2005, explains it in detail: &lt;a href="https://www.sqlskills.com/blogs/paul/why-you-should-not-shrink-your-data-files/"&gt;Why you should not shrink your data files&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Taking backups on an availability group</title><link>https://www.pachadata.com/en/docs/howtos/database-maintenance/backup-ag/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.pachadata.com/en/docs/howtos/database-maintenance/backup-ag/</guid><description>&lt;ol&gt;&#10;&lt;li&gt;Download and install &lt;a href="https://ola.hallengren.com/sql-server-backup.html"&gt;Ola Hallengren&amp;rsquo;s procedure&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;Schedule &lt;code&gt;COPY_ONLY&lt;/code&gt; full backups on each replica. This assumes the availability group is configured to prefer backups on the secondary replica.&#10;To check that, use &lt;a href="https://github.com/rudi-bruchez/tsql-scripts/blob/main/hadr/availability-groups.sql"&gt;this query&lt;/a&gt; and look at the &lt;code&gt;automated_backup_preference&lt;/code&gt; column.&lt;/li&gt;&#10;&lt;li&gt;Schedule log backups on each replica. Ola Hallengren&amp;rsquo;s procedure automatically runs the backup on the preferred replica.&#10;You can use &lt;a href="https://github.com/rudi-bruchez/tsql-scripts/blob/main/database-administration/dba-database/012.ola-backups-ag.sql"&gt;the example calls on my GitHub&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;To delete the old backups, on a schedule if you want, you can use &lt;a href="https://dbatools.io/download/"&gt;dbatools&lt;/a&gt; and this command:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Remove-DbaBackup -Path &lt;span style="color:#e6db74"&gt;&amp;#39;\\backup-server\repo$\CLUSTER-SQL-AG\MyDatabase\&amp;#39;&lt;/span&gt; -BackupFileExtension bak -RetentionPeriod 48h&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Identify and fix transaction log problems</title><link>https://www.pachadata.com/en/docs/howtos/database-maintenance/transaction-logs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.pachadata.com/en/docs/howtos/database-maintenance/transaction-logs/</guid><description>&lt;div class="alert alert-success" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;YouTube&lt;/div&gt;&#10;&lt;p&gt;See also my YouTube video: &lt;a href="https://youtu.be/-m5WsTQ-aBE?si=BUjw9gZFnVJkZJa3"&gt;Comprendre les problèmes du journal de transaction dans SQL Server&lt;/a&gt; (in French)&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;The transaction log of a SQL Server database keeps the transactional history of the writes made to that database.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;If the recovery model of a database is &lt;code&gt;FULL&lt;/code&gt;, the transaction log keeps everything, so that a transaction log backup can archive it.&lt;/li&gt;&#10;&lt;li&gt;If the recovery model of a database is &lt;code&gt;SIMPLE&lt;/code&gt;, the transaction log is emptied regularly.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;The problems this creates:&lt;/p&gt;</description></item><item><title>SQL Server transaction log backups: why and how</title><link>https://www.pachadata.com/en/docs/howtos/database-maintenance/transaction-log-backups/</link><pubDate>Mon, 02 Mar 2026 00:00:00 +0000</pubDate><guid>https://www.pachadata.com/en/docs/howtos/database-maintenance/transaction-log-backups/</guid><description>&lt;link rel="preload" as="image" href="https://www.pachadata.com/en/docs/howtos/database-maintenance/transaction-log-backups/featured-background_hu_94e703081bb9e1a8.png" media="(max-width: 1200px)"&gt;&#10;&lt;link rel="preload" as="image" href="https://www.pachadata.com/en/docs/howtos/database-maintenance/transaction-log-backups/featured-background_hu_3c535c6841d0e502.png" media="(min-width: 1200px)"&gt;&#10;&lt;style&gt;&#10;#td-cover-block-0 {&#10; background-image: url(/en/docs/howtos/database-maintenance/transaction-log-backups/featured-background_hu_94e703081bb9e1a8.png);&#10;}&#10;@media only screen and (min-width: 1200px) {&#10; #td-cover-block-0 {&#10; background-image: url(/en/docs/howtos/database-maintenance/transaction-log-backups/featured-background_hu_3c535c6841d0e502.png);&#10; }&#10;}&#10;&lt;/style&gt;&#10;&lt;section id="td-cover-block-0" class="row td-cover-block td-cover-block--height-med td-overlay td-overlay--dark -bg-dark" &gt;&#10; &lt;div class="col-12"&gt;&#10; &lt;div class="container td-overlay__inner"&gt;&#10; &lt;div class="text-center"&gt;&#10; &lt;div class="pt-3 lead"&gt;&#10; &#10;&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &#10;&lt;/section&gt;&#10;&#10;&lt;div class="alert alert-success" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;TL;DR&lt;/div&gt;&#10;&lt;p&gt;A SQL Server transaction log growing out of control, because the database recovery model is &lt;code&gt;FULL&lt;/code&gt;, is one of the most common problems you will meet with SQL Server.&lt;/p&gt;&#10;&lt;p&gt;Administrators often switch to the &lt;code&gt;SIMPLE&lt;/code&gt; recovery model to avoid it, wary of managing a transaction log backup strategy — when that strategy is very nearly mandatory in production.&lt;/p&gt;</description></item></channel></rss>