Ola Hallengren Datenbankwartung einrichten

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:

@BackupDirectoryPfad in dem die Backups abgelegt werden sollen
@CleanupTimeAnzahl 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-NameBeschreibung
CommandLog CleanupDieser Job löscht alle Einträge in der CommandLog Tabelle die älter als 30 Tage sind.
DatabaseBackup – SYSTEM_DATABASE – FULLDieser Job erstellt ein Voll-Backup von allen Systemdatenbanken. Dies sind die master, model und die msdb Datenbank.
DatabaseBackup – USER_DATABASES – DIFFDieser Job erstellt von allen Benutzer-Datenbanken ein differenzielles Backup.
DatabaseBackup – USER_DATABASES – FULLDieser Job erstellt von allen Benutzerdatenbanken ein Voll-Backup.
DatabaseBackup – USER_DATABASES – LOGDieser Job erstellt ein Backup der Transaktionsprotokolle der Benutzerdatenbanken wenn diese als Wiederherstellungsmodell „Vollständig“ ausgewählt haben.
DatabaseIntegrityCheck – SYSTEM_DATABASESDieser Job führt ein Integritätscheck der Systemdatenbanken durch
DatabaseIntegrityCheck – USER_DATABASESDieser Job führt ein Integritätscheck der Benutzerdatenbanken durch
IndexOptimize – USER_DATABASESDieser Job führt eine Indexoptimierung für alle Benutzerdatenbanken durch
Output File CleanupDieser Job löscht alle *.txt im LOG-Verzeichnis des SQL-Servers, welche älter als 30 Tage sind.
sp_delete_backuphistoryDieser Job löscht alle Einträge der Backup Logs in der msdb Datenbank welche älter als 30 Tage sind.
sp_purge_jobhistoryDieser 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-NameVorgeschlagener Intervall
DatabaseBackup – SYSTEM_DATABASE FULLEinmal in der Woche
DatabaseBackup – USER_DATABASE DIFFAlle 6 Stunden
DatabaseBackup – USER_DATABASE FULLEinmal am Tag
DatabaseBackup – USER_DATABASE LOGAlle 30 Minuten
DatabaseIntegrityCheck – SYSTEM_DATABASEEinmal in der Woche
DatabaseIntegrityCheck – USER_DATABASESEinmal in der Woche
IndexOptimize – USER_DATABASESEinmal in der Woche
Output File CleanupEinmal in der Woche
sp_delete_backuphistoryEinmal in der Woche
sp_purge_jobhistoryEinmal 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