sqmSQLTool · Best Practices

PowerShell für SQL-Administratoren
praxisnahe Aufgaben & Workflows

Das Modul sqmSQLTool baut auf PowerShell und dbatools auf – aber ergänzt mehr als 70 spezialisierte Funktionen für Sicherheit, Verfügbarkeitsgruppen, Policy-Erzwingung und automatisierte Diagnosen. Hier die wichtigsten Beispiele für den täglichen Einsatz.

Invoke-sqmUserDatabaseBackup Backup & Restore

Komfortables vollständiges Backup aller User-Datenbanken mit Komprimierung und automatischem Zielpfad. Alternativ kann man auch natives Backup-DbaDatabase verwenden, aber Invoke-sqmUserDatabaseBackup legt zusätzlich Prüfungen auf freien Speicherplatz an.

# Backup aller User-Datenbanken auf Standardverzeichnis (C:\Backups oder konfigurierter Pfad) 
Invoke-sqmUserDatabaseBackup -SqlInstance "SRV-SQL01" 
 
# Backup mit individuellem Zielordner + Log-Shrink nach Sicherung (optional) 
Invoke-sqmUserDatabaseBackup -SqlInstance "SRV-SQL01" -BackupRoot "E:\SQLBackups" -CompressBackup 
 
# Backup einer einzelnen Datenbank 
Invoke-sqmUserDatabaseBackup -SqlInstance "SRV-SQL01" -Database "SalesDB"
💡 Tipp: Für die Wiederherstellung nutze Invoke-sqmRestoreDatabase – sie erkennt automatisch den letzten vollen Backup-Pfad und kann optional eine Differenz-/Log-Restore-Kette abbilden.
New-SqmSqlLoginWithADPolicy Sicherheit · Logins

Erzeugt einen SQL Login, wobei das Passwort vorher gegen die aktive Active Directory Standardrichtlinie geprüft wird (Länge, Komplexität). Zusätzlich wird CHECK_POLICY = ON und CHECK_EXPIRATION = ON gesetzt. Umgeht die Einschränkungen einer reinen SQL-Policy und schützt vor schwachen Passwörtern.

# Passwort sicher abfragen 
$secPassword = Read-Host "Passwort für neuen Login" -AsSecureString 
 
