完整备份: 备份全部选中的文件和文件夹,并不依赖文件的存档属性来确定备份哪些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性),完全备份也叫完整备份。

差异备份: 差异备份是针对完整备份:备份上一次完整备份后发生变化的所有文件。(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,即:备份后不标记为已备份文件,换言之,不清除存档属性,直到下一次完整备份为止)。

完整+差异备份的优缺点比较:

优点:

1. 占用的空间较小,在一个周期内,只需要保存一份完整备份,其它都是差异备份;

2. 在恢复数据时,只需要恢复一份完整备份 + 最新一次的差异备份;

3. 虽然备份数据需要较多的时间,但还原数据使用较少的时间。

缺点:

  1. 若完整备份的资料丢了,则所有的备份就全完蛋了!所以要特别注意对完整备份文件的保存;

本文中环境为SQL2012.

例子

1.  备份

1.1 创建数据库TestBackup

1.2 创建表TestTable

CREATE TABLE [dbo].[TestTable](

         [id] [int] NULL,

         [name] [nvarchar](10) NULL

) ON [PRIMARY]

  

1.3 插入数据

insert into [TestTable] values (1,'full').

我们把此时的点叫做 时间点1

1.4 备份数据库,选择全备份

BACKUP DATABASE [TestBackup] TO  DISK = N'D:\database backup\TestBackupDB-full.bak' WITH NOFORMAT, NOINIT, 

NAME = N'TestBackup-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

  

或者如下图

1.5 插入数据

insert into [TestTable] values (2,'diff1')

  

我们把此时的点叫做 时间点2

1.6 做第一个差异备份

BACKUP DATABASE [TestBackup] TO  DISK = N'D:\database backup\TestBackupDB-diff1.bak' WITH  DIFFERENTIAL ,

NOFORMAT, NOINIT,  NAME = N'TestBackup-Differential Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

  

或者如下图

1.7 插入数据

insert into [TestTable] values (3,'diff2')

我们把此时的点叫做 时间点3

1.8 做第二个差异备份

BACKUP DATABASE [TestBackup] TO  DISK = N'D:\database backup\TestBackupDB-diff2.bak' WITH  DIFFERENTIAL ,

NOFORMAT, NOINIT,  NAME = N'TestBackup-Differential Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO

  

2      还原(没有分区)

2.1 还原到时间点1

就是将全备份直接还原,这里不多叙述.

2.2 还原到时间点2

2.2.1做全备份的还原

RESTORE DATABASE [TestBackup-Re] FROM  DISK = N'D:\database backup\TestBackupDB-full.bak' WITH  FILE = 1,  MOVE N'TestBackup'

TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\TestBackup-Re.mdf',

MOVE N'TestBackup_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\TestBackup-Re_log.ldf',  NORECOVERY,  NOUNLOAD,  STATS = 5

注意,必须加选项NORECOVERY.

或如下图

在这里,我们把数据还原成了另外一个数据库,名字叫TestBackup-Re.加了NORECOVERY的数据库还原后是不能直接使用的.如下图(显示正在还原)

2.2.2差异还原

选择TestBackupDB-diff1.bak文件,还原到TestBackup-Re,

RESTORE DATABASE [TestBackup-Re] FROM  DISK = N'D:\database backup\TestBackupDB-diff1.bak' WITH  FILE = 1,  MOVE N'TestBackup'

TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\TestBackup-Re.mdf',

 MOVE N'TestBackup_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\TestBackup-Re_log.ldf',  RECOVERY,  NOUNLOAD,  STATS = 5

  

注意mdf和log文件的命名需要手动更改和TestBackup-Re一致.

还原后,查看[TestTable]表,表中数据为时间点2的数据.

2.3 还原到时间点3

2.3.1做全备份的还原(同2.2.1)

把数据库名字改为TestBackup-Re2

RESTORE DATABASE [TestBackup-Re2] FROM  DISK = N'D:\database backup\TestBackupDB-full.bak' WITH  FILE = 1,  MOVE N'TestBackup'

TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\TestBackup-Re2.mdf',

 MOVE N'TestBackup_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\TestBackup-Re2_log.ldf',  NORECOVERY,  NOUNLOAD,  STATS = 5

  

下图

2.3.2差异还原

选择TestBackupDB-diff2.bak文件,还原到TestBackup-Re2,注意mdf和log文件的命名需要手动更改和TestBackup-Re2一致.

RESTORE DATABASE [TestBackup-Re2] FROM  DISK = N'D:\database backup\TestBackupDB-diff2.bak' WITH  FILE = 1,  MOVE N'TestBackup'

TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\TestBackup-Re2.mdf',

 MOVE N'TestBackup_log' TO N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\TestBackup-Re2_log.ldf',  RECOVERY,  NOUNLOAD,  STATS = 5

  

还原后,查看[TestTable]表,表中数据为时间点3的数据.

3      还原(有分区)

来,在实践中,有一个数据有分区,按照2中所属分步操作失败了.

ITMP2每天都备份,每天删除一个老的分区,每天创建一个新的分区.按照上面的步骤,先做全备份的还原,在做差异备份的还原.报错如下:

Unable to create restore plan due to break in the LSN chain.--(版本为sql2012)

后来试了几次,通过如下方法解决:

在选择Source中Device的时候,选择多个文件:选择全备份和最近一个差异备份,如下图

