In diesem Artikel beschreibe ich, wie eine automatisierte Datenbankwartung für einen Microsoft SQL Server eingerichtet werden kann.
Hierfür nutzen wir die in der Praxis weit verbreiteten Wartungsskripte von Ola Hallengren. Diese stellen eine Sammlung von Stored Procedures bereit, mit denen sich Wartungsaufgaben wie Backups, Indexoptimierung und Integritätsprüfungen automatisiert durchführen lassen.
Auf Basis dieser Procedures können SQL Server Agent Jobs erstellt werden, die die gewünschten Wartungsaufgaben in festgelegten Intervallen ausführen. Die Konfiguration erfolgt über verschiedene Parameter, die individuell an die jeweilige Umgebung angepasst werden können.
Im ersten Schritt müssen wir uns diese Prozeduren erstmal installieren. Dazu gehen wir auf die folgende Website und laden uns das Skript herunter: https://ola.hallengren.com/
Sobald wir das Skript heruntergeladen haben, öffnen wir dieses im SSMS (SQL Server Management Studio). Dort passen wir jetzt folgende Dinge an:
| @BackupDirectory | Pfad in dem die Backups abgelegt werden sollen |
| @CleanupTime | Anzahl der Stunden wie lange die Backups auf der Platte liegen sollen. (Die Backups sollten vorher mit einer Backupsoftware an eine andere Stelle kopiert werden). |
| USE [master] | Wir erstellen eine neue Datenbank und ändern master auf unsere neue Datenbank |
Sobald wir diese Dinge angepasst haben, können wir das Skript ausführen. Wir sollten im Anschluss dann unter Jobs im SSMS unsre neuen Wartungsjobs sehen.

Wenn die Auflistung aussieht wie auf dem Screenshot zusehen, dann haben wir bis hierher alles richtig gemacht! In der unten stehenden Tabelle, erkläre ich kurz die Funktion der Prozedur / Job.
| Job-Name | Beschreibung |
| CommandLog Cleanup | Dieser Job löscht alle Einträge in der CommandLog Tabelle die älter als 30 Tage sind. |
| DatabaseBackup – SYSTEM_DATABASE – FULL | Dieser Job erstellt ein Voll-Backup von allen Systemdatenbanken. Dies sind die master, model und die msdb Datenbank. |
| DatabaseBackup – USER_DATABASES – DIFF | Dieser Job erstellt von allen Benutzer-Datenbanken ein differenzielles Backup. |
| DatabaseBackup – USER_DATABASES – FULL | Dieser Job erstellt von allen Benutzerdatenbanken ein Voll-Backup. |
| DatabaseBackup – USER_DATABASES – LOG | Dieser Job erstellt ein Backup der Transaktionsprotokolle der Benutzerdatenbanken wenn diese als Wiederherstellungsmodell „Vollständig“ ausgewählt haben. |
| DatabaseIntegrityCheck – SYSTEM_DATABASES | Dieser Job führt ein Integritätscheck der Systemdatenbanken durch |
| DatabaseIntegrityCheck – USER_DATABASES | Dieser Job führt ein Integritätscheck der Benutzerdatenbanken durch |
| IndexOptimize – USER_DATABASES | Dieser Job führt eine Indexoptimierung für alle Benutzerdatenbanken durch |
| Output File Cleanup | Dieser Job löscht alle *.txt im LOG-Verzeichnis des SQL-Servers, welche älter als 30 Tage sind. |
| sp_delete_backuphistory | Dieser Job löscht alle Einträge der Backup Logs in der msdb Datenbank welche älter als 30 Tage sind. |
| sp_purge_jobhistory | Dieser Job löscht den Verlauf des SQL Server Agent in der msdb Datenbank welche älter als 30 Tage sind. |
Diese Jobs müssen jetzt nur noch terminiert werden. Für meinen Datenbankserver laufen die Jobs nachfolgendem Intervall:
| Job-Name | Vorgeschlagener Intervall |
| DatabaseBackup – SYSTEM_DATABASE FULL | Einmal in der Woche |
| DatabaseBackup – USER_DATABASE DIFF | Alle 6 Stunden |
| DatabaseBackup – USER_DATABASE FULL | Einmal am Tag |
| DatabaseBackup – USER_DATABASE LOG | Alle 30 Minuten |
| DatabaseIntegrityCheck – SYSTEM_DATABASE | Einmal in der Woche |
| DatabaseIntegrityCheck – USER_DATABASES | Einmal in der Woche |
| IndexOptimize – USER_DATABASES | Einmal in der Woche |
| Output File Cleanup | Einmal in der Woche |
| sp_delete_backuphistory | Einmal in der Woche |
| sp_purge_jobhistory | Einmal in der Woche |
Info: Es handeln sich hier um Werte die bei mir ganz gut klappen. Diese Werte müssen je nach Bedarf natürlich angepasst werden.
Um den Intervall festzulegen, öffnen wir über die Eigenschaften des Jobs den „Scheduler“. Dort legen wir einen Eintrag an und definieren unseren Intervall. Sobald wir auf OK drücken, ist der Intervall gesetzt und der Job würde beim Eintreffen des Intervalls anfangen die Wartungen durchzuführen.

Überwachung
Um den Status der Jobs zu überwachen, kann der folgende SQL-Query verwendet werden:
SELECT ID
,DatabaseName
,CommandType
,StartTime
,EndTime
,ErrorNumber
FROM Database.dbo.CommandLog
WHERE ErrorNumber > 0