Sql Server 备份文件管理(自动删除、过期)
2012-10-30 09:21
477 查看
对于 Sql Server 备份文件的管理,是十分有讲究的,特别是对于磁盘空间不大或者DB服务器过多的管理员来说,真的比较难。同时也比较重要,因为如果不定时清理,磁盘肯定会满,也会导致新的备份无法进行。因为。当然,人工整理备份文件最好,但是却不智能。没办法,只能通过程序来做了。
1. 利用 管理计划(Maintenance Plans) 中的备份文件过期策略和 清除维护 来管理备份
a. 设置备份过期详情:
b.根据磁盘空间,自动覆盖过期备份(Maintenance Plans(维护计划) 中的 清除维护(Maintenance Cleanup) )
Maintenance Plans(维护计划)的详情请参阅:Maintenance Plans(维护计划)详解
2. 利用 job 和 T-Sql 来删除备份文件
这个做法很悲剧,为什么呢?因为上面方法的 job 被禁用掉了,我还说,为什么找不到原因不能删除文件,不认真啊,不过这种查找方法还是蛮能学习的,希望对大家有所帮助
首先,google 一下,却发现,删除 备份文件的都是 这段 SQL:
--删除过期的备份文件
虽然这段 SQL 能达到效果,但是却十分的弱智,十分的不智能
1. 这短Sql 要手工的输入备份文件磁盘地址,要拼参数,拼参数,通用性十分不好,对于不同的 DB,都要再次手工更改,非常不智能!
2. 不能智能的得到哪个备份过期了
之后,我就对这段 Sql 语句进行了改造,改造成了更通用,更智能的删除备份文件:
虽然这种方法看起来很高科技,但是还推荐你使用第一种方法,除非的sql server 版本过老,不支持 维护计划,另外第二种方法需要开启 xp_cmdshell ,是需要重启 Sql Server 服务的
另外分享一条SQL语句,发现很多同学还不会用,蛮好的,但是不解释了,希望能帮助大家:
1. 利用 管理计划(Maintenance Plans) 中的备份文件过期策略和 清除维护 来管理备份
a. 设置备份过期详情:
b.根据磁盘空间,自动覆盖过期备份(Maintenance Plans(维护计划) 中的 清除维护(Maintenance Cleanup) )
Maintenance Plans(维护计划)的详情请参阅:Maintenance Plans(维护计划)详解
2. 利用 job 和 T-Sql 来删除备份文件
这个做法很悲剧,为什么呢?因为上面方法的 job 被禁用掉了,我还说,为什么找不到原因不能删除文件,不认真啊,不过这种查找方法还是蛮能学习的,希望对大家有所帮助
首先,google 一下,却发现,删除 备份文件的都是 这段 SQL:
--删除过期的备份文件
declare @str varchar(100),@dir varchar(100),@fileName varchar(30) set @dir='del D:\DBtext\jgj\DBABak\' set @filename=left(replace(replace(replace(convert(varchar,getdate()-15,20),'-',''),' ',''),':',''),8) set @str=@dir+'fullbak'+@filename+'*.bak' exec xp_cmdshell @str set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),' ',''),':',''),8) set @str=@dir+'diffbak'+@filename+'*.diff' exec xp_cmdshell @str set @filename=left(replace(replace(replace(convert(varchar,getdate()-8,20),'-',''),' ',''),':',''),8) set @str=@dir+'logbak'+@filename+'*.trn' exec xp_cmdshell @str
虽然这段 SQL 能达到效果,但是却十分的弱智,十分的不智能
1. 这短Sql 要手工的输入备份文件磁盘地址,要拼参数,拼参数,通用性十分不好,对于不同的 DB,都要再次手工更改,非常不智能!
2. 不能智能的得到哪个备份过期了
之后,我就对这段 Sql 语句进行了改造,改造成了更通用,更智能的删除备份文件:
-- use the cursor to delete the expire bak -- also could not user the cursor if you only want to delete the top 1 oldest bak -- @filePath : the expire bak's path declare fileCursor CURSOR for SELECT * from ( SELECT TOP 3 b.physical_device_name FROM [msdb].[dbo].[backupset] a,[msdb].[dbo].[backupmediafamily] b where a.media_set_id=b.media_set_id and [expiration_date]<GETDATE() order by [expiration_date] asc ) as filetable declare @filePath varchar(100) open fileCursor fetch next from fileCursor into @filePath while @@fetch_status=0 begin declare @delCmd varchar(100) set @delCmd =('del '+@filePath) -- user xp_cmdshell to delete the bak exec xp_cmdshell @delCmd fetch next from fileCursor into @filePath end close fileCursor deallocate fileCursor
虽然这种方法看起来很高科技,但是还推荐你使用第一种方法,除非的sql server 版本过老,不支持 维护计划,另外第二种方法需要开启 xp_cmdshell ,是需要重启 Sql Server 服务的
另外分享一条SQL语句,发现很多同学还不会用,蛮好的,但是不解释了,希望能帮助大家:
with #pager as ( select FollowID,COUNT(FollowID) as num from Table2 where FollowType =2 and FollowID>0 group by(FollowID) ) update Table1 set FollowCount=FollowCount+num from #pager as p,Table3 c where p.FollowID=c.ID
相关文章推荐
- Sql Server 备份文件管理(自动删除、过期)
- SQL Server ->> 调用系统内建扩展存储过程"master.dbo.xp_delete_file"删除过期备份文件
- 关于SQL Server自动备份无法删除过期的备份文件奇怪现象
- 关于SQL Server自动备份无法删除过期的备份文件奇怪现象
- Centos自动删除过期备份或者文件
- SQL SERVER 设置自动备份和删除旧的数据库文件
- SQL SERVER 设置自动备份和删除旧的数据库文件
- CMD批处理——forfiles命令使用,自动删除过期备份文件
- SQL SERVER 设置自动备份和删除旧的数据库文件
- sql server2008R2自动备份和自动删除过期bak文件
- sql server2008 自动备份和自动删除过期bak文件
- SQL SERVER 设置自动备份和删除旧的数据库文件
- SQL SERVER 自动备份并且自动删除过期备份
- SQL Server 2005 Express自动备份及删除旧备份文件
- sql server 用DOS 批处理 自动 定期删除 备份文件 包括完整备份和差异备份
- sql server2008R2自动备份和自动删除过期bak文件
- (windows)python脚本:自动备份并压缩文件,同时删除过期文件
- (windows)python脚本:自动备份并压缩文件,同时删除过期文件
- 【转载】SQLServer自动备份和自动删除过期文件
- SQL Server备份和删除过期备份文件的脚本