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

原文: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-07-28 21:10:02

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

SQL Server误区:有关备份的30个误区

误区 #30:有关备份的30个误区 全是错的 在开始有关备份的误区之前,如果你对备份的基础没有了解,请看之前我在TechNet Magazine的文章:Understanding SQL Server Backups. 30-01)备份操作会导致阻塞 不,备份不会导致对用户对象加锁,虽然备份对IO系统的负担导致看起来阻塞了,但实际上不会.唯一的特例是当备份包含到那些最小日志操作涉及到的数据区需要被加锁时,这个操作会阻塞CheckPoint,但DML操作永远不会受到备份操作的阻塞. 30-02)由

如何在SQL server 2005中将数据库备份路径设为网络路径

server|备份|数据|数据库|网络 如何在SQL server 2005中将数据库备份路径设为网络路径如:"\\BackupPC\dbback\" SQL server 2000中是可以的呀,怎么到2005就不好这样做的???=================================现在备份数据库真麻烦,都要先备份到本机,然后再剪切到网上邻居的另一台电脑中,真郁闷!!!! ===================================================

SQL Server 2014的原生备份加密新特性

SQL Server 2014 CTP2之后公布了一项针对备份的特性,那就是原生备份加密.考虑到之前网络上影响很坏的数据库泄漏事件,本质上都是数据库备份泄漏给第三方导致,SQL Server的原声数据备份可以使得即使备份本身被盗,在没有加密证书的情况下也无法使用,这有效的解决了上述数据泄漏问题. 原先的解决方案 在SQL Server 2014之前,如果希望实现对备份实现加密,会通过如下两种方式之一实现: 使用透明数据加密(TDE)加密整个数据库,从而使得备份和事务日志也会被加密 使用第三方备份

SQL Server 数据库定时自动备份

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

SQL Server差异备份简介

此备份和还原主题与所有 SQL Server 数据库相关. 差异备份所基于的是最近一次的完整数据备份. 差异备份仅捕获自该次完整备份后发生更改的数据. 差异备份所基于的完整备份称为差异的"基准". 完整备份(仅复制备份除外)可以用作一系列差异备份的基准,包括数据库备份.部分备份和文件备份. 文件差异备份的基准备份可以包含在完整备份.文件备份或部分备份中. 本主题内容: 优点 差异备份概述 对只读数据库进行差异备份 相关任务 优点 与创建完整备份相比,创建差异备份的速度可能非常快. 差异

SQL Server 维护计划实现数据库备份

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

【SQL Server】万事无忧——备份和恢复

在SQL Server中,使用数据库备份和还原工具可以创建数据库的拷贝,将该拷贝放到安全的地方,当服务器崩溃或数据被破坏时,该拷贝就可以用于还原数据库.这就是我们本篇文章要说的备份和恢复. (1)完整备份与恢复 制作数据库中所有内容的副本,在备份过程中需要花费的时间和空间最多,不宜频繁进行 恢复时,仅需要恢复最后一次全库备份即可 备份:backup database 数据库名 to 备份设备名 with [name='备份的名称'][init /noinit] <SPAN style="F

如何远程把sql server中的数据备份和导入到本地sql server中?

server|备份|数据 一:备份远程数据库,将备份文件拷贝到本地,然后在本地还原数据库. 二:将远程数据库的数据文件跟日志文件拷贝到本地(拷贝之前需要先停止远程数据库服务,否则无法进行拷贝),然后在本地进行附加数据库操作. 三:(需要知道远程数据库的登录名跟密码)打开企业管理器,在"sql server"组上右键选择"新建sql server注册",点下一步,在"可用的服务器"中输入远程服务器的IP,然后点击"添加",继续下

评点SQL Server 2008的恢复备份模式

简介 本文将探讨SQL Server 2008使用的恢复模式的选择,以及可用于备份一个数据库的各种方法,如差异备份和事物日志备份.此外,事务日志备份也将被介绍,该机制使恢复模式成为可能.备份,事务日志,以及恢复模式是相互关联,当设置的一个时将影响影响的另一选择. 在先前的文章(SQL 2008 Backup and Restore),对全备份和许多现有的可供选择的配置进行了介绍.从备份的命令行和SQL Server Management Studio都进行了详细介绍.此外,也对SQL Serve