SQL Server AlwaysOn Setup Tool – Blog

DBA-Team · Tools

SQL Server AlwaysOn Setup Tool

Vollautomatische Konfiguration von Always On Availability Groups auf Windows Server Failover Clustern – mit WinForms-Oberfläche, PropertyGrid und Echtzeit-Protokoll.

SQL Server 2022 / 2025 Windows Server 2022 PowerShell 5.1+ FailoverClusters RSAT dbaTools ≥ 2.0 Version 1.0.0
Übersicht
Was das Tool leistet – auf einen Blick
🔍

Automatisches Cluster-Einlesen

Liest beim Start automatisch alle Cluster-Nodes, Listener-Namen, IP-Adressen, Ports und HADR-Status aus dem WSFC und befüllt das PropertyGrid.

⚙️

9-Schritte-Automatisierung

Von HADR-Aktivierung über Endpoint-Anlage bis zu AG-Erstellung und Listener-Konfiguration – alles per Klick, vollständig protokolliert.

🔐

Adaptive Verbindungsstrategie

Windows-Auth (Kerberos) wird bevorzugt. Bei fehlenden SPNs generiert das Tool automatisch ein temporäres SQL-Login und bereinigt es nach Abschluss.

🧹

WSFC-Cleanup

Erkennt und bereinigt verwaiste Cluster-Gruppen und Registry-Keys aus fehlgeschlagenen Vorversuchen – kein manuelles Aufräumen nötig.

📋

SPN-Anforderungsdatei

Generiert in Schritt 9 fertige setspn-Befehle als Textdatei für das AD-Team – mit Erklärung und Prüfbefehl.

🎨

Farbcodiertes Live-Log

Blau, Grün, Gelb, Rot – alle Aktionen mit Zeitstempel im Echtzeit-Protokoll. Exportierbar als RTF mit Farbgebung.

GUI-Schematik
Aufbau der WinForms-Oberfläche (1200 × 780 px, resizable)
🔷 SQL Server AlwaysOn Setup Tool v1.0.0
Konfiguration
① KONFIGURATION (PropertyGrid)
1 - Cluster
Cluster-Name
SQLCLUSTER01
Listener-Name
AG-LISTENER01
Listener-IP
10.0.1.50
Listener-Port
1433
2 - Nodes
Node 1
▶ SQLNODE01\MSSQLSERVER
SQL-Instanz
SQLNODE01\MSSQLSERVER
Hostname
SQLNODE01
AlwaysOn-Status
Disabled
Node 2
▶ SQLNODE02\MSSQLSERVER
Node 3
(leer)
3 - Availability Group
AG-Name
AG_PROD_01
Endpoint-Port
5022
Failover-Modus
Automatic ▾
Backup-Präferenz
Primary ▾
Test-Datenbank
AG_TestDB
Backup-Share
\\FILESERVER\SQLBackup
4 - SQL Service-Konto
Dienst-Konto
HLB\svc-sql-prod
Kennwort
••••••••••••
④ PROTOKOLL (Live-Log)
[10:14:22] === Cluster- und SQL-Informationen einlesen ===
[10:14:22] Cluster gefunden: SQLCLUSTER01
[10:14:23] Nodes: SQLNODE01, SQLNODE02
[10:14:23] Listener: AG-LISTENER01 IP: 10.0.1.50 Port: 1433
[10:14:24] Eingelesen: SQLCLUSTER01 – OK
 
