
Nehmen wir an, ich habe eine tägliche Wartungsaufgabe, die:
- Sichert alle Datenbanken und dann
- entfernt Backups, die älter als 3 Tage sind.
Nehmen wir nun an, das erste Backup am Tag 1, beginnend um 10:00 Uhr, führt zu folgenden Dateien
db1.bak 2012-01-01 10:04
db2.bak 2012-01-01 10:06
Nehmen wir nun an, dass am vierten Tag der erste Schritt der Wartungsaufgabe (Sicherung der Datenbanken) zufällig um 10:05 Uhr abgeschlossen wird. Wird SQL Server
- db1.bak löschen und db2.bak behalten (wäre logisch, könnte aber für den Benutzer überraschend sein) oder
- beide behalten oder
- beide entfernen?
Antwort1
Der Wartungsplan entfernt Sicherungsdateien zu dem Zeitpunkt, zu dem die Bereinigungsaufgabe gestartet wird, da er zu diesem Zeitpunkt das SQL generiert. In den drei von Ihnen beschriebenen Optionen würde also der erste Fall eintreten.
Ich habe einen Beispielplan erstellt, der Dateien entfernt, die älter als 3 Tage sind, und den Job ausgeführt. Aus der Protokollausgabe unten können Sie ersehen, dass der Job am 07.05.2013 um 12:25 Uhr ausgeführt wurde und Dateien entfernt hat, die älter als 12:25 Uhr am 04.05.2013 sind. Das T-SQL unten zeigt einen ungefähren Befehl, wie das Datum generiert werden könnte.
query:
select GETDATE()
select DATEADD(DAY, -3, GETDATE() )
results:
-----------------------
2013-05-07 12:51:52.073
(1 row(s) affected)
-----------------------
2013-05-04 12:51:52.073
(1 row(s) affected)
Wartungsplan: Wartungsplan Dauer: 00:00:02 Status: Erfolgreich. Details:
Datenbank über lokale Serververbindung sichern. Datenbanken: DBA-Typ: Vollständig. Vorhandene anhängen. Aufgabenstart: 2013-05-07T12:25:03. Aufgabenende: 2013-05-07T12:25:05. Erfolg. Befehl: BACKUP DATABASE [DBA] TO DISK = N''N:\Apps\MSSQL10.INSTANCE\MSSQL\Backup\DBA_backup_2013_05_07_122503_6738713.bak'' WITH NOFORMAT, NOINIT, NAME = N''DBA_backup_2013_05_07_122503_6738713'', SKIP, REWIND, NOUNLOAD, STATS = 10
GEHEN
Wartungsbereinigung bei lokaler Serververbindung. Datenbank bereinigen. Sicherungsdateien. Alter: Älter als 3 Tage. Aufgabenbeginn: 2013-05-07T12:25:05. Aufgabenende: 2013-05-07T12:25:05. Erfolg. Befehl: EXECUTE master.dbo.xp_delete_file 0,N''N:\Apps\MSSQL10.INSTANCE\MSSQL\Backup'',N''BAK'',N''2013-05-04T12:25:05''
GEHEN