Eu tenho um trabalho no SQL 2008 que executa um processo armazenado para fazer backup de todos os bancos de dados. Isso é executado diariamente através do trabalho do agente do servidor sql.
É encerrado com êxito todos os dias, mas alguns dias é encerrado com sucesso somente após o backup de alguns bancos de dados. Pode ser um número diferente de bancos de dados a cada vez. Na maioria dos dias, ele faz backups com êxito de todos os bancos de dados, mas às vezes 2 backups com êxito, às vezes 5, etc.
Não vejo nenhum erro no histórico de tarefas, no visualizador de eventos ou no log do servidor sql.
Os backups estão ocorrendo em um disco local, embora a pasta seja uma "junção" para uma pasta em um volume de armazenamento expansível.
O sistema operacional é o Windows 2003 64 bits executando o Sql Server 2008 web edition de 64 bits como uma máquina virtual em execução no host Vmware ESXi 5.
Procedimento armazenado:
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
Alguma sugestão, por favor?