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

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

记住一点:差异备份是基于最后一次完整备份的差异,而不是基于最后一次差异的差异

备份过程:

1-完整备份之后有无对数据库做过修改,如果有,记录数据库的最后LSN(Last LSN)

如果完整备份之后无对数据库做过修改,那么差异备份就没有意义了

2-做差异备份时根据差异位图读取差异页面内容

注意:差异位图记录了自从最后一次完整备份以来数据库中有变化的页面,这样在做差异备份时候就不用扫全库页面,只需要读取有差异的页面

3-在备份之前,数据库会做一次检查点,备份时把最后一次检查点的LSN记录进去备份文件

4-把最后LSN也记录进去备份文件

5-这时候数据库的BOOTPAGE存放了数据库最后一次完整备份的Checkpoint LSN

这时候备份文件里会存放几个LSN值

FirstLSN
LastLSN
CheckpointLSN
DatabaseBackupLSN
DifferentialBaseLSN

BOOTPAGE里只有DifferentialBaseLSN有值

总体来说,差异备份文件里会存放

(1)下面的LSN值

FirstLSN
LastLSN
CheckpointLSN
DatabaseBackupLSN
DifferentialBaseLSN

(2)活动日志

(3)差异页面


还原过程:

DifferentialBaseLSN作用:要还原差异备份先要还原一个完整备份,使用NORECOVERY选项,再还原差异备份,当还原差异备份的时候,数据库根据差异备份文件里的DifferentialBaseLSN的值跟

数据库BOOTPAGE保存的DifferentialBaseLSN的值进行比较,如果对不上,那么这个差异备份不能还原,另外一个是作为差异备份还原的基准LSN,差异备份文件里的CheckpointLSN如果小于DifferentialBaseLSN

那么也是没有必要还原

1-将页面从差异备份文件里读出来,然后读出页头的LSN号,跟差异备份文件里的CheckpointLSN进行比较,如果大于CheckpointLSN 并小于LastLSN,那么拿出差异备份文件里的活动日志对改页面进行redo和undo

如果小于CheckpointLSN ,那么这个页面不需要还原,因为数据库里面的页面版本比差异备份文件里的页面还要新

活动日志里的日志记录也保存了页面编号,对于页面的redo和undo是比较方便的

2-把redo和undo完毕的页面写回数据库

差异备份的缺点

差异备份基于最后一次完整备份的差异,那么,对于一个繁忙的数据库,在一段时间内做了几次差异备份,无论这中间有多少次Checkpoint,SQL Server依然将这些

基于完整备份的差异页面放入差异备份文件,按道理来说,一个页面在一次Checkpoint之后,如果没有再发生任何修改,那么是不需要放入差异备份文件里面的(如果是基于最后一次差异的差异)

因为差异位图无法基于差异的差异,这样会导致,有时候差异备份文件比完整备份文件还要大

--脚本

SELECT DB_ID(‘sss‘)
DBCC fileheader(16)

BACKUP DATABASE [sss] TO DISK=‘c:\sss_full.bak‘ 

RESTORE FILELISTONLY FROM DISK =‘c:\sss_full.bak‘
RESTORE HEADERONLY FROM DISK =‘c:\sss_full.bak‘ 

1585000000012200042 --backuplsn
1686000000056400078 --ckpt lsn
1686000000060800001 --last lsn

CREATE TABLE tessssss(id INT)
go

INSERT tessssss SELECT 1 UNION ALL SELECT 2

BACKUP DATABASE [sss] TO DISK=‘c:\sss_diff.bak‘ WITH Differential 

RESTORE HEADERONLY FROM DISK =‘c:\sss_diff.bak‘
1686000000056400078 --backuplsn
1686000000056400078 --diff lsn
1686000000065400151 --ckpt lsn
1686000000071800001 --last lsn

INSERT tessssss SELECT 3 UNION ALL SELECT 4

BACKUP DATABASE [sss] TO DISK=‘c:\sss_diff2.bak‘ WITH Differential 

RESTORE HEADERONLY FROM DISK =‘c:\sss_diff2.bak‘
1686000000056400078 --backuplsn
1686000000056400078 --diff lsn
1686000000071900004 --ckpt lsn
1686000000072300001 --last lsn

--FirstLSN
--LastLSN
--CheckpointLSN
--DatabaseBackupLSN
--DifferentialBaseLSN

MySQL的xtrabackup备份工具的原理其实也是差不多,读取页面,根据CheckpointLSN和页面的LSN比较进行备份和还原

所以LSN在数据库的备份还原里面起着重要作用

对于最后一个LSN可以参考:

您真的理解了SQLSERVER的日志链了吗?
http://www.cnblogs.com/lyhabc/p/3460272.html

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

时间: 2024-10-11 00:23:40

SQL Server差异备份的备份/还原原理的相关文章

SQL Server 恢复模式、备份方式和还原方式之间的简单关系

