Sql Server MSSQL批量备份数据库TSQL


这是工作中为了偷懒而准备的, Sql Server MSSQL批量备份数据库.TSQL开箱即用, 非常好!


--- 备份数据库TSQL-批量 ---
DECLARE @CurrentDate VARCHAR(8);
DECLARE @DatabaseName NVARCHAR(128);
DECLARE @BackupPath NVARCHAR(500);
DECLARE @SQLCommand NVARCHAR(1000);

-- 获取当前日期,格式为YYYYMMDD
SET @CurrentDate = CONVERT(VARCHAR(8), GETDATE(), 112);

-- 定义需要备份的数据库列表
DECLARE @DatabaseList TABLE (
    DatabaseName NVARCHAR(128),
    IsProcessed BIT DEFAULT 0
);

-- 在这里添加需要备份的数据库名称
INSERT INTO @DatabaseList (DatabaseName)
VALUES 
    ('AIS20241230182025'),
    ('Database2'),
    ('Database3');
    -- 可以继续添加更多数据库

-- 循环处理每个数据库
WHILE EXISTS(SELECT 1 FROM @DatabaseList WHERE IsProcessed = 0)
BEGIN
    -- 获取下一个未处理的数据库
    SELECT TOP 1 @DatabaseName = DatabaseName
    FROM @DatabaseList 
    WHERE IsProcessed = 0;

    -- 构建备份文件路径(可写)
    SET @BackupPath = 'D:\full_bak\' + @DatabaseName + '_' + @CurrentDate + '_Full.bak';

    -- 构建动态SQL命令
    SET @SQLCommand = 
    'BACKUP DATABASE [' + @DatabaseName + '] 
    TO DISK = ''' + @BackupPath + '''
    WITH INIT, STATS = 10;';

    -- 执行动态SQL
    BEGIN TRY
        PRINT '正在备份数据库: ' + @DatabaseName;
        PRINT '备份路径: ' + @BackupPath;
        EXEC sp_executesql @SQLCommand;
        PRINT '数据库 ' + @DatabaseName + ' 备份完成';
    END TRY
    BEGIN CATCH
        PRINT '数据库 ' + @DatabaseName + ' 备份失败: ' + ERROR_MESSAGE();
    END CATCH

    -- 标记为已处理
    UPDATE @DatabaseList 
    SET IsProcessed = 1 
    WHERE DatabaseName = @DatabaseName;
    
    PRINT '----------------------------------------';
END

PRINT '所有数据库备份任务已完成';
GO


白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论