DWH-ETL-OLAP
October 21, 2019

Создание бекапов simple restore model DB за 3 периода: вчера, последнее воскресение, последнее воскресение месяца

1я процедура. туда передается подпапка, в которую бекапятся все базы, кроме системных.

CREATE PROCEDURE [dbo].[sp_backup_databases_to_subfolder]
(@subfolder nvarchar(64) )
--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 = 'K:\Backup\';
-- 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 + @subfolder + @name + '_FULL' + /*'_' + @fileDate +*/ '.bak';
      -- Backup the database.
      BACKUP DATABASE @name TO DISK = @fileName WITH COMPRESSION, INIT, NOSKIP, NOUNLOAD;
      -- 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;

2я процедура. Запускает 3 раза 1ю процедуру с разные параметрами подпапок

CREATE PROCEDURE [dbo].[sp_backup_databases_3times]
AS
--yesterday
EXEC adm.dbo.sp_backup_databases_to_subfolder ''
--Sunday
IF DATENAME(dw,GETDATE()) = 'Sunday'
EXEC adm.dbo.sp_backup_databases_to_subfolder 'Weekly\'
--Last sunday of month
IF	CAST(getdate() as date) = 
	CAST(DATEADD(day,DATEDIFF(day,'19000107',DATEADD(month,DATEDIFF(MONTH,0,GETDATE()),30))/7*7,'19000107') as date)
EXEC adm.dbo.sp_backup_databases_to_subfolder 'Monthly\'