Я настраиваю новый способ создания и удаления резервных копий в наших внутренних средах. Пространство на серверах является большой проблемой, поэтому мне действительно нужно найти способ сделать резервную копию и удалить старый для каждой базы данных, процедурно.
Мне пришла в голову идея использовать sp_MSforeachdb и просто сделать резервную копию. В случае успеха он удалит более старую резервную копию, которая была сделана накануне. (мы делаем 1 резервное копирование за ночь).
DECLARE @DBOPurpose Varchar(15)
DECLARE @Drive Varchar(1)
Set @DBOPurpose = 'Omnilabs'
DECLARE @command varchar(Max)
Select @command = '
If Exists (Select *
from sys.databases
where name like ''%?''
and name like ''%'+@DBOPurpose+'%'')
BEGIN
EXECUTE master.dbo.xp_create_Subdir '+@Drive+':\SQLBACKUP\'+@DBOPurpose+'
GO
BACKUP DATABASE [?] TO DISK = '+@Drive+':\SQLBackup\'+@DBOPurpose+'_Select Cast(Cast(Year(Getdate())As Varchar(150))+''_''+Cast(month(Getdate())As Varchar(150))+''_''+Cast (Day(Getdate()) As Varchar(150))+''_''+ cast(DATEPART(hour, GETDATE()) as varchar) + '''' + cast(DATEPART(minute, GETDATE()) as varchar)+ '''' + cast(DATEPART(Second, GETDATE()) as varchar)+ ''.bak'' As varchar(150))
END
Print N''TEST''
'
--Select @Command
EXEC sp_MSforeachdb @command
Я ожидал, что выполнение Select @Command
действительно покажет мне что-то, но это ноль. Когда я запускаю это, он просто пишет: «Команды выполнены успешно». через секунду, что не имеет никакого смысла.