[10:15:01] === Schritt 2: HADR aktivieren ===
[10:15:01] SQLNODE01: sp_configure 'hadr enabled', 1 ...
[10:15:03] SQLNODE01: HADR aktiviert – Dienst wird neu gestartet
[10:15:08] SQLNODE01: Warte auf SQL Server bereit (0/60s) ...
[10:15:14] SQLNODE01: SQL Server wieder erreichbar
[10:15:14] SQLNODE02: HADR aktiviert – Dienst wird neu gestartet
[10:15:22] === Schritt 3: Endpoint erstellen ===
[10:15:23] SQLNODE01: Endpoint 'Hadr_endpoint' (5022) angelegt
[10:15:23] SQLNODE02: Endpoint 'Hadr_endpoint' (5022) angelegt
[10:15:24] === Schritt 6: Availability Group anlegen ===
[10:15:25] CREATE AVAILABILITY GROUP [AG_PROD_01] ...
[10:15:31] AG_PROD_01 erfolgreich angelegt ✓
[10:15:32] SPN MSSQLSvc/SQLNODE02:1433 fehlt – Bitte AD-Team informieren
⑥ AG_PROD_01 erfolgreich konfiguriert SPN-Datei: C:\System\WinSrvLog\MSSQL\AlwaysOn_SPN_ADTeam_20260513.txt
Nr.ElementBeschreibung
PropertyGrid – Konfiguration Zeigt alle erkannten Cluster- und AG-Parameter in 4 Kategorien. Readonly-Felder (kursiv) werden automatisch eingelesen; editierbare Felder können angepasst werden. Enum-Felder (Failover-Modus, Backup-Präferenz) bieten Dropdown-Auswahl.
Konfiguration starten Startet nach Bestätigungs-Dialog die 9 Konfigurationsschritte sequenziell. Der Button ist während der Ausführung deaktiviert.
Weiter (versteckt) Wird nur eingeblendet, wenn SPNs fehlen und das temporäre SQL-Login manuell angelegt werden muss. Nach dem manuellen Schritt klicken, um fortzufahren.
Live-Protokoll (RichTextBox) Farbkodiertes Echtzeit-Log mit Zeitstempel für alle Aktionen. Hintergrund schwarz, Schrift farbig nach Status: Blau = Abschnitt, Grün = Erfolg, Gelb = Warnung, Rot = Fehler, Grau = Info.
Log löschen / Log speichern Log löschen leert die Anzeige. Log speichern öffnet einen SaveFileDialog und schreibt das farbige RTF-Log auf die Festplatte.
StatusStrip Zeigt den aktuellen Status der Aktion sowie den Pfad der zuletzt gespeicherten Ausgabedatei (SPN-Anforderung, Logfile).
Konfigurationsschritte
Das Tool führt 9 Schritte in fester Reihenfolge aus – übersprungene Schritte werden im Log ausgewiesen
1

SQL Service-Konto

Optional: Konto und Passwort per WMI (Win32_Service) auf allen Nodes ändern und Dienst neu starten.

2

HADR aktivieren

Always On per sp_configure 'hadr enabled', 1 auf allen Nodes aktivieren; Dienst-Neustart mit aktivem Bereitschaftstest (max. 2 Min. Wartezeit).

3

Endpoint erstellen

Datenbankspiegelungs-Endpoint (Port 5022) per T-SQL anlegen und starten. Port ist im PropertyGrid konfigurierbar.

4

CONNECT-Berechtigung

Windows-Login für das Dienst-Konto anlegen und GRANT CONNECT ON ENDPOINT auf alle Nodes erteilen.

5

Testdatenbank

Datenbank anlegen, Recovery-Modell FULL setzen, initiales Full-Backup auf den konfigurierten UNC-Share erstellen.

6

Availability Group anlegen

AG per reinem T-SQL (sqlcmd) anlegen, Replicas beitreten lassen, Autoseed aktivieren. sqlcmd statt dbaTools für frische Verbindungen nach HADR-Restart.

7

Listener konfigurieren

AG-Listener mit erkannter IP-Adresse und Port per ALTER AVAILABILITY GROUP … ADD LISTENER anlegen.

8

Status prüfen

AG-Synchronisierungsstatus und Replica-Rollen (Primary/Secondary) per DMV sys.dm_hadr_availability_replica_states ausgeben.

9

SPN-Prüfung

Fehlende MSSQLSvc-SPNs erkennen, fertige setspn-Befehle als Textdatei für das AD-Team exportieren.

