SQL Server Instanzen verwalten mit PowerShell - Best Practice Check, Patch-Stand und Inventarisierung

9 PowerShell-Funktionen fuer die vollstaendige Verwaltung von SQL Server Instanzen: Best Practice Assessment, Patch-Analyse gegen aktuelle CU/SP-Referenztabelle, Konfigurationsvergleich, Cluster-Info und Disk Space Monitoring.

9 Funktionen Best Practice Patch-Management Inventarisierung

Instanz-Management - Funktionen im Ueberblick

Get-sqmSQLInstanceCheck - SQL Server Best Practice Check PowerShell: Max Memory, MAXDOP, Cost Threshold, Trace Flags

Was macht die Funktion?

Fuehrt einen umfassenden Best Practice Check einer SQL Server Instanz durch: Max Server Memory (korrekt konfiguriert?), MAXDOP (entspricht CPU-Topologie?), Cost Threshold for Parallelism, Filestream-Konfiguration, kritische Trace Flags und Optimierungsoptionen. Bewertet jeden Punkt mit Status (OK / Warnung / Kritisch) und Empfehlung.

Wann nutzt man sie?

Bei der Ersteinrichtung einer neuen SQL Server Instanz um alle wesentlichen Konfigurationspunkte zu pruefen. Als regelmaessiger Health-Check um Konfigurationsdrift zu erkennen. Vor und nach grossen Aenderungen (Upgrade, Migration) als Verifikationsschritt.

Typische Probleme

  • Max Server Memory auf dem Standardwert 2147483647 MB - SQL Server beansprucht gesamten RAM
  • MAXDOP 0 auf NUMA-Systemen - Cross-NUMA-Parallelisierung mit hohen Wait Times
  • Cost Threshold for Parallelism auf Standard 5 - zu viele triviale parallele Plaene

Vorteile

  • Vollstaendiger Best-Practice-Assessment in einem einzigen Befehl
  • Ampel-Bewertung mit konkreter Empfehlung pro Konfigurationspunkt
  • HTML-Bericht-Ausgabe fuer Dokumentation und Review-Meetings
# Best Practice Check mit Ampel-Ausgabe
Get-sqmSQLInstanceCheck -SqlInstance "SQL01"

# Check als HTML-Report speichern
Get-sqmSQLInstanceCheck -SqlInstance "SQL01" -OutputHtml -OutputPath "D:\Reports"

Get-sqmServerSetting - SQL Server Konfiguration auslesen PowerShell: sp_configure, Edition, Collation, Systeminfo

Was macht die Funktion?

Liest alle relevanten SQL Server Server-Properties aus: Edition, Version, Build, Collation, alle sp_configure Werte, Systeminfos (RAM, CPU, NUMA-Knoten) und Dienst-Konfiguration (Service Account, Starttyp). Ausgabe als strukturiertes PowerShell-Objekt fuer weitere Verarbeitung oder Dokumentation.

Wann nutzt man sie?

Als Ausgangspunkt fuer die Dokumentation einer neuen oder uebernommenen Instanz. Beim Support-Eskalationsprozess zur schnellen Erfassung aller relevanten Instanz-Eigenschaften. Als Grundlage fuer den Konfigurationsvergleich zweier Instanzen (Compare-sqmServerConfiguration).

Typische Probleme

  • sp_configure zeigt "config value" nicht "run value" - laufende Konfiguration kann abweichen
  • RECONFIGURE notwendig nach Konfigurationsaenderungen - wird oft vergessen
  • Fehlende Uebersicht ueber alle konfigurierten Werte fuehrt zu unerwarteten Nebeneffekten

Vorteile

  • Zeigt sowohl config_value als auch run_value fuer alle sp_configure Eintraege
  • Vollstaendige System-Information in einem Aufruf ohne mehrere T-SQL-Abfragen
  • Pipeline-faehig fuer Inventarisierungs-Workflows
# Alle Server-Properties einer Instanz ausgeben
Get-sqmServerSetting -SqlInstance "SQL01"

# Nur sp_configure Werte, Export als CSV
Get-sqmServerSetting -SqlInstance "SQL01" -OnlySpConfigure | Export-Csv "Config_SQL01.csv"

