用语句来创建多个数据库的备份、删除过期文件作业

SQLServer的维护计划是强大的,特别是体现在备份、删除过期文件这个方面。

可以创建文件夹、备份多个库、删除过期文件……

不过配置时还是有点烦人,要选择很多东西。

那用语句如何实现呢?

--作业步骤1. 备份所有指定数据库
DECLARE @dbs TABLE(
    rowNum INT IDENTITY(1, 1) PRIMARY KEY,
    dbName NVARCHAR(200),
    bakPath AS N'D:\database_bak\' + dbName + '\' + dbName + '_' + REPLACE(REPLACE(REPLACE(CONVERT(CHAR(19), GETDATE(), 120), '-', ''),':',''),' ','_') + '.bak'
)
SET NOCOUNT ON
--将所有符合条件的DB插入到表变量
INSERT INTO @dbs(dbName)
SELECT NAME
FROM   sys.databases d
WHERE  NAME NOT IN ('master', 'tempdb', 'model', 'msdb', 'ag_test')
       AND NAME NOT LIKE '%monitor%'
ORDER BY
       NAME

--遍历表变量中的所有数据库
DECLARE @i INT,@iMax INT,@sql NVARCHAR(MAX)
SELECT @i = 1,@iMax = MAX(rowNum) FROM @dbs

WHILE @i <= ISNULL(@iMax, 0)
BEGIN
    --创建 dbName 开头的子文件夹
    SELECT @sql = 'EXECUTE master.dbo.xp_create_subdir N''d:\database_bak\' + 
           dbName + ''''
    FROM   @dbs
    WHERE  rowNum = @i
    
    EXEC (@sql)
    --备份
    --2005 要去掉 COMPRESSION
    SELECT @sql = 'BACKUP DATABASE [' + dbName + '] TO  DISK = N''' + bakPath + 
           ''' WITH NOFORMAT, NOINIT, SKIP, REWIND, NOUNLOAD, COMPRESSION,  STATS = 20'		
    FROM   @dbs
    WHERE  rowNum = @i
    
    EXEC (@sql)
    SET @i = @i + 1
END

--作业步骤二. 删除过期文件
DECLARE @oldDate DATETIME
--保留 2 天文件(昨天0点之前文件会被删除)
SET @oldDate = CAST(CONVERT(CHAR(10),GETDATE(),120) AS DATETIME)-1
EXECUTE MASTER.dbo.xp_delete_file 
0,						--0: 备份文件,1: 维护计划文本报告
N'D:\database_bak\',	--文件路径
N'bak',                 --文件扩展名
@oldDate,               --在此时间之前的文件一律删除
1                       --删除子文件夹中的文件


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值