关于我们
技术分享
技术分享
拆分备份(还原)比较大的数据库为多个bak文件
拆分备份(还原)比较大的数据库为多个bak文件
2020-07-16
工作中由于个别数据库比较大,生成的备份文件也比较大,不方便存储或者转移,可以将文件备份为多个小的bak文件。
比如一个200G的数据库,可以拆分备份为10个bak文件,则每个bak文件约在20G左右。
备份代码:
/************************************************************ * 拆分备份dbName数据库 ,数据库比较大,为了方便备份,将每个备份文件拆分为多个bak文件 * Time: ************************************************************/ USE [master] ------删除旧数据------------------------------------------------------------- --1. xp_delete_file --优点:兼容性好 --缺点:不能删除SQL Server之外创建的文件,包括RAR --备注:维护计划中的“清理维护”也是调用此 扩展存储过程 来删除文件。 DECLARE @oldDate DATETIME SET @oldDate = GETDATE() -0 --EXECUTE MASTER.dbo.xp_delete_file -- 0, --0: 备份文件,1: 维护计划文本报告 -- N'D:\DataBak\dbName\', --文件路径 -- N'bak', --文件扩展名 -- @oldDate, --在此时间之前的文件一律删除 -- 1 --删除子文件夹中的文件 EXEC xp_cmdshell 'rd D:\DataBak\dbName', no_output --删除文件夹,为了清理旧备份 EXEC xp_cmdshell 'mkdir D:\DataBak\dbName', no_output --重新创建文件夹 DECLARE @BakCount INT DECLARE @n INT DECLARE @Sql NVARCHAR(MAX) DECLARE @FILENAME VARCHAR(500) DECLARE @DATABaseName VARCHAR(500) DECLARE @DATABakPath VARCHAR(500) SET @DATABakPath = 'D:\DataBak\' SET @BakCount = 5 --要拆分的数据库个数 SET @DATABaseName = 'dbName' SET @n = 1 SET @FILENAME = REPLACE( REPLACE( REPLACE(CONVERT(VARCHAR, GETDATE(), 120), '-', ''), ' ', '' ), ':', '' ) + ''; DECLARE @exeText VARCHAR(100) SET @exeText = 'mkdir ' + + @DATABakPath + @DATABaseName + '\' + @FILENAME --创建备份目录 EXEC xp_cmdshell @exeText, no_output SET @Sql = 'BACKUP DATABASE dbName TO DISK = N''' + @DATABakPath + @DATABaseName + '\' + @FILENAME + '\' + @DATABaseName + '_' + @FILENAME + '_0.bak''' WHILE @n < @BakCount BEGIN SET @Sql = @Sql + ', DISK = N''' + @DATABakPath + @DATABaseName + '\' + @FILENAME + '\' + @DATABaseName + '_' + @FILENAME + '_' + CONVERT(VARCHAR, @n) + '.bak''' SET @n = @n + 1 END EXEC (@Sql) PRINT '-----------备份' + @DATABaseName + '完成---------------------' + CONVERT(VARCHAR(100), GETDATE(), 126) + '---------------'
还原代码:
/***还原拆分备份的文件 文件如果比较多 可以参考备份代码 循环处理*****/ RESTORE DATABASE dbName FROM DISK = 'E:\DataBak\dbName\20181101201523\dbName_20181101201523_0.bak', DISK = 'E:\DataBak\dbName\20181101201523\dbName_20181101201523_1.bak', DISK = 'E:\DataBak\dbName\20181101201523\dbName_20181101201523_2.bak', DISK = 'E:\DataBak\dbName\20181101201523\dbName_20181101201523_3.bak', DISK = 'E:\DataBak\dbName\20181101201523\dbName_20181101201523_4.bak' WITH MOVE 'dbName' TO 'D:\SqlDataBase\dbName.mdf', MOVE 'dbName_log' TO 'D:\SqlDataBase\dbName_log.ldf', STATS = 5

- 标签:
-
容灾备份
您可能感兴趣的新闻 换一批
热门文章
现在下载,可享30天免费试用