Задача сделать скрипт который будет проверять если ли фулл бэкап в заданной директории .
Процедура используется SQL Server Backup ola.hallengren
-- Объявляем переменные DECLARE @BackupDirectory NVARCHAR(500) = N'\\ARC03\sql_backup$'; DECLARE @DatabaseList NVARCHAR(MAX) = ''; -- Список баз для бэкапа DECLARE @DatabaseName NVARCHAR(128); DECLARE @LastFullBackupPath NVARCHAR(500); DECLARE @LastFullBackupDate DATETIME; -- Курсор для перебора всех пользовательских баз данных DECLARE db_cursor CURSOR FOR SELECT name FROM sys.databases WHERE database_id > 4 -- Исключаем системные базы данных AND state = 0; -- Только базы в режиме ONLINE -- Открываем курсор OPEN db_cursor; -- Перебираем базы данных FETCH NEXT FROM db_cursor INTO @DatabaseName; WHILE @@FETCH_STATUS = 0 BEGIN -- Получаем путь и дату последнего полного бэкапа для текущей базы SELECT TOP 1 @LastFullBackupPath = mf.physical_device_name, @LastFullBackupDate = bs.backup_finish_date FROM msdb.dbo.backupset bs INNER JOIN msdb.dbo.backupmediafamily mf ON bs.media_set_id = mf.media_set_id WHERE bs.database_name = @DatabaseName AND bs.type = 'D' -- 'D' означает полный бэкап ORDER BY bs.backup_finish_date DESC; -- Проверяем условия: -- 1. Полный бэкап отсутствует в указанной папке -- 2. Полный бэкап делался более 7 дней назад IF @LastFullBackupPath IS NULL OR @LastFullBackupPath NOT LIKE @BackupDirectory + '%' OR DATEDIFF(DAY, @LastFullBackupDate, GETDATE()) > 7 BEGIN -- Добавляем базу данных в список для бэкапа IF @DatabaseList <> '' BEGIN SET @DatabaseList = @DatabaseList + ','; END SET @DatabaseList = @DatabaseList + @DatabaseName; -- PRINT 'База данных ' + @DatabaseName + ' будет добавлена в список для бэкапа.'; END ELSE BEGIN -- PRINT 'Для базы данных ' + @DatabaseName + ' уже существует актуальный полный бэкап в указанной папке: ' + @LastFullBackupPath; PRINT 'Дата последнего полного бэкапа: ' + CONVERT(NVARCHAR, @LastFullBackupDate, 120); END -- Переходим к следующей базе данных FETCH NEXT FROM db_cursor INTO @DatabaseName; END; -- Закрываем и освобождаем курсор CLOSE db_cursor; DEALLOCATE db_cursor; -- Если есть базы для бэкапа, выполняем процедуру DatabaseBackup IF @DatabaseList <> '' BEGIN PRINT 'Выполняю полный бэкап для баз данных: ' + @DatabaseList; EXECUTE [dbo].[DatabaseBackup] @Databases = @DatabaseList, @Directory = @BackupDirectory, @BackupType = 'FULL', @Verify = 'Y', @Compress = 'Y', @CleanupTime = 312, @CleanupMode = 'AFTER_BACKUP', @CheckSum = 'Y', @LogToTable = 'Y', @DatabasesInParallel = 'Y'; -- Включаем параллельное выполнение для нескольких баз PRINT 'Полный бэкап успешно выполнен для баз данных: ' + @DatabaseList; END ELSE BEGIN PRINT 'Нет баз данных, требующих полного бэкапа.'; END