Ich habe einen Job in SQL 2008, der einen gespeicherten Prozess ausführt, um alle Datenbanken zu sichern. Dies wird täglich über den SQL Server Agent-Job ausgeführt.
Es wird jeden Tag mit Erfolg beendet, aber an manchen Tagen wird es erst nach dem Sichern einiger Datenbanken mit Erfolg beendet. Es kann jedes Mal eine andere Anzahl von Datenbanken sein. An den meisten Tagen werden alle Datenbanken erfolgreich gesichert, manchmal jedoch 2 erfolgreich, manchmal 5 usw.
Ich sehe keine Fehler im Jobverlauf, in der Ereignisanzeige oder im SQL Server-Protokoll.
Sicherungen finden auf einer lokalen Festplatte statt, obwohl der Ordner eine "Verbindung" zu einem Ordner auf einem erweiterbaren Speichervolume ist.
Das Betriebssystem ist Windows 2003 64-Bit, auf dem SQL Server 2008 Web Edition 64-Bit als virtuelle Maschine ausgeführt wird, die auf dem Vmware ESXi 5-Host ausgeführt wird.
Gespeicherte Prozedur:
ALTER PROCEDURE [dbo].[backup_all_databases]
@path VARCHAR(255)='c:\backups\'
AS
DECLARE @name VARCHAR(50) -- database name
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name
DECLARE @dbIsReadOnly sql_variant -- is database read_only?
DECLARE @dbIsOffline sql_variant -- is database offline?
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('tempdb')
AND version > 0 AND version IS NOT NULL
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '.bak'
SET @dbIsReadOnly = (SELECT DATABASEPROPERTY(@name, 'IsReadOnly')) -- 1 = Read Only
SET @dbIsOffline = (SELECT DATABASEPROPERTY(@name, 'IsOffline')) -- 1 = Offline
IF (@dbIsReadOnly = 0 OR @dbIsReadOnly IS NULL) AND @dbIsOffline =0
BEGIN
BACKUP DATABASE @name TO DISK = @fileName WITH INIT
WAITFOR DELAY '00:00:20'
END
FETCH NEXT FROM db_cursor INTO @name
END
CLOSE db_cursor
DEALLOCATE db_cursor
Irgendwelche Vorschläge bitte?