PropertyGrid – Konfigurationsfelder
Alle editierbaren und automatisch erkannten Parameter im Überblick
Feld Kategorie Standardwert / Quelle Beschreibung
Cluster-Name 1 – Cluster readonly aus WSFC Name des Windows Failover Clusters
Listener-Name 1 – Cluster readonly aus WSFC DNS-Name des AG-Listeners (Netzwerkname-Ressource im Cluster)
Listener-IP 1 – Cluster readonly aus WSFC IP-Adresse der Cluster-IP-Ressource
Listener-Port 1 – Cluster readonly 1433 TCP-Port des Listeners – direkt aus der Cluster-Konfiguration
Node 1 / 2 / 3 2 – Nodes readonly aus WSFC Expandierbare Knoten mit SQL-Instanzname, Hostname und aktuellem AlwaysOn-Status
AG-Name 3 – Availability Group Listener-Rollenname Name der zu erstellenden Availability Group
Endpoint-Port 3 – Availability Group 5022 TCP-Port des Datenbank-Spiegelungs-Endpoints; muss auf allen Nodes und in der Firewall geöffnet sein
Failover-Modus 3 – Availability Group Automatic Automatic = synchrones Replikat mit autom. Failover; Manual = asynchron
Backup-Präferenz 3 – Availability Group Primary Primary / Secondary / PreferSecondary / None
Test-Datenbank 3 – Availability Group AG_TestDB Name der automatisch erstellten Datenbank, die per Autoseed verteilt wird
Backup-Share 3 – Availability Group UNC-Pfad Gemeinsam nutzbarer Share für das initiale Full-Backup, beschreibbar von allen Nodes
Dienst-Konto 4 – SQL Service-Konto aus WMI SQL Server Dienstkonto (Format DOMAIN\User), optional änderbar
Kennwort 4 – SQL Service-Konto Passwort des Dienstkontos (maskiert, wird nie in Logdateien gespeichert)
Service Principal Names (SPNs)
SPNs vor dem Setup setzen spart einen manuellen Eingriff
⚡ Empfehlung: SPNs vor dem Setup setzen
Sind die MSSQLSvc-SPNs für das SQL-Dienstkonto bereits im Active Directory registriert, läuft das Tool vollautomatisch durch – ohne manuellen Eingriff. Das Tool generiert in Schritt 9 die konkreten setspn-Befehle als Textdatei für das AD-Team.

✅ SPNs vorhanden

  • Windows-Auth (Kerberos) auf allen Nodes
  • Vollautomatischer Durchlauf
  • Kein manueller Eingriff nötig
  • Kein temporäres Login
  • "Weiter"-Button bleibt versteckt

❌ SPNs fehlen

  • SSPI-Fehler auf betroffenen Nodes
  • Tool pausiert, zeigt T-SQL-Block
  • Manuell per SSMS lokal ausführen
  • "Weiter"-Button einblenden → klicken
  • Temporäres Login wird am Ende entfernt

Benötigte SPNs (Beispiel)

# Je SQL-Node – Kurzname und FQDN 
setspn -S MSSQLSvc/SQLNODE01:1433 HLB\svc-sql-prod 
setspn -S MSSQLSvc/SQLNODE01.hlb.intern:1433 HLB\svc-sql-prod 
 
setspn -S MSSQLSvc/SQLNODE02:1433 HLB\svc-sql-prod 
setspn -S MSSQLSvc/SQLNODE02.hlb.intern:1433 HLB\svc-sql-prod 
 
# AG-Listener 
setspn -S MSSQLSvc/AG-LISTENER01:1433 HLB\svc-sql-prod 
setspn -S MSSQLSvc/AG-LISTENER01.hlb.intern:1433 HLB\svc-sql-prod 
 
# Prüfung: 
setspn -L HLB\svc-sql-prod

Das Tool exportiert in Schritt 9 automatisch die konkreten Befehle nach:
C:\System\WinSrvLog\MSSQL\AlwaysOn_SPN_ADTeam_<Datum>.txt

Ausgaben & Logdateien
Alle Dateien werden automatisch unter C:\System\WinSrvLog\MSSQL\ gespeichert

Farbcodierung im Live-Protokoll

FarbeBedeutungBeispiel
[10:15:01] Blau (fett)Abschnittsüberschrift=== Schritt 3: Endpoint erstellen ===
[10:15:14] Grün (fett)ErfolgSQLNODE01: Endpoint 'Hadr_endpoint' angelegt
[10:15:22] GelbWarnung / übersprungenSPN MSSQLSvc/SQLNODE02:1433 fehlt
[10:15:45] Rot (fett)FehlerSQLNODE02: Verbindung fehlgeschlagen
[10:14:23] HellgrauInformationNodes: SQLNODE01, SQLNODE02

Gespeicherte Dateien

