Сегодня будем поднимать историческую информацию о выполненных резервных копиях на одном из SQL серверов. Раскапывать логи в графической консоли очень долго, поэтому воспользуемся методикой, которая позволяет сильно сэкономить время и нервы. Первым делом нужно собрать информацию по резервным копиям для всех баз данных. После отработки скрипта (выполняется он в контексте анализируемого сервера из SQL Management Studio) вы получите табличку с информацией о базе данных и временем последнего полного бэкапа. SELECT db.name AS [DATABASE], max(backup_finish_date) AS [LastBackupDate] FROM [master].[dbo].[sysdatabases] db LEFT OUTER JOIN [msdb].[dbo].[backupset] bs ON bs.database_name = db.name AND bs.type = 'D' GROUP BY db.name ORDER BY db.name
|
Для наглядности можно запросить более подробную информацию о том когда была полная копия и дифференциальная плюс количество дней прошедших с момента резервного копирования. В случае если с момента последней полной копии прошло более 7 дней скрипт выведет предупреждение 'Possible Problem' для полной копии и при двух днях для разностной.
SELECT s.name AS database_name, backup_type = CASE WHEN b.type = 'D' THEN 'Full' WHEN b.type = 'I' THEN 'Diff' END, MAX(b.backup_start_date) AS last_backup_start_time, DATEDIFF(d, MAX(b.backup_start_date), getdate()) AS days_since_last_backup, STATUS = CASE WHEN b.type = 'D' AND DATEDIFF(d, MAX(b.backup_start_date), getdate()) <= 7 THEN 'OK' WHEN b.type = 'D' AND DATEDIFF(d, MAX(b.backup_start_date), getdate()) <= 7 THEN 'Possible Problem' WHEN b.type = 'I' AND DATEDIFF(d, MAX(b.backup_start_date), getdate()) <= 2 THEN 'OK' WHEN b.type = 'I' AND DATEDIFF(d, MAX(b.backup_start_date), getdate()) <= 2 THEN 'Possible Problem' WHEN MAX(b.backup_start_date) IS NULL THEN 'No Backup Exists' END FROM sys.DATABASES s LEFT JOIN msdb..backupset b ON s.name = b.database_name WHERE s.name <> 'master' AND s.name <> 'model' AND s.name <> 'msdb' AND s.name <> 'tempdb' GROUP BY s.name, b.type ORDER BY s.name
|
Для получения подробной информации о размере бэкапов, местоположении файлов, времени выполнения и пр. используйте скрипт который представлен ниже. SELECT msdb.dbo.backupmediafamily.physical_device_name AS FILE_LOCATION, msdb.dbo.backupset.database_name AS DATABASE_NAME, CAST(CAST(msdb.dbo.backupset.backup_size / 1000000 AS INT) AS VARCHAR(14))+ '' + 'MB' AS BACKUP_SIZE, CAST(DATEDIFF(second, msdb.dbo.backupset.backup_start_date, msdb.dbo.backupset.backup_finish_date) AS VARCHAR(4)) + ''+ 'Seconds' AS BACKUP_TIME_TAKEN, msdb.dbo.backupset.backup_start_date AS BACKUP_DATE_TIME, CASE msdb.dbo.backupset.[type] WHEN 'D' THEN 'Full' WHEN 'I' THEN 'Differential' WHEN 'L' THEN 'Transaction Log' END AS BACKUP_TYPE FROM msdb.dbo.backupset INNER JOIN msdb.dbo.backupmediafamily ON msdb.dbo.backupset.media_set_id = msdb.dbo.backupmediafamily.media_set_id
|
|