sql server 备份与回复系列五 完整格局下的备份与还原

一.概述

  前边介绍了简要复苏格局和大体量复苏格局,那篇三番五次写完整恢复生机情势下的备份与回复。在整机苏醒情势里最大的独到之处是一旦能得逞备份尾日志,就足以过来到日志备份内涵盖的别的时点(“时点恢复”)。当然相比较前两种形式它是捐躯了磁盘I/O品质。

恢复模式

备份策略

数据安全性

I/O性能

简单恢复

完整备份+差异备份

安全最差。最后一次备份之后,所有数据操作丢失。

最优

大容量恢复

完整备份+差异备份+日志备份

折中。批量操作有丢失风险。尾日志备份失败。最后一次备份之后,所有数据操作丢失

折中

完整恢复

完整备份+差异备份+日志备份

相比上面二种最安全。尾日志备份失败。最后一次备份之后,所有数据操作丢失

最差

  在完整恢复形式下,最普遍的备份策略,如下图所示:图片 1

二. 备份

  在前章中讲到了大体量复苏方式下的备份。备份策略与大体量方式是相同的,同样是欧洲经济共同体备份+差别备份+日志备份。那里要卓越点是:当误操作暴发后,如何回复到误操作在此之前的一分钟,找出误操作在此之前的数目。
在”sql server
日志文件结构及误操作数据找回
“中有介绍误操作数据找回,不过依照第3方工具ApexSQL
Log。尽管该工具方便,但要收费啊。

  小编那里有八个BackupTest库,Curry有个Employees表

use master
--设置完全模式
ALTER DATABASE BackupTest SET  RECOVERY FULL  
--创建备份设备(有就不要执行)
use master
exec sp_addumpdevice 'disk', 'BackupTestDevice','F:\SqlService\backup\BackupTestBackup.bak'
go
--做一次完整备份到备份设备中(备份基准)
backup database  BackupTest to BackupTestDevice

--新增数据
insert BackupTest.dbo.Employees values('湖南长沙')
insert BackupTest.dbo.Employees values('湖南湘潭')
--日志备份
backup log BackupTest to BackupTestDevice

 备份集如下所示:

图片 2

-- 误操作发生, 忘记加where条件,操作时间是:2018-8-12 10:55  
delete from BackupTest.dbo.Employees 

三.还原(1)

  当误操作发生后,是供给找管理员来进展多少苏醒。
若是数据库太大,还原是须求十分长日子(注意运用副本,不要使用生产库)。
那种状态下就须求拭目以俟了。 幸免的点子:(1)是做sql审核,不在Managemnet
studio里向来操作,幸免此类工作发生.(2)是选用粒度更小的备份情势,但对应的繁杂些。

--步骤1 备份尾日志
use master
go
backup log BackupTest to BackupTestDevice with norecovery 

图片 3

go
--步骤2 从备份恢复一个全备份 ,norecovery(正在还原...)不可读写. file指备份集位置号
restore database BackupTest from BackupTestDevice with file=19, norecovery --事务不恢复

--步骤3 
restore log BackupTest from BackupTestDevice  with file=20,  norecovery --事务不恢复

--步骤4 用stopat恢复到10:54
restore log BackupTest from BackupTestDevice  with file=21, stopat='2018/8/12 10:54', recovery --事务恢复

--数据又回来了
select * from  BackupTest.dbo.Employees 

  图片 4

四.还原(2)

  在面前介绍中,有讲过,完整苏醒方式切换来大体量情势,日志链是不会暂停。下边来表达

--从完整恢复模式切换到大容量模式
ALTER DATABASE BackupTest SET  RECOVERY bulk_logged 
-- 新增
insert BackupTest.dbo.Employees values('湖南株洲')
--日志备份
backup log BackupTest to BackupTestDevice
-- 删除
delete from BackupTest.dbo.Employees 

-- 尾日志
backup log BackupTest to BackupTestDevice with norecovery 

 备份集如下所示,日志文件ID:22是在大体积情势下备份的,23是尾日志

图片 5

restore database BackupTest from BackupTestDevice with file=19, norecovery --事务不恢复
restore log BackupTest from BackupTestDevice  with file=20,  norecovery --事务不恢复
restore log BackupTest from BackupTestDevice  with file=21,  norecovery --事务不恢复
restore log BackupTest from BackupTestDevice  with file=22,  recovery 

  当日志还原到文件ID:22时,报错,如下图所示

图片 6

   跳过文件ID:22, 使用23来交付业务,也会报错,如下所示:

restore log BackupTest from BackupTestDevice  with file=23,  recovery

图片 7

   经过测试,还原失利,错误是指:与上二遍复苏到钦命时间点有提到。

  上面在测试贰个新库TestFULLToBulk

--设置完全模式
ALTER DATABASE TestFULLToBulk SET  RECOVERY FULL  
--做一次完整备份到备份设备中(备份基准)
backup database  TestFULLToBulk to BackupTestDevice
insert TestFULLToBulk.dbo.product values('湖南株洲')
--日志备份
backup log TestFULLToBulk to BackupTestDevice
--设置大容量
ALTER DATABASE TestFULLToBulk SET RECOVERY bulk_logged   

insert TestFULLToBulk.dbo.product values('湖南湘潭')
--日志备份
backup log TestFULLToBulk to BackupTestDevice

  备份集如下:文件ID28是在大体量下开始展览的备份

  图片 8

backup log TestFULLToBulk to BackupTestDevice with norecovery 
go
restore database TestFULLToBulk from BackupTestDevice with file=26, norecovery 
go
restore log TestFULLToBulk from BackupTestDevice  with file=27,  norecovery 
go
restore log TestFULLToBulk from BackupTestDevice  with file=28,  recovery 

  上边还原成功,注明了一体化恢复生机模式切换成大容积方式,日志链是不会暂停。

 

相关文章