视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
SQLSERVER的一个不显眼的功能备份文件的分割
2020-11-09 07:51:45 责编:小采
文档


SQLSERVER的一个不显眼的功能 备份文件的分割 当完整备份数据库的时候,我们有时候可能会遇到一种极端情况,比如服务器上C,D,E三个盘符都只剩下5G空间了 但是如果要完整备份业务库需要12G的空间,那么这时候怎么办呢? 使用文件组备份吗?但是数据库没有做表

SQLSERVER的一个不显眼的功能 备份文件的分割

当完整备份数据库的时候,我们有时候可能会遇到一种极端情况,比如服务器上C,D,E三个盘符都只剩下5G空间了

但是如果要完整备份业务库需要12G的空间,那么这时候怎么办呢?

使用文件组备份吗?但是数据库没有做表分区,没有分多个文件组,就只有一个主文件组啊

这时候我们可以使用备份文件分割

我使用自己机器示范一下,我的机器上有一个Temp2的数据库,数据库大小为1GB


备份

我们做一个Temp2数据库的完整备份

DECLARE @CurrentTime VARCHAR(50), @FileName VARCHAR(200)
SET @CurrentTime = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120 ),'-','_'),' ','_'),':','')

 
--(Temp2 数据库完整备份)
SET @FileName = 'C:\Temp2_FullBackup_' + @CurrentTime+'.bak'
BACKUP DATABASE [Temp2]
TO DISK=@FileName WITH FORMAT 

可以看到需要31MB大小

那么如何分割备份文件呢?方法很简单

刚才是备份到C盘,现在我们备份到C盘和D盘

DECLARE @CurrentTime VARCHAR(50), @FileName VARCHAR(200),@FileName2 VARCHAR(200)
SET @CurrentTime = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR, GETDATE(), 120 ),'-','_'),' ','_'),':','')

 
--(Temp2 数据库完整备份)
SET @FileName = 'C:\Temp2_FullBackup_Partial1_' + @CurrentTime+'.bak'
SET @FileName2 = 'D:\Temp2_FullBackup_Partial2_' + @CurrentTime+'.bak'

BACKUP DATABASE [Temp2]
TO 
DISK=@FileName,
DISK=@FileName2
WITH FORMAT 

C盘

D盘

可以看到每个备份文件的大小是平均的,都是16MB,如果是分成3个备份文件,那么就除以3,就是每个备份文件的大小

当然,如果你要查询备份文件的信息,无论查询哪个备份文件都是可以查询出来的

RESTORE FileListOnly From Disk='C:\Temp2_FullBackup_Partial1_2014_12_19_150533.bak'
RESTORE FileListOnly From Disk='D:\Temp2_FullBackup_Partial2_2014_12_19_150533.bak'
RESTORE HeaderOnly From Disk='C:\Temp2_FullBackup_Partial1_2014_12_19_150533.bak'
RESTORE HeaderOnly From Disk='D:\Temp2_FullBackup_Partial2_2014_12_19_150533.bak'


还原

USE [master]
RESTORE DATABASE [Temp2] 
FROM 
DISK = N'D:\Temp2_FullBackup_Partial1_2014_12_19_150533.bak',
DISK = N'D:\Temp2_FullBackup_Partial2_2014_12_19_150533.bak' 
WITH FILE = 1, 
MOVE N'Temp' TO N'E:\DataBase\Temp2.mdf', 
MOVE N'Temp_log' TO N'E:\DataBase\Temp2_log.ldf', 
NOUNLOAD, REPLACE, STATS = 5

GO

还原的时候只需要指定所有的备份分割文件的路径就可以了,当然我们一般在服务器搬迁的时候都会把这些备份文件一起放到新服务器的同一个盘符下面,方便还原

而不会一个放C盘,一个放D盘,一个放E盘

还原好了,我们查询一下数据

还原出来的数据库没有问题,可以收工了


总结

有时候当服务器的任何一个盘符的空间都不足以放下一个完整备份文件,但是又急需要做一个完整备份,那么可以采取这种办法

当然,你也可以插入一个移动硬盘,将数据库备份到一个移动硬盘里去,但是当你做集群搬迁,只能远程到服务器去做备份的时候,这种办法就比较有用了

如有不对的地方,欢迎大家拍砖o(∩_∩)o

下载本文
显示全文
专题