# Login mit AD-Policy-Prüfung anlegen 
New-SqmSqlLoginWithADPolicy -SqlInstance "PROD-01" ` 
-LoginName "AppUser_Business" ` 
-SecurePassword $secPassword ` 
-EnforcePasswordExpiration $true 
 
# Mit Must Change (zwingt Benutzer zum Ändern beim ersten Login) 
New-SqmSqlLoginWithADPolicy -SqlInstance "PROD-01" -LoginName "NewAnalyst" -SecurePassword $secPassword -MustChange $true
⚠️ Die Funktion verwendet intern Get-ADDefaultDomainPasswordPolicy. Das AD-Modul muss verfügbar sein (RSAT). Falls nicht, fällt die Prüfung zwar nicht komplett aus, aber die volle Richtlinientreue ist dann nicht garantiert.
Invoke-sqmAddDatabaseToAvailabilityGroup High Availability

Mit den AlwaysOn-Cmdlets lassen sich Datenbanken bequem zu einer Verfügbarkeitsgruppe hinzufügen – inkl. Aktivierung von Auto-Seeding und Bereinigung auf den Sekundärknoten. Reporting mit Get-sqmAgHealthReport zeigt Synchronisationsstatus, Redo-Queue und Verbindungsprobleme an.

# Datenbank der AG hinzufügen (AutoSeed) 
Invoke-sqmAddDatabaseToAvailabilityGroup -AvailabilityGroup "AG_PROD" -Database "ERP" 
 
# Alle User-DBs einer Instanz der AG zuweisen 
Invoke-sqmAddDatabaseToAvailabilityGroup -SqlInstance "SQL01" -AvailabilityGroup "AG_PROD" -All 
 
# Zustandsbericht aller AGs (CSV + TXT) 
Get-sqmAgHealthReport -SqlInstance "SQL01" -OutputPath "D:\Reports\AlwaysOn" 
 
# Alle Secondaries synchronisieren (Logins, Jobs, Operatoren) 
Sync-sqmAgNode -SqlInstance "SQL01"
📌 Weitere hilfreiche AG-Funktionen: Repair-sqmAlwaysOnDatabases prüft inkonsistente DBs und Invoke-sqmFailover ermöglicht kontrolliertes Failover inkl. Health-Check.
Get-sqmIndexFragmentation Performance · Wartung

Automatische Analyse der Index-Fragmentierung mit Handlungsempfehlung (REORGANIZE ab 5%, REBUILD ab 30%). Werte können direkt an Invoke-sqmUpdateStatistics oder Invoke-sqmQueryStore weitergereicht werden.

# Fragmentierungsanalyse für eine Datenbank 
Get-sqmIndexFragmentation -SqlInstance "SQL01" -Database "Sales" -MinFragmentationPercent 10 
 
# REBUILD-Kandidaten anzeigen 
Get-sqmIndexFragmentation -SqlInstance "SQL01" -All | Where-Object Recommendation -eq 'REBUILD' 
 
# Fehlende Indizes per DMV-Cache (Top 20) 
Get-sqmMissingIndexes -SqlInstance "SQL01" -TopN 20 
 
# Query Store auswerten: Top 10 Queries nach CPU, Diagnose-Modus 
Invoke-sqmQueryStore -SqlInstance "SQL01" -Database "FinanceDB" -Query -TopN 10 -OrderBy CPU -LookbackHours 48
🚀 Recovery + Statistik-Update: Kombiniere Get-sqmIndexFragmentation mit Invoke-sqmUpdateStatistics -All -OnlyModified, um Wartungsfenster optimal zu nutzen.
Get-sqmDatabaseHealth Health · Überwachung

Zentraler Bericht pro Datenbank: Recovery-Modell, letzte DBCC CHECKDB, Backupzeiten, AutoGrowth-Ereignisse, VLF-Anzahl. Perfekt als täglicher Health-Check per SQL Agent.

# Standard-Check (alle User-DBs) 
Get-sqmDatabaseHealth -SqlInstance "SQL01" 
 
# Inkl. Systemdatenbanken, CSV-Export nach D:\Reports 
Get-sqmDatabaseHealth -SqlInstance "SQL01" -IncludeSystemDatabases -OutputPath "D:\Health" 
 
# Datenbanken ohne Backup in den letzten 2 Tagen finden 
Get-sqmDatabaseHealth -SqlInstance "SQL01" | Where-Object { $_.LastFullBackup -lt (Get-Date).AddDays(-2) } 
 
# Verbindungsstatistiken / Blockings 
Get-sqmConnectionStats -SqlInstance "SQL01" -GroupBy Application 
Get-sqmBlockingReport -SqlInstance "SQL01" | Format-Table
💡 Patch-Analyse: Invoke-sqmPatchAnalysis -SqlInstance "SQL01" gleicht die Buildnummer mit CU-Referenztabelle ab und zeigt, ob die Instanz aktuell ist.
Install-sqmOlaMaintenanceSolution Wartungsautomatisierung

Installiert / aktualisiert die bekannten Ola Hallengren Wartungsskripte (IndexOptimize, DatabaseBackup, IntegrityCheck) und erstellt standardisierte SQL Agent Jobs. Spart Stunden der manuellen Einrichtung.

# Ola Scripts installieren + Jobs erzeugen (Backup, Index, Integrity) 
Install-sqmOlaMaintenanceSolution -SqlInstance "SQL01" -InstallJobs 
 
# Nur Index-Wartungs-Job erstellen 
New-sqmOlaMaintenanceJobs -SqlInstance "SQL01" -JobType IndexOptimize 
 
# Alle vorhandenen Ola-Jobs testen / Status prüfen 
Test-sqmOlaInstallation -SqlInstance "SQL01"
📅 Best Practice: Nach Installation Get-sqmAgentJobHistory -SqlInstance "SQL01" -JobName 'DatabaseBackup-USER_DATABASES' -Since (Get-Date).AddDays(-1) zur Überwachung.
Invoke-sqmLoginAudit Sicherheits-Audit

Auditiert SQL- und Windows-Logins: inaktive Logins (Tage ohne Anmeldung), Passwortalter, Verstöße gegen Policies und optional AD-Orphans. Übersichtlich als CSV / TXT.

# Standard Audit (nur SQL Logins) 
Invoke-sqmLoginAudit -SqlInstance "SQL01" 
 
# Inaktivitätsschwelle 60 Tage + MaxPasswortalter 90 Tage + AD Orphan-Check 
Invoke-sqmLoginAudit -SqlInstance "SQL01" -InactivityThresholdDays 60 -MaxPasswordAgeDays 90 -CheckAdOrphans 
 
# Inventur aller Instanzobjekte (Datenbanken, Jobs, Linked Server) 
Export-sqmDatabaseDocumentation -SqlInstance "SQL01" -OutputPath "D:\Inventory" 
 
# SPN-Report für Kerberos konfiguration 
Get-sqmSpnReport -ComputerName "SQL01"

🔧 Weitere nützliche Funktionen im sqmSQLTool

  • Get-sqmTempDbRecommendation
  • Set-sqmDatabaseOwner -All
  • Invoke-sqmSaObfuscation
  • Compare-sqmServerConfiguration
  • Invoke-sqmExtendedEvents -Create -Template SlowQueries
📦 Das Modul setzt auf dbatools auf, erweitert aber speziell für AlwaysOn, Ola-Integration, Sicherheits-Audit und AD-Integration. Die vollständige Referenz findest du auf powershelldba.de.