恢复模式 备份方式 还原方式 恢复模式 简单模式 完整备份.差异备份 完整还原.差异还原 恢复模式 完整模式 完整备份.差异备份,事务日志备份 完整还原.差异还原.事务日志还原(可还原到备份的任意时间点) 恢复模式 大容量日志 完整备份.差异备份,事务日志备份 完整还原.差异还原.事务日志还原(不可还原到备份的任意时间点) 附注: 恢复模式:简单模式在完整备份和差异备份的过程对日志进行标记"可复用",即截断了日志: 恢复模式:完整模式在完整备份和差异备份不对日志进行标记,只有事务日志备

SQLServer2008修改sa密码的方法与SQL server 2008数据库的备份与还原

sa密码的修改转载自:http://blog.csdn.net/templar1000/article/details/20211191 SQL server 2008数据库的备份与还原转自 :http://www.cnblogs.com/zgqys1980/archive/2012/07/04/2576382.html 一.SQLServer2008修改sa密码的方法 1. 先用Window身份验证方式登陆进去,选择数据库实例,右键选择属性--安全性:把服务器身份验证选项从"Window身份验

SQL Server 维护计划实现数据库备份(策略实战)

一.背景 之前写过一篇关于备份的文章:SQL Server 维护计划实现数据库备份,上面文章使用完整备份和差异备份基本上能解决数据库备份的问题,但是为了保障数据更加安全,我们需要再次完善我们的备份计划: 下面这篇文章主要加入了日志备份,并对设计备份的频率和设计命名规范等问题进行实战: 二.最佳实践 (一) 备份计划 1) 每周星期日的2:00:00执行数据库的完整备份: 2) 每周星期一至星期六每天的2:00:00执行数据库的差异备份: 3) 每天在8:00:00和23:59:59之间.每1小时

SQL Server 数据库定时自动备份(转载)

SQL Server 数据库定时自动备份 本文来源于转载:http://www.cnblogs.com/zhangq723/archive/2012/03/13/2394102.html 前提:在使用下面的备份方式之前需要确保你的Sqlserver Agent服务启动,切设置为自动启动.否则当你服务器重启了但是Agent服务没有启动,那么自动备份任务就不会执行 (一)使用TSql代码自动备份 在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本

SQL Server 维护计划实现数据库备份(Step by Step)(转)

SQL Server 维护计划实现数据库备份(Step by Step) 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server 数据库最小宕机迁移方案,里面使用SQL脚本(T-SQL)完成完全备份.差异备份.完全还原.差异还原等:        有了上面的基础,我们加入了数据库的备份元素,通过维护计划来生成数据库的备份文件,这包括两种文件,数据库的完全备份与差异备份,有了这两个文件,我们可以通过SQL Server 备份和还

SQL Server如何提高数据库备份的速度

对于一个数据库完整备份来说,备份的速度很大程度上取决于下面两个因素:读磁盘数据.日志文件的吞吐量,写磁盘数据文件的吞吐量. 下图是备份过程中磁盘的变化情况: 读吞吐量 读吞吐量的大小取决于磁盘读取数据的速度,而磁盘读取的速度又取决于数据文件在磁盘中的位置.因此,位于不同盘符上不同数据库文件的读取速度都不相同. 测量读吞吐量的一个方法就是进行一次数据库完整备份,然后使用Windows性能监控器(perfmon)来监控数据库文件所在磁盘的Read bytes/sec 性能计数器.保存备份文件的磁盘应

SQL Server 数据库定时自动备份

原文:SQL Server 数据库定时自动备份 SQL Server 数据库定时自动备份——每天定时备份,保留前8天的备份 利用SQL Server代理新建作业来定期备份 1)在数据库库的[SQL Server代理]->[作业],右键[新建作业] 2)在[常规]选项卡设置[名称](自定义) 3)在[步骤]选项卡中点击[新建],然后在弹出的窗口的[常规]选项卡中设置“步骤名称”(自定义):选择“类型”为“Transact-SQL 脚本(T-SQL)”(默认):选择“数据库”为你要备份的数据库:添加

MS SQL Server 定时任务实现自动备份

SQL Server Express 版本是没有SQL 代理服务的,从而导致不能使用SQL Server的定时自动备份功能.真心感觉这就是一个坑,虽然Express是学习的版本,但是精简的也太多了.另外一点不能忍受的是居然没有SQL Profile 监控执行语句数据功能,[手动cry] 好了,来说一下如果你使用了Express,如何进行SQL Server 的自动备份吧: ①方法就是:SQL备份数据库语句  +  windows 定时任务计划 ②目录结构为: ③DBBacUp.bat  备份的脚

SQL Server数据库镜像的页面自动修复原理

SQL Server数据库镜像的页面自动修复原理 主库页面损坏 镜像库页面损坏 LSN用来保证事务的时序 LSN保存在数据页面头,主库的LDF文件,镜像库的LDF文件,那么在这三者就搭起了一条沟通的桥梁 大家通过对比LSN来得知大家的数据是否一致 在分布式数据库领域,也是需要保证事务时序的,也是通过LSN 有些数据库例如Oracle用的是SCN来保证各个分布数据库的时序,保证各个数据库的数据一致 其实无论是分布式领域还是非分布式领域都是一样,分布式领域也没有太多高大上的东西,都是一样要保证数据一