You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将所有非系统SQL数据库备份至Azure Blob容器

批量备份非系统数据库到Azure Blob容器

要实现批量备份所有用户数据库并排除系统库,你可以通过**动态SQL结合系统视图sys.databases**遍历目标数据库,自动生成并执行备份命令。以下是修改后的完整脚本:

DECLARE @filename varchar(500)
DECLARE @dbname varchar(500)
DECLARE @url varchar(500)
DECLARE @subfolder varchar(500)
DECLARE @date nvarchar(256)
DECLARE @backupCmd nvarchar(1000)

-- 生成格式化日期字符串(规避特殊字符)
SET @date = REPLACE(REPLACE(CONVERT(nvarchar(256), GETDATE(), 120),':','-'),' ', '-');
-- 设置Azure Blob容器基础URL
SET @url = 'https://storageaccountname.blob.core.windows.net/sql-migration-data/'

-- 声明游标遍历所有非系统数据库
DECLARE db_cursor CURSOR FOR
SELECT name 
FROM sys.databases 
WHERE name NOT IN ('master', 'model', 'msdb', 'tempdb') -- 排除系统数据库
AND state_desc = 'ONLINE' -- 仅备份在线数据库
AND is_read_only = 0; -- 可选:排除只读数据库,按需调整

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 按数据库名构建子文件夹路径
    SET @subfolder = @dbname + '/'
    -- 拼接完整备份文件URL
    SET @filename = @url + @subfolder + @dbname + '_diff_' + @date + '.bak'

    -- 动态生成备份命令
    SET @backupCmd = N'BACKUP DATABASE [' + @dbname + N'] TO  URL = ''' + @filename + N''' WITH  DIFFERENTIAL , NOFORMAT, NOINIT,  NAME = N''' + @dbname + N'-Differential Database Backup'', NOSKIP, NOREWIND, NOUNLOAD,  STATS = 10'
    
    -- 执行备份命令
    EXEC sp_executesql @backupCmd

    FETCH NEXT FROM db_cursor INTO @dbname
END

-- 关闭并释放游标
CLOSE db_cursor
DEALLOCATE db_cursor
GO

关键说明:

  • 数据库筛选逻辑:通过sys.databases视图精准排除系统库,同时仅选择在线、非只读的数据库,保证备份的有效性。
  • 动态SQL执行:用sp_executesql执行动态生成的备份命令,无需硬编码每个数据库名。
  • 路径结构化:按数据库名创建独立子文件夹,让备份文件分类存储,便于后续查找和管理。

注意事项:

  1. 确保SQL Server实例已配置Azure Blob备份权限(需存储账户的SAS密钥或托管身份授权)。
  2. 差异备份依赖对应数据库的完整备份,执行前需确认目标数据库已有完整备份基础。
  3. 可根据需求调整备份参数(如改为完整备份、添加COMPRESSION选项等)。

内容的提问来源于stack exchange,提问作者Jon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 18:42:39