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

当完整备份数据库的时候,我们有时候可能会遇到一种极端情况,比如服务器上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盘

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

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


总结

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

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

还有一个就是不需要用winrar等压缩软件来压缩分包了,SQL Server本身就可以做

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

最新文章

  1. 重建索引提高SQL Server性能
  2. Task异步编程
  3. 执行robot framework 的测试用例 命令行pybot使用方式
  4. POJ 3020 Antenna Placement
  5. mac os使用lsusb命令和连接未知的Android设备
  6. linux的命令使用记录
  7. AngularJS 讲解,四 Directive
  8. 16进制到byte转换
  9. Struts2 转换器
  10. android横竖屏切换activity生命周期变化
  11. linux重置密码的方法和用户切换
  12. Nginx ACCESS阶段 Satisfy 指令
  13. File类中的一些属性 添加删除文件夹
  14. 记录-eureka
  15. Mac下安装Mysql以及修改Mysql密码
  16. Git和SourceTree配合使用
  17. string的七种用法
  18. 基于LumiSoft.Net.dll发、收、删邮件
  19. minStack实现
  20. PHP for循环的写法和示例

热门文章

  1. Windows10开发手记-RelativePanel使用详解
  2. nrf52832 SDK 15.3.0 Flash 操作
  3. 比较List和ArrayList的性能及ArrayList和LinkedList优缺点
  4. Ubuntu 16.04安装sogou 拼音输入法
  5. Jenkins系列之三——centos7.4+GitLab+Jenkins部署
  6. SQL 必知必会·笔记<18>管理事务处理
  7. Java 8 新特性-菜鸟教程 (8) -Java 8 日期时间 API
  8. IceCTF 图片隐写
  9. php手撸轻量级开发(二)框架加载
  10. MySQL储存过程