Compare-sqmServerConfiguration - SQL Server Konfigurationsvergleich PowerShell: Abweichungen zwischen zwei Instanzen finden

Was macht die Funktion?

Vergleicht alle sp_configure Werte zweier SQL Server Instanzen und zeigt Abweichungen. Besonders nuetzlich um eine neue Instanz mit einer Referenz-Instanz abzugleichen oder um Konfigurationsdrift in einer Serverfarm zu identifizieren. Abweichungen werden mit Quell- und Zielwert ausgegeben.

Wann nutzt man sie?

Nach dem Aufbau einer neuen Instanz zum Abgleich gegen eine Referenz-Instanz. Zur Identifikation von Konfigurationsdrift in einer grossen SQL Server Farm. Bei der Fehlersuche wenn zwei scheinbar identische Instanzen unterschiedlich performen.

Typische Probleme

  • Neue Instanzen werden manuell konfiguriert - kleine Unterschiede zur Referenz nicht bemerkt
  • Konfigurationsaenderungen werden auf einer Instanz vergessen bei Farm-weiten Aenderungen
  • Unterschiedliches Verhalten identischer Applikationen auf verschiedenen Instanzen

Vorteile

  • Schneller Soll/Ist-Vergleich ohne manuelles Durchsehen aller sp_configure Werte
  • Nur Abweichungen werden angezeigt - klar und uebersichtlich
  • Basis fuer automatisierte Konformitaetspruefung in grossen Umgebungen
# Konfiguration von SQL02 gegen Referenz SQL01 vergleichen
Compare-sqmServerConfiguration -ReferenceInstance "SQL01" -DifferenceInstance "SQL02"

# Vergleich mehrerer Instanzen gegen Referenz
@("SQL02","SQL03","SQL04") | Compare-sqmServerConfiguration -ReferenceInstance "SQL01"

Invoke-sqmInstanceInventory - SQL Server Instanz vollstaendig inventarisieren PowerShell: Datenbanken, Jobs, Logins als CSV

Was macht die Funktion?

Erstellt eine vollstaendige Inventarisierung einer SQL Server Instanz als TXT und CSV: Server-Properties, alle Datenbanken (Groesse, Status, Recovery Model), alle SQL Agent Jobs (Status, letzter Lauf), alle Logins (Typ, Rolle) und Konfigurationswerte. Ideal fuer Uebernahme-Dokumentation und Change-Management.

Wann nutzt man sie?

Bei der Uebernahme einer fremden SQL Server Instanz fuer eine vollstaendige Bestandsaufnahme. Als Vor-Migrationsdokumentation um den Ausgangszustand festzuhalten. Regelmaessig fuer eine aktuelle Inventarliste aller SQL Server Objekte im Configuration Management.

Typische Probleme

  • Keine Dokumentation bei Instanz-Uebernahme - historische Konfigurationen unbekannt
  • Manuelles Inventarisieren vergisst regelmaessig einzelne Objekte
  • Inventar veraltet sofort wenn Aenderungen nicht nachgepflegt werden

Vorteile

  • Vollstaendige Instanz-Dokumentation in einem einzigen Befehl
  • Ausgabe als CSV fuer CMDB-Import und als TXT fuer menschlich lesbare Dokumentation
  • Automatisierbar fuer regelmaessige CMDB-Aktualisierungen
# Vollstaendige Inventarisierung erstellen
Invoke-sqmInstanceInventory -SqlInstance "SQL01" -OutputPath "D:\Reports\Inventar"

# Inventar mehrerer Instanzen
@("SQL01","SQL02","SQL03") | Invoke-sqmInstanceInventory -OutputPath "D:\Reports\Inventar"

Invoke-sqmPatchAnalysis - SQL Server Patch-Stand pruefen PowerShell: CU, SP, EOL-Hinweise und Build-Vergleich

Was macht die Funktion?

Prueft den CU/SP-Patchstand einer SQL Server Instanz gegen eine eingebettete Build-Referenztabelle. Zeigt aktuellen Build, aktuellsten veroeffentlichten CU, Anzahl verpasster CUs und EOL-Status (End of Life). Pipeline-faehig fuer die Analyse ganzer Instanz-Farmen. Kein Internet-Zugang notwendig.

Wann nutzt man sie?

