Процедура удаления Backup'ов в MSSQL 2005

Все, что вы хотели знать о программизме, но боялись спросить.
Ответить
Loopy
Зритель
Сообщения: 2
Зарегистрирован: 30 ноя 2009, 06:35

Процедура удаления Backup'ов в MSSQL 2005

Сообщение Loopy »

Доброго времени суток!
Суть вопроса такова: Поставлена задача - удалить все резервные копии бд, которые были созданы за неделю до рабочей даты, кроме копий за 1е число каждого месяца.

Код:
______________________________________
declare @FSO int
declare @hr int
declare @src varchar(255)
declare @desc varchar(255)

declare @filename varchar(50)
declare @data datetime
declare @WhileData datetime
declare @day int
declare @i int

set @i=1
set @data=DATEADD(day,-6,getdate())

EXEC @hr=sp_OACreate 'Scripting.FileSystemObject', @FSO OUT
if @hr<>0
begin
EXEC sp_OAGetErrorInfo @FSO, @src OUT, @desc OUT
select hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
return
end

while (@i<366)
begin
set @WhileData=DATEADD(day,-@i,@data)
set @day=cast(day(@WhileData) as int)
if (@day<>1)
begin
set @filename=cast(Day(@WhileData)as varchar(2))+cast(Month(@WhileData)as varchar(2))+cast(Year(@WhileData)as varchar(4))
set @filename='C:\Backup\'+@filename+'.bak'
EXEC @hr=sp_OAMethod @FSO, 'DeleteFile', NULL, @filename
if @hr<>0
begin
print ('Файлы были удалены')
return
end
end
set @i=@i+1
end

EXEC @hr=sp_OADestroy @FSO
if @hr<>0
begin
EXEC sp_OAGetErrorInfo @FSO, @src OUT, @desc OUT
select hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
return
end
___________________________________________________

Вопрос: можно ли осуществить эту процедуру БЕЗ ИСПОЛЬЗОВАНИЯ ЦИКЛА?
Loopy
Зритель
Сообщения: 2
Зарегистрирован: 30 ноя 2009, 06:35

Re: Процедура удаления Backup'ов в MSSQL 2005

Сообщение Loopy »

Backup'ы хранятся в виде ddmmyyyy.bak (30112009.bak, 1102009.bak и тп)
Аватара пользователя
freezer
Пользователь
Сообщения: 52
Зарегистрирован: 19 фев 2006, 01:49
Откуда: Surrey
Контактная информация:

Re: Процедура удаления Backup'ов в MSSQL 2005

Сообщение freezer »

Я бы создал два отдельныx мейнтнанс-плана, один для первого числа месяца, один для ежедневныx бекапов. Каждому плану дал бы по под-директории, куда бэкапать в {где xранятся бэкапы}. В оба плана добавил бы по шагу удаления бекапов старше опред. даты.

И даже (ш)кодить не надо тогда.
Ответить