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.
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.
| Nr. | Element | Beschreibung |
|---|---|---|
| ① | 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). |
SQL Service-Konto
Optional: Konto und Passwort per WMI (Win32_Service) auf allen Nodes ändern und Dienst neu starten.
HADR aktivieren
Always On per sp_configure 'hadr enabled', 1 auf allen Nodes aktivieren; Dienst-Neustart mit aktivem Bereitschaftstest (max. 2 Min. Wartezeit).
Endpoint erstellen
Datenbankspiegelungs-Endpoint (Port 5022) per T-SQL anlegen und starten. Port ist im PropertyGrid konfigurierbar.
CONNECT-Berechtigung
Windows-Login für das Dienst-Konto anlegen und GRANT CONNECT ON ENDPOINT auf alle Nodes erteilen.
Testdatenbank
Datenbank anlegen, Recovery-Modell FULL setzen, initiales Full-Backup auf den konfigurierten UNC-Share erstellen.
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.
Listener konfigurieren
AG-Listener mit erkannter IP-Adresse und Port per ALTER AVAILABILITY GROUP … ADD LISTENER anlegen.
Status prüfen
AG-Synchronisierungsstatus und Replica-Rollen (Primary/Secondary) per DMV sys.dm_hadr_availability_replica_states ausgeben.
SPN-Prüfung
Fehlende MSSQLSvc-SPNs erkennen, fertige setspn-Befehle als Textdatei für das AD-Team exportieren.
| 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) |
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
C:\System\WinSrvLog\MSSQL\ gespeichertFarbcodierung im Live-Protokoll
| Farbe | Bedeutung | Beispiel |
|---|---|---|
| [10:15:01] Blau (fett) | Abschnittsüberschrift | === Schritt 3: Endpoint erstellen === |
| [10:15:14] Grün (fett) | Erfolg | SQLNODE01: Endpoint 'Hadr_endpoint' angelegt |
| [10:15:22] Gelb | Warnung / übersprungen | SPN MSSQLSvc/SQLNODE02:1433 fehlt |
| [10:15:45] Rot (fett) | Fehler | SQLNODE02: Verbindung fehlgeschlagen |
| [10:14:23] Hellgrau | Information | Nodes: SQLNODE01, SQLNODE02 |
Gespeicherte Dateien
| Datei | Inhalt | Zeitpunkt |
|---|---|---|
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 |
| Fehlermeldung | Ursache | Lö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 |
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_groupsnoch leer sqlcmdöffnet bei jedem Aufruf eine frische TCP-Verbindung- Betrifft:
CREATE AVAILABILITY GROUPund alle AG-Join-Befehle
dbaTools-Einsatz minimiert
- Nur
Invoke-DbaQueryfür T-SQL mit Credential-Support - Nur
Connect-DbaInstancefü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\HadrAgNameToldMapauf allen Nodes perInvoke-Commandbereinigen - Ermöglicht saubere Wiederholung nach Fehlschlag
Module & Voraussetzungen
- PowerShell 5.1+ (
#Requires -RunAsAdministrator) FailoverClusters: automatische Installation via RSAT-FeaturedbaTools ≥ 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