当前位置:Gxlcms > mssql > SqlServer批量备份多个数据库且删除3天前的备份

SqlServer批量备份多个数据库且删除3天前的备份

时间:2021-07-01 10:21:17 帮助过:50人阅读

废话不多说了,直接给大家贴代码了,具体代码如下所示:

  1. /*******************************************
  2. * 批量备份数据库且删除3天前的备份
  3. *******************************************/
  4. DECLARE @backupfile VARCHAR(1024)
  5. DECLARE @backdesc VARCHAR(1024)
  6. DECLARE @filename VARCHAR(1024)
  7. DECLARE @path VARCHAR(1024)
  8. DECLARE @dbname VARCHAR(1024)
  9. DECLARE @extension_name VARCHAR(16)
  10. --备份参数
  11. DECLARE tmp_Cur CURSOR
  12. FOR
  13. SELECT NAME
  14. FROM [sys].[databases]
  15. WHERE NAME NOT IN ( 'master', 'model','msdb','tempdb' )
  16. SET @path = N'D:\Backup\Autoback\';
  17. SET @extension_name = N'bak';
  18. --生成文件名
  19. SET @filename = CONVERT(VARCHAR(1024), GETDATE(), 120)
  20. SET @filename = REPLACE(@filename, ':', '')
  21. SET @filename = REPLACE(@filename, '-', '')
  22. SET @filename = REPLACE(@filename, ' ', '')
  23. SET @filename = @filename + '_' + CONVERT (VARCHAR(3), DATEPART(ms, GETDATE()))
  24. + N'.' + @extension_name
  25. OPEN tmp_Cur;
  26. FETCH NEXT FROM tmp_Cur INTO @dbname;
  27. WHILE @@FETCH_STATUS = 0
  28. BEGIN
  29. -- 得到完整目标文件,数据库将备份到这个文件中
  30. SET @backupfile = @path + @dbname + @filename
  31. --SELECT @backupfile
  32. SET @backdesc =@dbname + N'-完整 数据库 备份'
  33. -- 开始备份, COMPRESSION 参数表示压缩,可节省磁盘空间
  34. BACKUP DATABASE @dbname TO DISK = @backupfile WITH NOFORMAT, NOINIT, NAME = @backdesc, SKIP, NOREWIND, NOUNLOAD, STATS = 10, COMPRESSION
  35. FETCH NEXT FROM tmp_Cur INTO @dbname
  36. END
  37. CLOSE tmp_Cur;
  38. DEALLOCATE tmp_Cur;
  39. -- 删除3天前的备份文件
  40. DECLARE @olddate DATETIME
  41. SELECT @olddate = DATEADD(d, -3, GETDATE())
  42. -- 执行删除 (SQL 2008 具备)
  43. EXECUTE master.dbo.xp_delete_file 0, @path, @extension_name, @olddate, 1
  44. [sql] view plain copy print?
  45. --作业定时压缩脚本支持多库
  46. DECLARE @DatabaseName NVARCHAR(50)
  47. DECLARE @ExecuteSql NVARCHAR(MAX)
  48. SET @ExecuteSql=''
  49. DECLARE name_cursor CURSOR
  50. FOR
  51. SELECT name FROM master..sysdatabases WHERE name NOT IN ( 'master', 'model', 'msdb', 'tempdb',
  52. 'northwind','pubs','AgentSys','ydttimedtask','YiDianTongV2' )
  53. OPEN name_cursor;
  54. FETCH NEXT FROM name_cursor INTO @DatabaseName;
  55. WHILE @@FETCH_STATUS = 0
  56. BEGIN
  57. SET @ExecuteSql =''
  58. SET @ExecuteSql +='
  59. USE ['+@DatabaseName+'];
  60. DECLARE @Error INT
  61. SET @Error=(SELECT TOP 1 size/128.0 - CAST(FILEPROPERTY([NAME], ''SpaceUsed'') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files ORDER BY [NAME] DESC)
  62. --PRINT @Error
  63. IF(@Error>1)
  64. BEGIN
  65. ALTER DATABASE ['+@DatabaseName+']  --数据库名字
  66. SET RECOVERY SIMPLE;  --设置简单恢复模式
  67. DBCC SHRINKFILE ([YiDianTongV2], 1);  --(M)不能小于1M,
  68. DBCC SHRINKFILE ([YiDianTongV2_log], 1);  --(M)不能小于1M
  69. ALTER DATABASE ['+@DatabaseName+']
  70. SET RECOVERY FULL;  --恢复为原来完整模式
  71. END
  72. '
  73. PRINT @ExecuteSql; --打印
  74. EXEC(@ExecuteSql) --执行
  75. FETCH NEXT FROM name_cursor INTO @DatabaseName;
  76. END;
  77. CLOSE name_cursor;
  78. DEALLOCATE name_cursor;

总结

以上所述是小编给大家介绍的SqlServer批量备份多个数据库且删除3天前的备份,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:

  • SqlServer备份数据库的4种方式介绍
  • sqlserver备份还原数据库功能封装分享
  • sqlserver2005 master与msdb数据库备份恢复过程
  • SQLServer 2005 自动备份数据库的方法分享(附图解教程)
  • Sqlserver2000 数据库备份实例代码
  • asp 在线备份与恢复sqlserver数据库的代码
  • sqlserver 自动备份所有数据库的SQL
  • sqlserver 数据库日志备份和恢复步骤

人气教程排行