本文共 2566 字,大约阅读时间需要 8 分钟。
工作中由于个别数据库比较大,生成的备份文件也比较大,不方便存储或者转移,可以将文件备份为多个小的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 = 1SET @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 < @BakCountBEGIN SET @Sql = @Sql + ', DISK = N''' + @DATABakPath + @DATABaseName + '\' + @FILENAME + '\' + @DATABaseName + '_' + @FILENAME + '_' + CONVERT(VARCHAR, @n) + '.bak''' SET @n = @n + 1ENDEXEC (@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
转载地址:http://vokbb.baihongyu.com/