首页 > 代码库 > 对事务日志备份和差异被备份的理解

对事务日志备份和差异被备份的理解

先看概念:

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


事务日志备份: 事务日志包含创建最后一个备份(可以是完整备份也可以是差异备份)之后对数据库进行的更改。因此,在进行事务日志备份前,先要进行一次完整的数据库备份才可以。如果你设置了恢复模式为【简单】,你将无法使用【事务日志】备份。SQL Server 2000 和 SQL Server 2005: 创建事务日志备份,您必须使用完整恢复或大容量日志记录恢复模型。

------------------------------------------------------------------------------------------------------------

案例如下:

 有个test的数据库里面有一张student的表,表中有三条数据,备份和数据情况如下:


8点               student表三条数据                                      做一次完整备份test_all.bak

8点10     student表插入一条数据,,共四条数据         做一次差异备份test_chayi1.bak  同时做一次日志备份 test_rizhi1.bak

8点20     student表插入另一条数据,共5条数据    做一次差异备份test_chayi2.bak  同时做一次日志备份 test_rizhi2.bak

7BDB1D9EA0544DC5AE38EA92746BC903


现在恢复数据:

如果我想恢复8点20的数据如何恢复了?

第一种思路(采用差异备份恢复数据):

第一步;首先我把student表删除,首先恢复完整备份test_all.bak的内容。student中有三条数据。

第二步:根据差异备份的概念的定义,如果要恢复8点20的数据我们只需要将test_chayi2.bak恢复即可.


好吧我们现在开始:

首先还原完整备份,还原过程在中报错如下:

BE4F637C3B3547E5B2C7D3ED48327166


解决如下:

BF57C3F5DEC34343BA6CE6ACD28A34C2

记住要选择这两项,不然差异备份无法恢复。还原完整备份后会显示

F4DCA943899C49F581B8B328B38F52A8


现在已经恢复了完整备份,好吧我们来恢复差异备份。

报错如下:

BAB757FDA0234B85B092155BCF004E18


这个错误的原因是在恢复完整备份的时候没有选择第二项,“.....不回滚提交的日志.......”。

------------------------------------------------------------------------------------------------------------------------

第二种思路:使用事物日志进行恢复

根据定义可以知道:

“事务日志包含创建最后一个备份(可以是完整备份也可以是差异备份)之后对数据库进行的更改”。

所以如果使用事物日志进行恢复到8点20的状态的话。

首先我们先要还原完整备份和上一次的差异备份也就是先后还原完整备份和上一次的差异备份。然后还原目前的事物日志备份就可以

恢复所有数据。

为了能够更好的理解这个概念我们做如下步骤

  在8点30的时候在test数据库中的student的表中插入一条数据,也就是共6条数据.然后做一次日志备份,为test_rizhi3.bak

到此为止前期准备工作做好,我们的目的是通过日志还原到8点30的状态.

所以正常的恢复步骤如下:

第一步:恢复完整备份。注意选择 这两项:“覆盖现有数据库”,“不对数据库进行更改”,不回滚未提交的事物。可以还原其他事物日志

1038EB31BB7640D2B9B088950F7356AE


第二步:恢复最近的差异备份,也就是恢复test_chayi2.bak.注意选择这一项。

“不对数据库进行更改”,不回滚未提交的事物。可以还原其他事物日志。

E55222E0CD6544949E30C2AD130FA57A

第三步:还原目前的事物日志备份,注意。此时啥都不勾选。

E5EE1B3A94BC4F7FAD344793A83342BD

到此为止通过事物日志备份:还原了所有数据库。











对事务日志备份和差异被备份的理解