SQL Server Agent und die Automatisierung von SQL Server Backups

Bei der Verwaltung von Microsoft SQL Server Instanzen treten häufig Aufgaben auf, die in regelmäßigen Zeitabständen durchgeführt werden sollten. Ein Beispiel hierfür ist die automatische Erstellung von Backups der Datenbanken. Ein Werkzeug, um Aufgaben in SQL Server zu automatisieren, stellt der Dienst „SQL Server Agent“ dar. Dieser vorinstallierte Dienst ist standardmäßig deaktiviert und muss vor der Verwendung explizit gestartet werden. Bevor wir uns einem Anwendungsbeispiel widmen, sollten wir uns mit grundlegenden Begriffen, die im Rahmen der Verwendung des Agents häufig auftreten, vertraut machen:

Ein Auftrag, oder auch Job, stellt eine Art Container für die unterschiedlichen Teilschritte der Aufgabe dar. Im Falle eines Backupjobs sind dies beispielsweise die eigentliche Erstellung des Backups mit dem BACKUP DATABASE-Statement, sowie die Verifizierung der Backupintegrität mittels RESTORE VERIFYONLY.

Aufträge können je nach Anwendungsfall zu gewissen Zeitpunkten (z.B. beim Starten des SQL Server Agents, nach einem festen Zeitplan oder wenn die CPU des Servers nicht ausgelastet ist) oder als Reaktion auf verschiedene Ereignisse (Alerts, z.B. Knappheit einer bestimmten Systemressource) automatisch durchgeführt werden.

Daneben bietet uns der SQL Server Agent die Möglichkeit, Operatoren im Fehlerfall oder bei Warnungen per E-Mail zu benachrichtigen.

Vorteile der Automatisierung von Aufgaben mit Hilfe des SQL Server Agents sind somit die zuverlässige und konsistente Ausführung von Routineaufgaben, sowie die Zeitersparnis für den Administrator.

Nachdem wir uns mit den wesentlichen Aspekten des SQL Server Agents beschäftigt haben, werden wir im nächsten Schritt ein automatisiertes Backup mit Hilfe des SQL Server Management Studios (im Folgenden mit SSMS abgekürzt) und dem SQL Server Agent erstellen:

1. Zunächst sollte sichergestellt werden, dass der SQL Server Agent gestartet ist. Im SSMS sollte der Eintrag „SQL Server Agent“ im Object Explorer mit einem grünen Pfeil versehen sein. Falls dies nicht der Fall sein sollte, kann der Dienst mit einem Rechtsklick auf den genannten Eintrag und der Auswahl der Option „Start“ im Kontextmenü gestartet werden.

Schritt 1.PNG

2. Im nächsten Schritt erstellen wir einen SQL Server Agent Job. Dazu öffnen wir wie in Schritt 1 das Kontextmenü des SQL Server Agents und wählen „New > Job …“ aus. In dem sich nun öffnenden Fenster „New Job“ können wir verschiedene Einstellungen des zu erstellenden Jobs definieren. In der General Page legen wir den Namen des Auftrags als „Automatic WorldCup2018 Backup“ fest und weisen es der Kategorie „Database Maintenance“ zu.

3. Im nächsten Schritt wechseln wir auf die Steps-Page und fügen mittels Klick auf „New …“ unserem Job einen neuen Teilschritt hinzu. Es öffnet sich das Fenster „New Job Step“. Hier definieren wir einen Namen für den Teilschritt (in diesem Fall „Full Backup“), sowie den Befehl, der von diesem Schritt ausgeführt werden soll. In diesem Beispiel lautet er wie folgt:

BACKUP DATABASE [WorldCup2018] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Backup\WC.bak' WITH NOFORMAT, NOINIT, NAME = N'WorldCup2018-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10; GO

Hiermit wird ein vollständiges Backup der Datenbank „WorldCup2018“ erzeugt.

Über den Button „Parse“ kann das Command auf syntaktische Korrektheit überprüft werden.

Daraufhin speichern wir den Schritt mit einem Klick auf „OK“.

4. Um das Backup zu validieren, fügen wir unserem Backupjob einen zweiten Schritt hinzu. Dazu öffnen wir wie schon in Schritt 3 den „New Job Step“-Dialog und nennen diesen Schritt „Backupverification“. Der verwendete Befehl zur Verifikation des Backups lautet:

RESTORE VERIFYONLY FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Backup\WC.bak'; GO
Schritt 4.png

Mit einem Klick auf „OK“ fügen wir dem Backupjob auch diesen Schritt hinzu.

5. Die im „New Job“-Dialog angezeigte, vollständige Stepliste sollte nun folgendermaßen aussehen:

Schritt 5.png

6. Im nächsten Schritt definieren wir einen Zeitplan, nach dem dieser Backupjob regelmäßig durchgeführt werden soll. Dazu navigieren wir zunächst auf die Schedules Page und klicken auf den Button „New …“. Daraufhin öffnet sich das Fenster „New Job Schedule“. Hier benennen wir unseren Zeitplan mit dem Namen „Week Days“ und wählen alle Arbeitstage (Montag bis Freitag) aus. Mit den auf dieser Seite getroffenen Einstellungen definieren wir, dass alle Jobs, die nach diesem Zeitplan durchgeführt werden, an allen Arbeitstagen um 0 Uhr gestartet werden.

Schritt 6.png

Mit einem Klick auf „OK“ wird dieser Zeitplan in die Schedule-Liste unseres Backupjobs übernommen.

7. Zuletzt klicken wir im Fenster „New Job“ auf „OK“. Damit wird der Auftrag gesichert und erstmals ausgeführt.

Weitere Pages auf dieser Seite sind „Alerts“, „Notifications“ und „Targets“. Wie schon in der Einführung zum Thema SQL Server Agent beschrieben, lassen sich Jobs auch in Abhängigkeit von auftretenden Warnungen ausführen. Dies lässt sich im Bereich „Alerts“ bewerkstelligen. Im Bereich „Notifications“ könnten wir beispielsweise E-Mail-Benachrichtungen bei einer fehlerhaften oder erfolgreichen Beendigung des Jobs erstellen lassen. Zielserver werden beispielsweise für verteilte Aufträge verwendet.

Mit der Abarbeitung der Schritte 1 – 7 haben wir einen automatisierten Backupjob, der ein vollständiges Backup der Datenbank „WorldCup2018“ an jedem Arbeitstag durchführt und zudem verifiziert, erfolgreich erstellt.

Für Interessierte: Das SSMS bietet uns die Möglichkeit, den eben erstellten Auftrag als Skript ausgeben zu lassen. Dies können wir tun, indem wir mittels Rechtsklick auf den Namen unseres Jobs im Bereich „SQL Server Agent > Jobs“ das Kontextmenü öffnen und die Option „Script Job as > CREATE To > New Query Editor Window“ auswählen.