Scripts:SQLServer备份压缩

针对备份进行压缩

点击(此处)折叠或打开

  1. USE [master]
  2. GO
  3. /****** Object: StoredProcedure [dbo].[FullBackup] Script Date: 03/16/2017 17:21:55 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO

  8. ALTER Proc [dbo].[USP_CYUDBA_FullBackup]
  9. @DBNames varchar(800), --需要备份的数据库名字列表,以逗号分割多个数据库
  10. @BaseDest varchar(300), --备份文件存放根目录
  11. @BackupKeepDays varchar(30) --备份文件保留天数
  12. AS
  13.         DECLARE @FileName_Full varchar(600) --备份文件名
  14.         DECLARE @BackupSql varchar(7000) --执行备份语句
  15.         DECLARE @Dest varchar(600) --备份文件存放目录
  16.         DECLARE @Mkdir varchar(600) --创建文件夹语句
  17.         DECLARE @Rmfile varchar(600) --删除过期备份语句
  18.         DECLARE @ServerName varchar(30) --计算机名字
  19.         DECLARE @DBName varchar(30) --备份数据库名字,临时变量
  20.         DECLARE @DT varchar(300) --备份日期
  21.         DECLARE @DateTime varchar(300) --备份时间
  22.         DECLARE @HH varchar(2)
  23.         DECLARE @MI varchar(2)
  24.         DECLARE @db_i int --多个数据库名是确认第一个逗号分割的位置
  25.         DECLARE @Qt char(1)
  26.         DECLARE @ZIPFILE varchar(600)
  27.         DECLARE @ZIPFILE_DATA varchar(600)
  28.         DECLARE @ZIPFILE_LOG varchar(600)
  29.         SET @HH = DATEPART ( Hh , GETDATE())
  30.         SET @MI = DATEPART ( Mi , GETDATE())
  31.         SET @ServerName = @@SERVERNAME
  32.         IF ( LEN(@HH) < 2 )
  33.         BEGIN
  34.             SET @HH = '0'+ @HH
  35.         END
  36.         IF ( LEN(@MI) < 2 )
  37.         BEGIN
  38.             SET @MI = '0'+ @MI
  39.         END


  40.         set @Dest = @BaseDest

  41.         IF ( CHARINDEX ( '\', @Dest, LEN ( @Dest ) ) <> LEN ( @Dest ) )
  42.         BEGIN
  43.             SET @Dest = @Dest + '\' --如果根目录结尾无\则手动添加一个
  44.         END


  45.         SET @DT = REPLACE(CONVERT(VARCHAR,GETDATE(),102),'.','')
  46.         SET @DateTime = @DT + '_' + @HH + @MI
  47.         WHILE ( LEN ( @DBNames ) > 1 )
  48.         BEGIN
  49.                 SET @BackupSql=''
  50.                 IF ( SUBSTRING ( @DBNames, 1 , 1 ) = ',' )
  51.                 BEGIN
  52.                     SET @DBNames = SUBSTRING ( @DBNames , 2 , LEN(@DBNames) )
  53.                 END

  54.                 IF ( CHARINDEX ( ',', @DBNames ) > 0)
  55.                 BEGIN
  56.                     SET @db_i = CHARINDEX ( ',' , @DBNames )
  57.                     SET @DBName = SUBSTRING ( @DBNames , 1 , @db_i - 1 )
  58.                     SET @DBNames = SUBSTRING ( @DBNames , @db_i , LEN(@DBNames) )
  59.                 END
  60.                 IF ( CHARINDEX ( ',', @DBNames ) = 0)
  61.                 BEGIN
  62.                         SET @DBName = @DBNames
  63.                         SET @DBNames = ''
  64.                 END
  65.                 SET @FileName_Full = @DBName + '_Full_BAK_' + @DateTime + '.bak'
  66.                 SET @Qt = ''''
  67.                 DECLARE @Dest_Now varchar(600)
  68.                 SET @Dest_Now = @Dest
  69.                 IF ( @DBName = 'master' or @DBName = 'msdb' or @DBName = 'temp' or @DBName = 'model' or @DBName = 'resource' or @DBName = 'tempdb' or @DBName = 'mssqlsystemresource' )
  70.                 BEGIN
  71.                         SET @Dest_Now = @Dest +'SYS_DBBAK' + '\' + @DT
  72.                         SET @Mkdir = 'mkdir -p ' + @Dest_Now
  73.                         SET @Rmfile = 'forfiles /p ' + @BaseDest + ' /m *_Full_BAK_*.zip* /S -d -' + @BackupKeepDays + ' /c "cmd /c del /f @path" & forfiles /p ' + @BaseDest + ' /S -d -1 /c "cmd /c if @isdir==TRUE rd @path" '
  74.                         SET @BackupSql = 'BACKUP DATABASE [' + @DBName + '] TO DISK = ' + @Qt + @Dest_Now + '\' + @FileName_Full + @Qt + ' WITH INIT ;'
  75.                         SET @ZIPFILE = 'cd ' + @Dest_Now + ' & RAR.EXE A -R -DF '+ @FileName_Full +'.zip ' + @FileName_Full
  76.                 IF ( LEN ( @DBName ) > 0 )
  77.                     BEGIN
  78.                         EXEC master.dbo.xp_cmdshell @Mkdir
  79.                         EXEC (@BackupSql)
  80.                         EXEC master.dbo.xp_cmdshell @ZIPFILE
  81.                         EXEC master.dbo.xp_cmdshell @Rmfile
  82.                     END
  83.                 
  84.                 END
  85.                 ELSE
  86.                 BEGIN
  87.                         DECLARE @FileName_Log varchar(1000)
  88.                         SET @FileName_Log = @DBName + '_LOG_BAK_' + @DateTime + '.bak'
  89.                         SET @Dest_Now = @Dest +'USER_DBBAK' + '\' + @DT
  90.                         SET @Rmfile = 'forfiles /p ' + @BaseDest + ' /m *_Full_BAK_*.bak* /S -d -' + @BackupKeepDays + ' /c "cmd /c del /f @path" & forfiles /p ' + @BaseDest + ' /S -d -1 /c "cmd /c if @isdir==TRUE rd @path" '
  91.                         SET @Mkdir = 'mkdir -p ' + @Dest_Now + '\LOG & mkdir -p ' + @Dest_Now + '\FULL'
  92.                         SET @BackupSql = ''
  93.                         SET @BackupSql = @BackupSql + 'BACKUP DATABASE [' + @DBName + '] TO DISK = ' + @Qt + @Dest_Now + '\FULL\' + @FileName_Full + @Qt + ' WITH INIT ;'
  94.                         SET @BackupSql = @BackupSql + 'if exists(select 1 from sys.databases where name=''' + @DBName + ''' and recovery_model_desc!=''SIMPLE'')'
  95.                         SET @BackupSql = @BackupSql + 'BEGIN BACKUP LOG [' + @DBName + '] TO DISK = ' + @Qt + @Dest_Now + '\LOG\' + @FileName_Log + @Qt + ' WITH INIT ;'
  96.                         SET @BackupSql = @BackupSql + 'USE [' + @DBName + '];DECLARE @DBName_Log varchar(100); DECLARE DBName_Logs CURSOR for SELECT name FROM sys.database_files where type=1;'
  97.                      SET @BackupSql = @BackupSql + 'OPEN DBName_Logs;fetch next from DBName_Logs into @DBName_Log;while @@fetch_status<>-1 '
  98.                         SET @BackupSql = @BackupSql + 'BEGIN DBCC SHRINKFILE ( @DBName_Log ,TRUNCATEONLY) ;fetch next from DBName_Logs into @DBName_Log;'
  99.                         SET @BackupSql = @BackupSql + 'END;close DBName_Logs;deallocate DBName_Logs;END;'
  100.                         SET @ZIPFILE_LOG = 'cd ' + @Dest_Now +'\LOG\' + ' & RAR.EXE A -R -DF '+ @FileName_Log +'.zip ' + @FileName_Log
  101.                         SET @ZIPFILE_DATA = 'cd ' + @Dest_Now +'\FULL\' + ' & RAR.EXE A -R -DF '+ @FileName_Full +'.zip ' + @FileName_Full
  102.             IF ( LEN ( @DBName ) > 0 )
  103.                         BEGIN
  104.                             EXEC master.dbo.xp_cmdshell @Mkdir
  105.                             EXEC (@BackupSql)
  106.                             EXEC master.dbo.xp_cmdshell @ZIPFILE_DATA
  107.                             EXEC master.dbo.xp_cmdshell @ZIPFILE_LOG
  108.                             EXEC master.dbo.xp_cmdshell @Rmfile
  109.                         END
  110.                     
  111.                 END
  112.         END

请使用浏览器的分享功能分享到微信等