博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server 备份数据库到指定路径,任务实现
阅读量:5917 次
发布时间:2019-06-19

本文共 2163 字,大约阅读时间需要 7 分钟。

--Description:备份指定数据到指定路径,第一次完整备份、每月1号完整备份、每周一完整,每天增量备份

--====================================
ALTER procedure [dbo].[BackupDatabase]
@DatabaseName nvarchar(50),
@BackupPath varchar(200),
@IsDelLog int --1表示删除日志
as
declare @sql nvarchar(500);declare @dateName nvarchar(50);
declare @ClareSign int;set @ClareSign=1;
set @dateName='_'+SUBSTRING(replace(CONVERT(char(10),getdate(),21),'-',''),3,6);
if(not exists(select top 1 1 from msdb.dbo.backupset where database_name=@DatabaseName))
begin
 set @sql='BACKUP DATABASE '+@DatabaseName+' TO DISK='''+@BackupPath+'f_'+@DatabaseName+@dateName+'.bak'' WITH FORMAT'
 set @ClareSign=0;
end
else if(DATEPART(DAY,getdate())=1)
begin
 set @sql='BACKUP DATABASE '+@DatabaseName+' TO DISK='''+@BackupPath+'m_'+@DatabaseName+@dateName+'.bak'' WITH FORMAT'
end
else if(DATEPART(weekday,getdate())=2)
begin
 set @sql='BACKUP DATABASE '+@DatabaseName+' TO DISK='''+@BackupPath+'w_'+@DatabaseName+@dateName+'.bak'' WITH FORMAT'
end
else
begin
 set @sql='BACKUP DATABASE '+@DatabaseName+' TO DISK='''+@BackupPath+'d_'+@DatabaseName+@dateName+'.bak'' WITH differential'
 set @ClareSign=0;
end
exec (@sql)
--清除日志
if(@@ERROR=0 and @ClareSign=1 and @IsDelLog=1)
begin
 --简单模式
 exec('ALTER DATABASE '+@DatabaseName +' SET RECOVERY SIMPLE WITH NO_WAIT;ALTER DATABASE '+@DatabaseName +' SET RECOVERY SIMPLE')
 insert into ToolsDB.dbo.TestLog(LogName,Remark) values('备份日志测试',GETDATE())
 declare @FileName nvarchar(50)
 if OBJECT_ID('tempdb.dbo.##bt5') is not null drop table ##bt5 --清除全局临时表
 exec('select name into ##bt5 from '+@DatabaseName+'.dbo.sysfiles where groupid=0')
 declare cursor_name cursor for
 select name from ##bt5
 open cursor_name
 fetch next from cursor_name into @FileName
 while(@@FETCH_STATUS=0)
 begin
 exec('use '+@DatabaseName+' DBCC SHRINKFILE (N'''+@FileName+''' ,1, TRUNCATEONLY)')
 fetch next from cursor_name into @FileName
 end
 close cursor_name
 deallocate cursor_name
 
 --还原为完全模式
 exec('ALTER DATABASE '+ @DatabaseName+' SET RECOVERY FULL WITH NO_WAIT;ALTER DATABASE '+ @DatabaseName+' SET RECOVERY FULL')
 if OBJECT_ID('tempdb.dbo.##bt5') is not null drop table ##bt5 --清除全局临时表
end

转载于:https://www.cnblogs.com/itjeff/p/7084925.html

你可能感兴趣的文章
Spring4-JdbcDaoSupport-查询单列
查看>>
最小二乘法拟合圆公式推导及vc实现[r
查看>>
hadoop-env.sh配置
查看>>
DiscuzX2.5完整目录结构详细说明
查看>>
无法删除数据库副本或卸载邮件服务器
查看>>
windows 7下安装MySQL5.6
查看>>
ASP.NET 网站路径
查看>>
Android性能调优篇之探索垃圾回收机制
查看>>
oracle 卡住不动
查看>>
配置H3C交换机S5024PV2-EI
查看>>
MySQL多版本并发控制分析
查看>>
Domain Computer Boot Up Process and site info
查看>>
LINUX驱动手动绑定和解绑定
查看>>
运维自动化工具ansible学习笔记
查看>>
yum安装的rpm都去哪儿了?
查看>>
base虚拟机的安装 和 varnish(rhel6.5)
查看>>
视图、存储过程
查看>>
vsftp的默认配置文件说明
查看>>
Linux系统中profile、bshrc、bash_profile、profile.d文件的区分
查看>>
linux命令之谨小慎微
查看>>