DWH-ETL-OLAP
October 21, 2019

Процедура автоматического создания новых и очистки старых бэкапов БД

Процедура автоматического создания новых и очистки старых бэкапов БД, в формате простой модели восстановления. То, что нужно для баз ХД.

При условии если у вас бекапы создаются "шлейфом", т.е. каждый день, и удаляются по истечению определенного срока (2 недели).

CREATE PROCEDURE sp_backup_databases
--exec sp_backup_databases
as
DECLARE @name VARCHAR(50); -- Database name
DECLARE @path VARCHAR(256); -- Path for backup files
DECLARE @fileName VARCHAR(256); -- Filename for backup
DECLARE @fileDate VARCHAR(20); -- Used for file name
DECLARE @DeleteDate DATETIME =DATEADD(wk,-2,GETDATE()); -- Cutoff date
-- Path to backups.
SET @path = 'E:\Backups\';
-- Get date to include in file name.
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112);
-- Dynamically get each database on the server.
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.sys.databases
WHERE name NOT IN ('master','model','msdb','tempdb');
OPEN db_cursor;
FETCH NEXT FROM db_cursor INTO @name;
-- Loop through the list to backup each database.
WHILE @@FETCH_STATUS = 0
BEGIN 
      -- Build the path and file name.
      SET @fileName = @path + @name + '_' + @fileDate + '.BAK';
      -- Backup the database.
      BACKUP DATABASE @name TO DISK = @fileName WITH INIT;
      -- Loop to the next database.
      FETCH NEXT FROM db_cursor INTO @name;
END 
-- Purge old backup files from disk.
EXEC master.sys.xp_delete_file 0,@path,'BAK',@DeleteDate,0;
-- Clean up.
CLOSE db_cursor;
DEALLOCATE db_cursor;
GO