<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>High availability on Rudi Bruchez</title><link>https://www.pachadata.com/en/docs/howtos/hadr/</link><description>Recent content in High availability on Rudi Bruchez</description><generator>Hugo</generator><language>en</language><atom:link href="https://www.pachadata.com/en/docs/howtos/hadr/index.xml" rel="self" type="application/rss+xml"/><item><title>SQL Server Standard: understanding Basic Availability Groups (BAG)</title><link>https://www.pachadata.com/en/docs/howtos/hadr/bag/</link><pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.pachadata.com/en/docs/howtos/hadr/bag/</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;&lt;strong&gt;Basic Availability Groups (BAG)&lt;/strong&gt; give SQL Server Standard edition users high availability similar to the Always On AG of the Enterprise edition, but with significant limitations:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;One group per instance.&lt;/li&gt;&#10;&lt;li&gt;One database per group.&lt;/li&gt;&#10;&lt;li&gt;No reads on the secondary replica.&lt;/li&gt;&#10;&lt;li&gt;No backups on the secondary.&lt;/li&gt;&#10;&lt;li&gt;Two nodes maximum, primary and secondary.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;For a long time, using &lt;strong&gt;Always On Availability Groups&lt;/strong&gt; required an Enterprise licence, leaving Standard edition users with &lt;em&gt;Database Mirroring&lt;/em&gt;. Since SQL Server 2016, Microsoft has offered &lt;strong&gt;Basic Availability Groups (BAG)&lt;/strong&gt; as the replacement for mirroring in the Standard edition.&lt;/p&gt;</description></item><item><title>Always On: mastering the timeouts</title><link>https://www.pachadata.com/en/docs/howtos/hadr/failovers/</link><pubDate>Tue, 27 Jan 2026 00:00:00 +0000</pubDate><guid>https://www.pachadata.com/en/docs/howtos/hadr/failovers/</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;To avoid spurious failovers in an Always On environment, adjust these settings:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Lease Timeout&lt;/strong&gt;: raise it if your server goes through CPU load spikes.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;HealthCheck Timeout&lt;/strong&gt;: raise it if your server is slow to answer diagnostic requests.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;When you run AlwaysOn Availability Groups, it is not unusual to get spurious failovers while your system is working perfectly well.&lt;/p&gt;&#10;&lt;p&gt;It tends to happen at night, and more rarely during the day. The most common cause is a temporary unavailability of the system, which makes the cluster health checks time out. A typical example is a VM freeze while backup software takes a snapshot.&lt;/p&gt;</description></item><item><title>Troubleshooting AlwaysOn availability groups</title><link>https://www.pachadata.com/en/docs/howtos/hadr/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.pachadata.com/en/docs/howtos/hadr/troubleshooting/</guid><description>&lt;h2 id="diagnosing-the-availability-groups"&gt;Diagnosing the availability groups&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Collect the SQL Server error logs from the SQL Server log directory.&lt;/li&gt;&#10;&lt;li&gt;Collect the files of the &lt;code&gt;AlwaysOn_health&lt;/code&gt; event session: the &lt;code&gt;alwayson_health*.xel&lt;/code&gt; files, in the same SQL Server log directory.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;You can find the SQL Server log directory with this query:&lt;/p&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-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&lt;span style="color:#66d9ef"&gt;LEFT&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;CAST&lt;/span&gt;(SERVERPROPERTY(&lt;span style="color:#e6db74"&gt;&amp;#39;ErrorLogFileName&amp;#39;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; nvarchar(&lt;span style="color:#66d9ef"&gt;max&lt;/span&gt;)),&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;LEN(&lt;span style="color:#66d9ef"&gt;CAST&lt;/span&gt;(SERVERPROPERTY(&lt;span style="color:#e6db74"&gt;&amp;#39;ErrorLogFileName&amp;#39;&lt;/span&gt;) &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; nvarchar(&lt;span style="color:#66d9ef"&gt;max&lt;/span&gt;))) &lt;span style="color:#f92672"&gt;-&lt;/span&gt; LEN(&lt;span style="color:#e6db74"&gt;&amp;#39;ERRORLOG&amp;#39;&lt;/span&gt;));&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="diagnosing-wsfc"&gt;Diagnosing WSFC&lt;/h2&gt;&#10;&lt;p&gt;You can export the cluster logs with the &lt;code&gt;Get-ClusterLog&lt;/code&gt; cmdlet:&lt;/p&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;Import-Module FailoverClusters&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-ClusterLog -UseLocalTime -Destination C:\temp\&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Microsoft also provides a tool that collects the cluster diagnostics and logs. You can install it by following &lt;a href="https://learn.microsoft.com/azure-stack/hci/manage/collect-diagnostic-data#installing-get-sddcdiagnosticinfo-with-powershell"&gt;these instructions&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Use dbatools for AlwaysOn availability groups</title><link>https://www.pachadata.com/en/docs/howtos/hadr/dbatools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://www.pachadata.com/en/docs/howtos/hadr/dbatools/</guid><description>&lt;h2 id="list-the-groups-and-the-replica-states"&gt;List the groups and the replica states&lt;/h2&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;Set-DbatoolsInsecureConnection&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-DbaAgReplica -SqlInstance localhost | ft Name, AvailabilityGroup, FailoverMode, Role, RollupSynchronizationState&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="fail-all-availability-groups-over-to-a-specific-node"&gt;Fail all availability groups over to a specific node&lt;/h2&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;Set-DbatoolsInsecureConnection&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-DbaAgReplica -SqlInstance localhost | where {$_.Role &lt;span style="color:#f92672"&gt;-eq&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Secondary&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;-and&lt;/span&gt; $_.RollupSynchronizationState &lt;span style="color:#f92672"&gt;-eq&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Synchronized&amp;#34;&lt;/span&gt;} | ft Name, AvailabilityGroup, FailoverMode, Role, RollupSynchronizationState&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-DbaAgReplica -SqlInstance localhost&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-DbaAgReplica -SqlInstance localhost | Switch-DbaAgReplica -TargetSqlInstance &lt;span style="color:#e6db74"&gt;&amp;#34;SQLNODE2&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-DbaAgReplica -SqlInstance localhost | Move-DbaAgReplica -DestinationSqlInstance &lt;span style="color:#e6db74"&gt;&amp;#34;SQLNODE2&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="list-the-databases-that-are-not-synchronizing"&gt;List the databases that are not synchronizing&lt;/h2&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;Set-DbatoolsInsecureConnection&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-DbaAgDatabaseReplicaState -SqlInstance localhost | where {$_.IsSuspended} | ft ReplicaServerName, AvailabilityGroup, DatabaseName, SuspendReason&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="resume-synchronization-on-the-suspended-databases"&gt;Resume synchronization on the suspended databases&lt;/h2&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;Set-DbatoolsInsecureConnection&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Resume-DbaAgDbDataMovement -SqlInstance sql2 -AvailabilityGroup test&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-DbaAgDatabase -SqlInstance sql2 | Resume-DbaAgDbDataMovement -Confirm:$false&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="fail-over-every-availability-group"&gt;Fail over every availability group&lt;/h2&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;Set-DbatoolsInsecureConnection&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$secondary = Get-DbaAgReplica -SqlInstance localhost | where {$_.Role &lt;span style="color:#f92672"&gt;-eq&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Secondary&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;-and&lt;/span&gt; $_.RollupSynchronizationState &lt;span style="color:#f92672"&gt;-eq&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Synchronized&amp;#34;&lt;/span&gt;} | select Name -First &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Get-DbaAvailabilityGroup -SqlInstance $secondary.Name | Invoke-DbaAgFailover -Confirm:$false&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>