DateiInhaltZeitpunkt
AlwaysOn_ClusterSettings_<Datum>.txt Cluster-Konfiguration, AG-Parameter, Node-Status – vollständiges Backup vor Änderungen Vor Schritt 1
AlwaysOn_Setup_<Datum>.log Vollständiges Text-Log aller Schritte mit Zeitstempeln Nach Abschluss
AlwaysOn_Setup_<Datum>.rtf Farbiges RTF-Log – exportierbar über "Log speichern"-Button im Tool Manuell
AlwaysOn_SPN_ADTeam_<Datum>.txt Fertige setspn-Befehle für das AD-Team mit Erklärung und Prüfbefehl Schritt 9
Fehlerbehebung
Bekannte Fehlermeldungen und deren Ursachen
FehlermeldungUrsacheLösung
Cannot generate SSPI context SPNs für den Node fehlen im Active Directory Kurzfristig: manuellen SQL-Login-Schritt im Tool durchführen ("Weiter"-Button). Langfristig: SPNs durch AD-Team setzen lassen (Schritt 9)
WSFC group … already exists Überrest eines fehlgeschlagenen Setup-Versuchs Tool bereinigt automatisch: Remove-ClusterGroup + Registry-Key HadrAgNameToldMap auf allen Nodes
Login failed for user AGSetup_… SQL Server nicht im Mixed Mode oder Password-Policy blockiert Mixed Mode in SSMS prüfen: Server Properties → Security → SQL Server and Windows Authentication mode
Backup-Verzeichnis nicht erreichbar UNC-Pfad ungültig oder keine Schreibrechte Pfad im PropertyGrid (Backup-Share) korrigieren; muss von allen Nodes beschreibbar sein
Endpoint-Port 5022 bereits belegt Bestehender Endpoint oder Firewall blockiert den Port SELECT * FROM sys.endpoints WHERE type=4 ausführen; Endpoint-Port im PropertyGrid anpassen
AG nach 60s noch nicht sichtbar SQL Server nach HADR-Aktivierung noch nicht vollständig initialisiert Tool wartet aktiv per SELECT 1 bis max. 2 Minuten. Bei Timeout: SQL-Dienst manuell prüfen
Technische Details
Architektur-Entscheidungen und Sicherheitsmaßnahmen

Verbindungsstrategie

  • Einlesen: Windows-Auth per WMI für Dienst-Informationen
  • Konfiguration: Kerberos auf allen Nodes testen
  • Bei SSPI-Fehler: temporäres SQL-Login (28 Zeichen, kryptografisch zufällig)
  • Passwort: nur T-SQL-sichere Zeichen, nie in Logdateien
  • Login und Policy nach Abschluss garantiert entfernt

Warum sqlcmd statt dbaTools?

  • Nach HADR-Aktivierung und Dienst-Neustart in Schritt 2 hält dbaTools intern gecachte Verbindungen
  • Über diese Verbindungen erscheint sys.availability_groups noch leer
  • sqlcmd öffnet bei jedem Aufruf eine frische TCP-Verbindung
  • Betrifft: CREATE AVAILABILITY GROUP und alle AG-Join-Befehle

dbaTools-Einsatz minimiert

  • Nur Invoke-DbaQuery für T-SQL mit Credential-Support
  • Nur Connect-DbaInstance für Verbindungstests
  • Alle anderen Ops: direktes T-SQL, WMI, FailoverClusters-Cmdlets
  • Minimiert Versionsabhängigkeiten und interne Seiteneffekte

WSFC-Cleanup bei Wiederholung

  • Prüft vor AG-Anlage auf verwaiste WSFC-Gruppen
  • Stop-ClusterGroup + Remove-ClusterGroup -RemoveResources
  • Registry HKLM:\Cluster\HadrAgNameToldMap auf allen Nodes per Invoke-Command bereinigen
  • Ermöglicht saubere Wiederholung nach Fehlschlag

Module & Voraussetzungen

  • PowerShell 5.1+ (#Requires -RunAsAdministrator)
  • FailoverClusters: automatische Installation via RSAT-Feature
  • dbaTools ≥ 2.0: automatische Installation via PSGallery
  • Bereits geladene Module-Versionen werden nicht neu importiert
  • Bei Installations-Fehler: klare Fehlermeldung mit Handlungsanweisung

Cluster-Einlesen – Details

  • Get-Cluster, Get-ClusterNode, Get-ClusterGroup
  • Listener-IP aus Get-ClusterResource (Typ: IP Address)
  • Listener-Name aus Get-ClusterParameter … Name
  • HADR-Status per WMI und T-SQL-DMV
  • Alle Werte werden direkt ins PropertyGrid-Objekt übernommen

SQL Server AlwaysOn Setup Tool  ·  Version 1.0.0  ·  April 2026

DBA-Team  ·  FI-TS München  ·  Intern

PowerShell 5.1+  ·  FailoverClusters RSAT  ·  dbaTools ≥ 2.0  ·  SQL Server 2022/2025