选项Options选择默认的restore with recovery.

备份成功后,和最后一个差异备份的分区文件和数据完全相同(即删除的分区文件新建的分区文件相同,其他数据也相同)

4      测试完毕并测试成功

Database differential backup差异备份和还原的更多相关文章

  1. [SQL SERVER 2005]数据库差异备份及还原

    因为之前遇到还原差异备份,最开始遇到SQLServer报错:”无法还原日志备份或差异备份,因为没有文件可用于前滚“.查阅很多资料后,终于得到解决.收集整理成这篇随笔. 问题原因:出现这种错误绝大多数是 ...

  2. sqlServer数据库备份与还原——差异备份与还原

    1.差异备份 是完整备份的补充 备份自上次完整备份以来的数据变动的部分 2.备份过程: 在做差异备份之前需要先进行完整备份.完整备份的过程见:https://i.cnblogs.com/EditPos ...

  3. Backup &recovery备份和还原

    实践版本:MySQL5.7 备份类型(backup type)物理和逻辑备份(Physical Versus Logical Backup)        物理备份是指直接复制存储数据库内容的目录和文 ...

  4. Linux使用 tar命令-g参数进行增量+差异备份、还原文件

    原文链接:http://www.cnblogs.com/gnuhpc/ 完整备份: 建立测试路径与档案 mkdir test touch test/{a,b,c} 在test下生成三个文件 执行完整备 ...

  5. Backup&recovery备份和还原 mysql

    1.mysqldump 在日常工作中,我们会使用mysqldump命令创建sql格式的转储文件来备份数据库.或者我们把数据导出后做数据迁移,主备搭建等操作.mysqldump是一个逻辑备份工具,复制原 ...

  6. sqlserver 2005 数据库的差异备份与还原

    找到一个可靠的步骤,点开链接:http://blog.csdn.net/kevindr/article/details/22154323

  7. SQL Server差异备份的备份/还原原理

    SQL Server差异备份的备份/还原原理 记住一点:差异备份是基于最后一次完整备份的差异,而不是基于最后一次差异的差异   备份过程: 1-完整备份之后有无对数据库做过修改,如果有,记录数据库的最 ...

  8. SQL SERVER完整、差异和事务日志备份及还原(脚本和GUI实现) [原创]

    一.完整备份.差异备份和事务日志备份的脚本 --完整备份数据库 BACKUP DATABASE Test_Bak TO DISK = 'E:\20150609_75\bak\Test_bak_full ...

  9. SQL SERVER 2005还原差异备份、日志备份 2012-03-29 11:43

    其实要备份,还原最安全最有保障的是完全备份.但是完全备份肯定是需要更多的磁盘空间的开销.尤其是数据量比较大的.比如基数是500M,每天的增长量为10M,那么第一次完全备份是500M,第二次是510M, ...

随机推荐

  1. win10 UWP读写文件

    C# uwp应用的文件读写最常见错误就是没有权限. 而最简单的方法是对已知的文件路径进行访问 已知的文件路径常见的是自身的路径 权限这个和之前不同,UWP读写文件多用StorageFile来读写文件 ...

  2. vs2012建一个空解决方案添加以前老版本的Web项目调试弹出window安全

    解决方法:NTLM身份验证去掉就行.

  3. Docker部属Nsq集群

    用一了段时间NSQ还是很稳定的.除了稳定,还有一个特别值的说的就是部署非常简单.总想写点什么推荐给大家使用nsq来做一些东西.但是就是因为他太简单易用,文档也比较简单易懂.一直不知道要写啥!!!!! ...

  4. python第四课——线程、进程、协程

    面试or笔试题:简述线程.进程.协程之间的关系? 内容概要 1.进程与线程优.缺点的比较 2.适用情况 3.线程 线程的创建 setDaemon join event RLock 队列 4.进程 创建 ...

  5. react-native绑定优酷SDK播放视频-附效果和git源码

    ReactNative绑定优酷SDK需要用到两部分知识: 优酷本身的sdk绑定: RN与原生界面的交互: 效果: RN版本:0.49.3 代码更新日期:2017.10.26 下文也根据绑定优酷需要的两 ...

  6. session文件无法并发操作

    session_start():打开服务器上的session文件. session_commit():会把$_SESSION数组的内容写入到服务器上的session文件中,但不会清空$_SESSION ...

  7. PHP开发框架之YII框架学习——碾压ThinkPHP不是梦

      前  言 JRedu 程序猿是一种慵懒的生物!能少敲一行代码,绝对不会多敲一个字符!所以,越来越多的开发框架应运而生,在帮助我们完成功能的同时,极大程度上也帮我们节省了人力物力,而且也提高了系统的 ...

  8. bug:未考虑实际使用场景

    最近bug比较多,汗颜. 1.需求背景 (1)app活动页面,用户参与并完成能够以1分钱价格购买指定商品(2)这个页面可分享至app以外的渠道,如微信.QQ等 2.这个bug的表现形式:用户在第三方渠 ...

  9. Flex 基础语法(三)

    2.flex-wrap 默认情况下,项目都排在一条线(又称"轴线")上.flex-wrap属性定义,如果一条轴线排不下,如何换行 属性 含义 nowrap(默认值) 不换行 wra ...

  10. Python爬虫入门:Urllib库的高级使用

    1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...