News:
Microsoft SQL Server 2017 on Linux - Teil 2 - Einrichten von Wartungs- und Backupjobs auf der Linux Instanz

Die Einrichtung von Backups ist auf einem Linux System (mit Linux Clients) etwas aufwendiger, dafür lernt man einiges über die Struktur des SQL Server Agents.

Icon Unternehmen

Verbinden mit dem SQL Operations Studio
 

In Anknüpfung an den vorangegangen Artikel “SQL Server 2017 on Linux – Teil 1”, wollen wir nun die für einen SQL Server nötigen Standardaufgaben einrichten.

Zunächst verbinden wir uns zu der SQL Server Instanz, indem wir von einem Linux, Windows oder MacOS, das “SQL Operations Studio” starten. Die Verbindung kann natürlich auch mit anderen Clients, wie dem SQL Server Management Studio oder der sqlcmd, hergestellt werden.

Verbindung zu der SQL Server Instanz

Wenn die Verbindung zur Instanz steht, öffnen wir ein neues Query Fenster (STRG+N).
Zunächst fragen wir die schon konfigurierten Jobs des SQL Servers ab.

Das geht mit folgendem T-SQL Befehl:

EXEC sp_help_job

Nach einer frischen Installation sollten hier noch keine Jobs auftauchen.
 

Einrichtung des vollständigen Backups als Agentjob
 

Die wichtigsten regelmäßigen Aufträge, die auf jedem SQL Server ausgeführt werden sollten, sind Backup Jobs. Ein “must-have” sind dabei die vollständigen Backups, bei denen wir sowohl die Systemdatenbanken “master”, “msdb” und “model” als auch alle Benutzerdatenbanken sichern sollten.

Als sinnvoller Zeitplan hat sich dabei in der Praxis eine tägliche, einmalige Ausführung in den Nachtstunden bewährt.

Um SQL Server Agent Jobs mit dem SQL Operations Studio zu erstellen, müssen wir diese in T-SQL programmieren.

Auszug:

Auszug zur Einrichtung des vollständigen Backups

Nun wurde ein Job angelegt, der zwei Schritte beinhaltet. Im ersten Schritt werden die Systemdatenbanken “master”, “msdb” und “model” gesichert und in den angegebenen Backupordner gespeichert (mit einem Zeitstempel im Dateinamen). Im zweiten Schritt werden alle gefundenen User Datenbanken in den selben angegebenen Backup Ordner gesichert.
Das kann man natürlich noch variieren und unterschiedliche Ordner für System- und Benutzerdatenbanken angeben.
 

Einrichtung des Backups für die Transaktionslogdateien
 

Eine weitere, wichtige Aufgabe ist die Sicherung der Transaktionslogdateien von allen Datenbanken, die im vollständigen Wiederherstellungsmodus laufen. Wenn die Transaktionslogdateien nicht gesichert werden, werden diese mit der Zeit immer größer und führen schlimmstenfalls zu einem Ausfall durch eine volle Festplatte.

Deshalb müssen wir auch für dieses Backup einen neuen Job im SQL Operations Studio programmieren.

Auszug:

Auszug zur Einrichtung des Backups für die Transaktionslogdateien

Da nun beide Jobs erstellt wurden, können wir den folgenden Befehl erneut ausführen:

EXEC sp_help_job

Und sollten nun folgendes Ergebnis bekommen:

Exec Job

Da der Job “Backup – Log” fehlschlagen wird, solange noch kein Vollständiges Backup gemacht wurde, sollten wir den “Backup – Full” Job einmal manuell starten. Das geht mit folgenden Befehl:

EXEC sp_start_job @job_name = 'Backup – Full'

Falls wir nun folgendes Ergebnis bekommen, war alles OK und wir können im angegebenen Verzeichnis kontrollieren, ob der Job die Backupdateien angelegt hat:

Ergebnismeldung über Jobbeginn

Weitere Details über den Backupvorgang können wir uns mit folgendem Befehl anzeigen lassen:

USE master
GO
EXEC sp_readerrorlog
GO


Erstellen eines Cronjobs zum Aufräumen der Backupdateien
 

Nun werden regelmäßig Backups erstellt und in ein Verzeichnis auf dem Server gespeichert. Wir sollten uns nun darum kümmern, alte Backups aus dem Verzeichnis zu löschen, damit der Speicherplatz mit der Zeit nicht vollläuft.

Dafür nutzt man unter Linux am besten den Cron Daemon und erstellt einen entsprechenden Befehl in der “/etc/crontab”.

0 1 * * * root find /sql/sql_backup/*.BAK -mtime +14 -exec rm {} \;
10 1 * * * root find /sql/sql_backup/*.TRN -mtime +14 -exec rm {} \;

Beim ersten Befehl werden jeden Tag um 01:00 Uhr alle vollständigen Backups (*.BAK) aus dem Backupverzeichnis gelöscht, die älter als 14 Tage sind.
Beim zweiten Befehl werden jeden Tag um 01:10 Uhr alle Transaktionslogbackups (*.TRN) aus dem Backupverzeichnis gelöscht, die älter als 14 Tage sind.


Fazit
 

Die Einrichtung von Backups ist auf dem Linux System (mit Linux Clients) zunächst etwas aufwendiger, dafür lernt man einiges über die Struktur des SQL Server Agents.
Regelmäßige Backups sind das Wichtigste für einen SQL Server, aber natürlich nicht der einzige sinnvolle Wartungstask. Des Weiteren müssten noch Jobs für Index Defragmentierung, Statistikupdates und Log Cleanup erstellt werden. Das würde den Umfang dieses DBA Tipps allerdings übersteigen.

Tipp: Das ganz kann natürlich auch bequemer mit dem “SQL Server Management Studio” von einem Windows Client aus gemacht werden.