backup(full,diff,log)备份并清理过时备份
需求说明:每天备份数据库,但是备份文件长期积累不删除,极大的浪费磁盘空间,
针对该情况做了2个sp来解决
备份sp: dbo.dba_db_backup
可以做全备,差备,日志备
备份的目录格式 YYYYMMDD_FULL/DF/LOG
![](/assets/blank.gif)
![](/assets/blank.gif)
/* editor:Lynn function desc: backup full/diff database backup log backupdir @bakpath\YYYYMMDD_FULL/DF/LOG exec demo: EXEC DBO.dba_db_backup EXEC DBO.dba_db_backup N'lynntest,SSB3',N'D:\DbBak',N'FULL' */ create PROC DBO.dba_db_backup@db_list nvarchar(2000)=NUll -- NULL:all db except system db, N'lynntest,SSB3',@bakpath nvarchar(1000)=N'D:\BackupDB' --N'D:\bak',@backupType nvarchar(4)=N'FULL' --DEFAULT: FULL --FULL全备份 DF差异备份 LOG日志备份 AS BEGIN set nocount on; /*select @db_list=N'lynntest,SSB3',@bakpath =N'D:\bak',@backupType=N'LOG' --DB全备份 DF差异备份 LOG日志备份 */declare @dblist table (id int identity(1,1), db sysname)IF @db_list IS NOT NULLBEGINinsert into @dblist(db)select T.namefrom(SELECTname = PARSENAME(LTRIM(RTRIM(T.c.value('.[1]', 'sysname'))),1)FROM(SELECTdatabase_name_list = CONVERT(xml,N'<c><![CDATA[' + REPLACE(REPLACE(REPLACE(@db_list,CHAR(13),CHAR(10)),CHAR(10),N','),N',',N']]></c><c><![CDATA[')+ N']]></c>'))REQCROSS APPLY REQ.database_name_list.nodes('/c/text()') T(c) ) Tinner join sys.databases don T.name=d.name and d.state=0WHERE T.name > N''ENDELSEBEGINinsert into @dblist(db)select namefrom sys.databases with(nolock)WHERE state in ( 0 ) --OFFLINE--==============you can filter the system database or notand name not in( 'master', 'tempdb', 'model', 'msdb','distribution' );ENDdeclare @currnpath NVARCHAR(520),@subpath nvarchar(200)select @subpath=LTRIM( RTRIM(convert( char(8) ,getdate() ,112)+'_'+@backupType)),@currnpath= @bakpath+'\'+@subpath+'\' --RTRIM( @bakpath+'\'+@subpath+'\')DECLARE @temp table(subdirectory varchar(500),depth int)INSERT @tempexec xp_dirtree @bakpath--select * from @tempIF NOT EXISTS(SELECT *FROM @temp where LTRIM( RTRIM(subdirectory))=@subpath)--创建目录EXEC master.sys.xp_create_subdir @currnpathDECLARE @tunid int,@db sysname,@sql nvarchar(max)while exists(select * from @dblist)BEGINselect @tunid=0,@db=null,@sql=nullselect top(1) @tunid =id,@db=db from @dblist select @sql='BACKUP '+ CASE @backupType WHEN N'log ' THEN N'LOG 'ELSE N'DATABASE 'END+ @db +char(10)+'TO DISK =N'''+@currnpath+@db+CASE @backupType WHEN N'log' THEN N'.trn'' 'ELSE N'.bak'' 'END+CHAR(10)+CASE @backupType WHEN N'DF' THEN N' WITH DIFFERENTIAL, COMPRESSION 'ELSE N' WITH COMPRESSION 'END--PRINT @sqlEXEC(@sql)DELETE TOP(1) @dblistWHERE ID=@tunidENDEND
View Code
删除文件目录sp:dbo.dba_db_backup_delDir
删除以上sp生成的格式化目录 ,
![](/assets/blank.gif)
![](/assets/blank.gif)
/* editor:Lynn function dec:delete expired backup dirs exec demo:exec dba_db_backup_delDir N'D:\DbBak' ,N'FULL',1 */ alter proc dbo.dba_db_backup_delDir@bakpath nvarchar(1000)=N'D:\BackupDB' --N'D:\bak',@backupType varchar(10)=N'FULL' --DEFAULT: FULL --FULL全备份 DF差异备份 LOG日志备份,@n int=2 --保留最近n次相关备份 AS BEGINSET NOCOUNT ONif object_id('tempdb.dbo.#temp','U') IS NOT NULLDROP TABLE #tempCREATE table #temp (id int identity(1,1),subdirectory varchar(500),depth int,backupType varchar(10),backupdate date,isdel int)INSERT #temp(subdirectory,depth)exec xp_dirtree @bakpathupdate #tempset subdirectory=rtrim(ltrim(subdirectory))update #tempset backupType=right(subdirectory,len(subdirectory)-9),backupdate=cast(left(subdirectory,8) as date)delete #tempwhere backupType<>@backupTypedeclare @sql nvarchar(max)select @sql=N'update a set isdel=0from #temp ainner join (select top (@top) id from #temp where backupdate<=getdate() and backupType=@backupType1 order by backupdate desc)bon b.id=a.id'exec sp_executesql @sql,N'@top int,@backupType1 varchar(10)', @top=@n,@backupType1=@backupType--select * from #tempdeclare @errortb table(id int identity(1,1),errorinfo nvarchar(200))declare @turnid int,@subdirectory varchar(500)while exists (select * from #temp where isdel is null)beginselect @turnid=null,@subdirectory=nullselect top(1) @turnid=id ,@subdirectory=subdirectory from #temp where isdel is null--print @bakpath +'\'+ @subdirectoryinsert into @errortb(errorinfo)EXEC('xp_cmdshell ''rd /s/q ' + @bakpath +'\'+ @subdirectory + '''')delete #temp where id=@turnid end--select * from @errortb order by idEND
View Code
note:
1 创建JOb定时备份和清理目录,可以采用 dbo.dba_db_backup调用dbo.dba_db_backup_delDir简化job创建
2 sp中有创建和删除目录,所以需要开启高级选项
![](/assets/blank.gif)
![](/assets/blank.gif)
-- 允许配置高级选项 EXEC sp_configure 'show advanced options', 1 GO -- 重新配置 RECONFIGURE GO -- 启用xp_cmdshell EXEC sp_configure 'xp_cmdshell', 1 GO --重新配置 RECONFIGURE GO
View Code
转载于:https://www.cnblogs.com/llgg/p/5780892.html
backup(full,diff,log)备份并清理过时备份相关推荐
- (2.15)备份与还原--使用作业备份、清理过期备份、清理历史记录、事务日志是否备份过...
一.建立作业备份数据库 打开SQL SERVER MANAGEMENT STUDIO,启动SQL SERVER代理服务(注意在"控制面板-管理工具-服务"中设置SQL SERVER ...
- 【Sharepoint】 备份与清理Audit log
Sharepoint Audit Log 是什么? 就是一个记录用户访问操作Sharepoint的日志的功能. 是给管理员了解当前网站的访问状况, 哪些帐号经常访问哪些站点. 设置方式是进入到Si ...
- Oracle 12c数据库定时备份和清理脚本
RMAN除了可以像sqlplus一样通过SSH执行命令之外,还可以与crontab配合执行预先写好的脚本,实现Oracle数据库的定时自动备份和清理备份数据和归档日志. 本文基于Oracle 12c ...
- Centos7搭建Java环境,并设置项目自启动脚本、定时数据库备份/日志清理脚本
开发环境下载,提供nginx-1.12.2.jdk-8u162.Jenkins下载 建个文件夹,作为开发环境存放路径 cd /usr mkdir developmentEnvironment cd / ...
- oracle清理历史备份,oracle数据库备份删除操作
1.删除多余的归档日志 在ORACLE10G中,默认的归档路径为$ORACLE_BASE/flash_recovery_area.对于这个路径,ORACLE有一个限制,就是默认只能有2G的空间给归档日 ...
- Veeam Backup Replication试用(三):配置备份(Backup Job)与恢复(Restore)
近期veeam 9.5出来了,尝试安装使用,找到老管网络日志相关的文档,分享一下. 转自老管网络日志http://guanjianfeng.com/archives/1159347 ========= ...
- 激活黑群晖Synology Active Backup for Business,黑群晖系统备份软件激活,亲测有效
版本:DSM 6.1.7-15284 DS3617xs 一般都是通用的,除了7.0没有测试,亲测有效 刷这个系统很简单,全套程序下载地址如下: 链接:https://pan.baidu.com ...
- windows server : windows server backup 服务(自动定时备份,一次备份,恢复),安装搭建恢复(图形化)
实验环境: Windows server 2016 ---- 搭建安装环境 图形化使用backup(自动,一次) 恢复 1.搭建安装环境 虚拟机需要需要多加一个硬盘进行备份,硬盘大小的选择,我推荐和要 ...
- Veeam Backup Replication 11 - 虚拟、物理和云备份软件
借助全新 v11 消除数据丢失和勒索软件威胁 发挥数据保护平台的更大价值 Veeam® Backup & Replication® 是一款可靠的四合一解决方案,将备份.复制副本.存储快照和 C ...
最新文章
- mxnet加载resnet,进行预测
- 学会骗人,是重要的生存技能!
- [git]git忽略文件
- VS Code 中有哪些好用的 Azure 插件?
- 943. Find the Shortest Superstring
- 你尝试登录的服务器语言不通,七骑士国内服务器正式上线后,各种登录问题解决方案汇总...
- Docker学习总结(32)——Dockerfile指令详解
- flutter listview 滚动到底部_Flutter系列之Flex布局详解
- jq方法中 $(window).load() 与 $(document).ready() 的区别
- swift - enumerated()
- jvm gc垃圾回收情况
- 2020级CHD新生训练题题解
- 如何创建您自己的I爱纽约T恤
- OpenGL超级宝典(第7版)笔记11 帧缓存运算 计算着色器 清单 3.13
- 有关window的history和location的使用
- 关于“四舍六入五成双/四舍六入五留双/四舍六入五单双”等口诀的实例研究
- 《电子工艺训练》课程笔记(四)————印制电路板设计
- opencv 单个圆形孔和针检测
- html5 canvas模拟的爆炸效果
- Qt实现QChart实时绘制动态曲线,代码可复制移植。