Процедура удаления Backup'ов в MSSQL 2005
Добавлено: 30 ноя 2009, 06:52
Доброго времени суток!
Суть вопроса такова: Поставлена задача - удалить все резервные копии бд, которые были созданы за неделю до рабочей даты, кроме копий за 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
___________________________________________________
Вопрос: можно ли осуществить эту процедуру БЕЗ ИСПОЛЬЗОВАНИЯ ЦИКЛА?
Суть вопроса такова: Поставлена задача - удалить все резервные копии бд, которые были созданы за неделю до рабочей даты, кроме копий за 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
___________________________________________________
Вопрос: можно ли осуществить эту процедуру БЕЗ ИСПОЛЬЗОВАНИЯ ЦИКЛА?