Als regelmaessiger Patch-Status-Check fuer alle SQL Server Instanzen. Bei Sicherheitsaudits um nachzuweisen dass Instanzen aktuell gepatcht sind. Zur Priorisierung von Patching-Aktivitaeten: welche Instanzen sind am weitesten zurueck?

Typische Probleme

  • Verpasste CUs werden erst beim naechsten Audit bemerkt - nicht bei Veroeffentlichung
  • EOL-Versionen (SQL 2012, 2014) ohne Extended Support im Produktionsbetrieb
  • Kein Ueberblick wie viele CUs eine Instanz hinter dem aktuellen Stand ist

Vorteile

  • Keine Internet-Verbindung notwendig - Build-Tabelle ist im Modul eingebettet
  • EOL-Warnung direkt in der Ausgabe fuer Compliance-Nachweise
  • Pipeline-faehig: gesamte Instanz-Farm in einem Befehl pruefen
# Patchstand einer einzelnen Instanz pruefen
Invoke-sqmPatchAnalysis -SqlInstance "SQL01"

# Patchstand aller Instanzen aus einer Liste pruefen
Get-Content "instanzen.txt" | Invoke-sqmPatchAnalysis | Export-Csv "Patchstatus.csv"

Get-sqmClusterInfo - SQL Server Cluster-Informationen PowerShell: Nodes, Rollen, Ressourcen, IP-Adressen

Was macht die Funktion?

Liest Cluster-Informationen aus dem Windows Server Failover Cluster: alle Nodes mit Status, aktuelle Cluster-Owner, Cluster-Ressourcen (Online/Offline), Cluster-IP-Adressen und welche Node welche Rolle besitzt. Funktioniert sowohl fuer FCI (Failover Cluster Instance) als auch WSFC fuer AlwaysOn AG.

Wann nutzt man sie?

Zur schnellen Uebersicht welcher Node gerade als Owner fungiert ohne Failover Cluster Manager oeffnen zu muessen. Bei Cluster-Problemen zur Diagnose welche Ressourcen offline sind. Als Teil von Wartungs-Checklisten vor und nach Cluster-Node-Patches.

Typische Probleme

  • Cluster-Ressource offline nach Node-Patch ohne automatisches Failover-Zurueck
  • Heartbeat-Netzwerk-Probleme fuehren zu unerwartetem Failover
  • Fehlende Sichtbarkeit ueber den Cluster-Zustand ohne GUI-Zugang

Vorteile

  • Vollstaendige Cluster-Uebersicht ohne Failover Cluster Manager-Zugang
  • Funktioniert remote - kein RDP zum Cluster-Node notwendig
  • Integrierbar in automatisierte Wartungs-Checklisten
# Cluster-Info fuer SQL Server Node
Get-sqmClusterInfo -ComputerName "SQL01"

# Nur offline Ressourcen anzeigen
Get-sqmClusterInfo -ComputerName "SQL01" -OnlyOffline

Get-sqmDiskSpaceReport - SQL Server Disk Space PowerShell pruefen: Freier Speicherplatz auf SQL-Volumes mit Warnschwellen

Was macht die Funktion?

Prueft den freien Speicherplatz auf allen SQL Server relevanten Volumes (Datendateien, Logdateien, Backups, TempDB). Zeigt Gesamtgroesse, belegt und frei in GB und Prozent. Konfigurierbare Warnschwellen (z.B. Warnung unter 20%, Kritisch unter 10%) fuer Monitoring-Integration.

Wann nutzt man sie?

Als taeglich automatisierter Check mit E-Mail-Benachrichtigung bei Unterschreitung der Warnschwelle. Vor grossen Backup- oder Restore-Operationen zur Verifikation ausreichenden Speicherplatzes. Als Teil der regelmaessigen Kapazitaetsplanung.

Typische Probleme

  • Volles Datenlaufwerk fuehrt zu Datenbank-Offline oder fehlgeschlagenen Transaktionen
  • Backup-Laufwerk voll - Backups schlagen fehl ohne sofortige Benachrichtigung
  • TempDB-Wachstum belegt unbemerkt das System-Laufwerk

Vorteile

  • Konfigurierbare Warn- und Kritisch-Schwellenwerte fuer Monitoring-Alerting
  • Unterscheidet SQL-relevante von nicht-relevanten Volumes
  • Pipeline-faehig fuer Monitoring-System-Integration (SCOM, Zabbix, Nagios)
