Eu tenho um relatório do SSRS que mostra a 'hora do último backup' ao lado de cada servidor na lista. Estou obtendo essas informações usando:
SELECT TOP 1 @@SERVERNAME as serverName,
sdb.Name AS DatabaseName,
MAX(backup_finish_date) AS LastBackUpTime
FROM sys.sysdatabases sdb
LEFT OUTER JOIN msdb.dbo.backupset bus ON bus.database_name = sdb.name
WHERE bus.type = 'D'AND bus.database_name NOT IN ('master', 'model', 'msdb', 'tempdb')
GROUP BY sdb.Name
ORDER BY LastBackUpTime DESC
O problema aqui é que se, por exemplo, 7 de 8 backups de banco de dados falharem em um trabalho, esse trabalho será sinalizado como 'falhou', mas o relatório mostrará que o último horário de backup foi naquele lote de backups com falha, que foi , pois está selecionando o backup de 8 que foi bem-sucedido.
Antes disso, eu estava encontrando o último tempo de execução do trabalho específico de uma tabela na qual inseri as informações sysjobs e sysjobservers, pois a maioria de nossos trabalhos de backup são trabalhos hallengren nomeados de forma idêntica. (Veja abaixo)
SELECT serverName
, MAX(CLastRunDateTime) AS CLastRunDateTime
FROM jobs
WHERE name = 'DatabaseBackup - USER_DATABASES - FULL'
O problema com isso é que existem alguns servidores que têm um trabalho com nome não hallengren, então envolve 'mexendo' para inserir o nome correto do trabalho. Há também alguns servidores que não possuem agente e têm backups feitos manualmente, portanto, o nome do trabalho não pode ser usado para selecionar a hora do último backup.
Como posso obter um tempo de backup no nível do servidor com o mínimo de 'brincar' possível. Eu entendo os problemas, pois alguns trabalhos hallengren excluem certos bancos de dados, então não pode ser baseado em 'quando todos os backups foram feitos neste servidor' - tem que ser por um lado específico do trabalho, por outro lado não específico do trabalho. Talvez algo como, quando o nome do trabalho é 'X', 'Y', 'Z', então encontre desta forma, quando o nome do trabalho NÃO EXISTE, então use o backup máximo para o último banco de dados? Mas isso parece envolver as brincadeiras que eu não quero.
Não tenho certeza. Gostaria de saber se alguém tem uma boa maneira de fazer isso.
No meu entendimento, você deseja que o trabalho relate os backups completos mais recentes em uma instância quando qualquer um deles não estiver atendendo aos seus limites.
Nesse caso, você pode optar por obter o backup COMPLETO mais recente de todos os bancos de dados e, em seguida, obter o valor mínimo desse conjunto de resultados.
Se você também precisar do nome do banco de dados com o backup completo bem-sucedido mais antigo
Eu não usaria estatísticas de execução de tarefas, pois elas podem retornar falsos positivos.
Além de verificar se as tarefas de backup funcionaram corretamente, você também deve validar seus backups restaurando-os em algum lugar.