加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql server 类型自动判断和条件检查的备份脚本

发布时间:2016-08-18 03:14:47 所属栏目:MsSql教程 来源:站长网
导读:根据自己环境自定义了一个备份脚本! 说明: 使用方法:exec master.dbo.fullbackup1 's:backup','suzhou','full' 0.备份类型只能是full、diff或log,数据库名不

print '                                                                        '+char(13)+'备份运行中 $$$$$$$$$$$$$$$$$$$$$$$$$$$$$'

print '------------------------------- ---------------------------------------- '

delete from  @DirTree

end

--开始完全备份

if @backuptype='full'

begin

print '............................................................................ .'

print '开始完全备份.....请稍等'

print '............................................................................ .'

--隐藏检查目录

set @backupPath3=@backupPath2+''+'full'

INSERT INTO @DirTree(subdirectory, depth)

EXEC master.sys.xp_dirtree @backupPath3

IF NOT EXISTS (SELECT 1 FROM @DirTree WHERE subdirectory = @backupPath3)

EXEC master.dbo.xp_create_subdir @backupPath3

delete from @DirTree

set @FullPath = @backuppath3+''+@dbname+'_'+@backuptype+'_'+replace (replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+ '.bak'

backup database @dbname to disk=@FullPath

WITH buffercount = 20, maxtransfersize = 2097152 ,

COMPRESSION,RETAINDAYS=15,NOFORMAT,NOINIT,

NAME=N'完整备份 ',SKIP,NOREWIND,

NOUNLOAD,STATS=10

set @backtype='D'

set @backupdesc='完全备份'

set @backupfilename=@FullPath

insert into msdb.dbo.backuphistory

(dbname,backtype,lastbackup,backupdesc,backupfilename)

values(@dbname, @backtype,GETDATE(), @backupdesc,@backupfilename)

   SET @Error = @@ERROR

   if @Error !=0

   begin

   SET @ErrorMessage = '数据库'+@dbname+'完全备份未顺利完成 !: ' + CHAR(13) + CHAR(10)

   RAISERROR(@ErrorMessage,16,1) WITH NOWAIT

   return

   end

 

print '                                                                    '

print '------------------------------------------------------- ---------------- '

print @dbname+'完全备份 '+@FullPath+' 已经完 成!'

print '---------------------------------------------------------- ------------- '

return

end

--开始差异备份

else if @backuptype='diff'

begin

print '                                                                             '

print '............................................................................ .'

   print '开始差异备份.....请稍等'

   print '............................................................................ .'

   --检查是否有完全备份并存在

insert into @tmp                        

select top 1  a.backupfilename,

MAX(a.lastbackup)  as backuptime from msdb.dbo.backuphistory a

where a.dbname=@dbname and a.backtype='D'

group by backupfilename

order by a.backupfilename desc

if not exists (select top 1 1 from @tmp )

   begin

   SET @ErrorMessage = '数据库'+@dbname+'没有完全备份历史记录!! ' + CHAR(13) + CHAR(10)

   RAISERROR(@ErrorMessage,16,1) WITH NOWAIT

   return

   end

else

begin  

    select @fullbafile=backupfilename from @tmp

    exec xp_fileexist @fullbafile, @result output

 if (@result=0 )

 begin

 SET @ErrorMessage = '数据库'+@dbname+'完全备份文 件不存在!做差异备份无意义!' + CHAR(13) + CHAR(10)

 RAISERROR (@ErrorMessage,16,1) WITH NOWAIT

 return

 end

    end

   --隐藏检查目录

set @backupPath3=@backupPath2+''+'diff'

INSERT INTO @DirTree(subdirectory, depth)

EXEC master.sys.xp_dirtree @backupPath3

IF NOT EXISTS (SELECT 1 FROM @DirTree WHERE subdirectory = @backupPath3)

EXEC master.dbo.xp_create_subdir @backupPath3

delete from @DirTree

set @FullPath = @backuppath3+''+@dbname+'_'+@backuptype+'_'+replace (replace(replace(convert(varchar,getdate(),20),'-',''),' ',''),':','')+ '.diff'

backup database @dbname to disk=@FullPath

WITH buffercount = 30, maxtransfersize = 2097152 ,

COMPRESSION, DIFFERENTIAL,RETAINDAYS=8,NOFORMAT,NOINIT,

NAME=N'差异备份 ',SKIP,NOREWIND,

NOUNLOAD,STATS=10

set @backtype='I'

set @backupdesc='差异备份'

set @backupfilename=@FullPath

insert into msdb.dbo.backuphistory

(dbname,backtype,lastbackup,backupdesc,backupfilename)

values(@dbname, @backtype,GETDATE(), @backupdesc,@backupfilename)

   SET @Error = @@ERROR

   if @Error !=0

   begin

   SET @ErrorMessage = '数据库'+@dbname+'差异备份未顺利完成!: ' + CHAR (13) + CHAR(10)

   RAISERROR(@ErrorMessage,16,1) WITH NOWAIT

   return

   end

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读