# Disk Space mit Standard-Schwellenwerten pruefen
Get-sqmDiskSpaceReport -SqlInstance "SQL01"

# Mit eigenen Schwellenwerten (Warnung 25%, Kritisch 10%)
Get-sqmDiskSpaceReport -SqlInstance "SQL01" -WarnPercent 25 -CriticalPercent 10

Invoke-sqmCollationChange - SQL Server Collation aendern PowerShell: Server-Collation inkl. Rebuild der Systemdatenbanken

Was macht die Funktion?

Aendert die Server-Collation einer SQL Server Instanz - ein Prozess der normalerweise einen Rebuild der Systemdatenbanken und Neuinstallations-Schritte erfordert. Die Funktion automatisiert den kompletten Prozess inklusive Backup aller User-Datenbanken, Rebuild der Systemdatenbanken und Restore. Mit ausfuehrlichem Vor-Checklisten-Report.

Wann nutzt man sie?

Wenn eine Instanz mit falscher Collation installiert wurde und Applikationen Collation-abhaengige Operationen benoetigen. Bei der Vereinheitlichung der Collation in einer heterogenen SQL Server Farm. Wenn Linked-Server-Abfragen durch Collation-Mismatch fehlschlagen.

Typische Probleme

  • Collation-Mismatch zwischen Datenbanken fuehrt zu Fehlern bei Joins ueber Datenbanken
  • Manueller Collation-Change-Prozess sehr fehleranfaellig und nicht dokumentiert
  • Rebuild der Systemdatenbanken loescht alle Jobs, Logins und Konfiguration

Vorteile

  • Automatisches Backup aller User-Datenbanken vor dem Collation-Change
  • Automatische Re-Erstellung aller Logins und Jobs nach dem Rebuild
  • WhatIf-Modus zeigt alle Schritte ohne Ausfuehrung zur Risikoabschaetzung
# Collation-Change simulieren (WhatIf)
Invoke-sqmCollationChange -SqlInstance "SQL01" -NewCollation "Latin1_General_CI_AS" -WhatIf

# Collation-Change ausfuehren mit vorherigem Full-Backup
Invoke-sqmCollationChange -SqlInstance "SQL01" -NewCollation "Latin1_General_CI_AS" -BackupFirst

Invoke-sqmFormatDrive64k - Datenlaufwerk mit 64k Cluster-Size formatieren PowerShell fuer SQL Server Performance-Optimierung

Was macht die Funktion?

Formatiert ein Datentraeger-Volume mit 64 KB Cluster-Groesse (NTFS Allocation Unit Size) gemaess SQL Server Best Practice. Diese Einstellung verbessert die IO-Performance fuer SQL Server Datendateien erheblich. Unterstuetzt lokale und SAN-Volumes. Mit Sicherheitsabfrage vor der Formatierung.

Wann nutzt man sie?

Bei der Einrichtung neuer SQL Server Storage-Volumes bevor Datenbankdateien angelegt werden. Bei Neueinrichtung nach Storage-Migration wenn Volumes neu formatiert werden muessen. Als Bestandteil des standardisierten SQL Server Setup-Prozesses.

Typische Probleme

  • Standard 4 KB Cluster-Groesse fuer SQL Server Daten - bis zu 25% IO-Overhead
  • Formatierung bereits belegter Volumes loescht alle Daten - nicht vergessen zu sichern
  • SAN-Volumes muessen auch auf Array-Seite korrekt ausgerichtet sein (Partition Alignment)

Vorteile

  • Optimale IO-Performance durch 64 KB Cluster-Groesse entsprechend SQL Server Best Practice
  • Sicherheitsabfrage verhindert versehentliche Formatierung falscher Laufwerke
  • Automatische Partition-Alignment-Pruefung vor der Formatierung
# Volume F: mit 64k Cluster-Size formatieren (mit Bestaetigung)
Invoke-sqmFormatDrive64k -DriveLetter "F" -Label "SQL_DATA"

# Ohne Bestaetigung (fuer automatisierte Skripte)
Invoke-sqmFormatDrive64k -DriveLetter "G" -Label "SQL_LOG" -Force
Zurueck zum Index