SqlServer 自动备份、自动删除7天前备份

时间:2021-05-06 14:35:38
-----sqlserver 数据异地备份   默认删除 七天前的数据
-----该代码可配置成SQLServer作业里做调度,或者配置成任务计划进行执行
----挂载异地盘符
exec master..xp_cmdshell
'net use w: "\\172.16.30.34\D$" "726" "/user:172.16.30.34\administrator"', no_output
/*--说明:
w: 是映射网络路径对应本机的盘符,与下面的备份对应
\\172.16.30.34\D$ 是要映射的网络路径
172.16.30.34\administrator
172.16.30.34是远程的计算机名,administrator是登陆的用户名
726 上面指定的administrator用户的密码
--*/
go go -----用游标:
declare @s nvarchar(200),@del nvarchar(200)
select @s='',@del='' declare datebak cursor for
select
[bak]='backup database '+quotename(Name)+' to disk =''w:'+Name+'_'+convert(varchar(8),getdate(),112)+'.bak'' with init',
-----自动删除七天前的备份文件
[del]='exec master..xp_cmdshell '' del w:'+Name+'_'+convert(varchar(8),getdate()-7,112)+'.bak'', no_output'
from master..sysdatabases where dbid=37 --这里查询出需要备份的数据库,可以一次性备份多个数据库
open datebak fetch next from datebak into @s,@del
while @@fetch_status=0
begin
----对于要删除的备份文件进行一场捕获(解决第一次部分的时候,执行失败的情况)
begin try
exec (@del)
end try
begin catch
if @@TRANCOUNT >0
BEGIN
print @del
END
end catch
exec(@s)
fetch next from datebak into @s,@del
end
close datebak
deallocate datebak
go
--删除映射
exec master..xp_cmdshell 'net use w: /delete' go