Fragensteller
Auftrag zur Datenbanksicherung endet erfolgreich, sichert aber nicht alle Datenbanken

Frage
-
Moin,
ich habe unten stehendes Skript entwickelt, um Datenbanken und Logfiles zu sichern und lasse das in einem Auftrag täglich ausführen. Der Auftrag endet immer erfolgreich, aber es wird nicht jede Datenbank verarbeitet.
Ich habe die Ausgaben in eine Datei ausgegeben und auch dort ist kein Fehler zu erkennen. Das Skript endet einfach irgendwann, wenn es mit einer der Datenbanken fertig ist. Das ist nicht immer dieselbe, sondern wahllos. Es kann nach der ersten Datenbank enden oder nach der vorletzten. Einmal ist das Skript auch komplett durchgelaufen und hat alles gesichert.
Woran kann das liegen?Wir verwenden MSSQL 2005.
use master declare @ID int declare @name nvarchar(128) declare @recoverymodel tinyint declare @befehl nvarchar(4000) declare @backupDate varchar(20) declare @deleteDate datetime declare @verzeichnisBackup nvarchar(4000) declare @verzeichnisBackupDatenbank nvarchar(4000) declare @verzeichnisBackupDatenbankLog nvarchar(4000) declare @aufbewahrungsdauer int set @verzeichnisBackup = 'F:\Sicherungen' set @aufbewahrungsdauer = 5 set @backupDate = convert(varchar(100), getdate(), 20) set @backupDate = replace(@backupDate, ':', '') set @backupDate = replace(@backupDate, '-', '') set @backupDate = replace(@backupDate, ' ', '') set @deleteDate = DATEADD(day,-@aufbewahrungsdauer,GETDATE()) --veraltete Dateien löschen set @befehl = N'EXECUTE master.dbo.xp_delete_file 0,' + @verzeichnisBackup + ',N''bak'',' + cast(@deleteDate as varchar) + ',1' print @befehl EXEC master.dbo.xp_delete_file 0,@verzeichnisBackup,'bak',@deleteDate,1 --Alle Datenbanken durchgehen declare DBCursor Cursor for select database_id, name, recovery_model from sys.databases where name <> N'tempdb' order by name open DBCursor fetch next from DBCursor into @ID, @name, @recoverymodel while @@fetch_status = 0 begin print 'Verarbeite Datenbank ' + @name --Unterordner anlegen set @verzeichnisBackupDatenbank = @verzeichnisBackup + '\' + @name EXEC master.dbo.xp_create_subdir @verzeichnisBackupDatenbank --Datenbank sichern set @befehl = N'Backup Database [' + @name + '] to disk = N''' + @verzeichnisBackupDatenbank + '\' + @name + '_backup_' + @backupDate + '.bak'' with retaindays = ' + cast(@aufbewahrungsdauer as varchar) + ', ' + 'noformat, noinit, skip, rewind, nounload, stats = 10, ' + 'name = N''' + @name + '_backup_' + @backupDate + '''' print @befehl EXEC (@befehl) --Log sichern if @recoverymodel <> 3 begin set @verzeichnisBackupDatenbankLog = @verzeichnisBackupDatenbank + '\log' EXEC master.dbo.xp_create_subdir @verzeichnisBackupDatenbankLog set @befehl = N'Backup Log [' + @name + '] to disk = N''' + @verzeichnisBackupDatenbankLog + '\' + @name + '_backup_Log.bak''' print @befehl EXEC (@befehl) end fetch next from DBCursor into @ID, @name, @recoverymodel end close DBCursor deallocate DBCursor
- Bearbeitet Ottersberg Montag, 16. September 2013 06:33
Alle Antworten
-
Hallo!
Da Du keinerlei Fehlerbehandlung im Skript hast, ist es schwierig die Ursache zu ermitteln.
Hast Du im Errorlog des SQL Servers keine Meldungen?
Warum verwendest Du noch eine uralte Version, die nicht mehr supported wird? Welches SP hast Du denn da drauf?
Wenn es nie richtig funktioniert hat, wie habt ihr dann in den vergangenen Jahren gesichert?
Kennst Du die Skripte von Ola Hallengren?
Einen schönen Tag noch,
Christoph Muthmann
Microsoft SQL Server MVP - Blog -
Moin,
zu deinen Fragen:
Da Du keinerlei Fehlerbehandlung im Skript hast, ist es schwierig die Ursache zu ermitteln.
Wenn ich "Ausgabe in eine Datei" mache, sollten Fehler dort nicht mit ausgegeben werden?
Hast Du im Errorlog des SQL Servers keine Meldungen?
Nein. Dort steht dasselbe wie im Log. Bis zu einer der Datenbanken funktioniert die Sicherung und dann kommen keine weiteren Meldungen.
Warum verwendest Du noch eine uralte Version, die nicht mehr supported wird? Welches SP hast Du denn da drauf?
Umstellung auf 2012 ist für Frühjahr geplant. Der Extended Support läuft ja noch. SP4 ist installiert.
Für die Umstellung hatten wir jetzt kürzlich erstmalig eine Schulung für MSSQL. Aus dieser Schulung stammt das Skript. Ich habe es auf unsere Verzeichnisstruktur angepasst und die Sicherung der Logfiles hinzugefügt.Wenn es nie richtig funktioniert hat, wie habt ihr dann in den vergangenen Jahren gesichert?
Die Sicherung lief über einen Wartungsplan. Das hat immer gut funktioniert. Die Logfiles wurden hin und wieder manuell gelöscht mit truncate_only, aufgrund fehlenden besseren Wissens. Eigentlich wollte ich die Sicherung erst mit 2012 überarbeiten, aber dann waren letztens die Platten voll und ich habe bereits jetzt damit begonnen.
Kennst Du die Skripte von Ola Hallengren?
Nein die kannte ich noch nicht. Ich werde mir das mal ansehen und melde mich wieder.