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

4-把最后LSN也记录进去备份文件
FirstLSN
LastLSN
CheckpointLSN
DatabaseBackupLSN
DifferentialBaseLSN
BOOTPAGE里只有DifferentialBaseLSN有值

总体来说,差异备份文件里会存放
FirstLSN
LastLSN
CheckpointLSN
DatabaseBackupLSN
DifferentialBaseLSN
(2)活动日志
(3)差异页面
还原过程:
DifferentialBaseLSN作用:要还原差异备份先要还原一个完整备份,使用NORECOVERY选项,再还原差异备份,当还原差异备份的时候,数据库根据差异备份文件里的DifferentialBaseLSN的值跟
数据库BOOTPAGE保存的DifferentialBaseLSN的值进行比较,如果对不上,那么这个差异备份不能还原,另外一个是作为差异备份还原的基准LSN,差异备份文件里的CheckpointLSN如果小于DifferentialBaseLSN
那么也是没有必要还原
1-将页面从差异备份文件里读出来,然后读出页头的LSN号,跟差异备份文件里的CheckpointLSN进行比较,如果大于CheckpointLSN 并小于LastLSN,那么拿出差异备份文件里的活动日志对改页面进行redo和undo
差异备份的缺点
--脚本
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

您真的理解了SQLSERVER的日志链了吗?
http://www.cnblogs.com/lyhabc/p/3460272.html
SQL Server差异备份的备份/还原原理的更多相关文章
- SQL server 2008数据库的备份与还原、分离(转)
SQL server 2008数据库的备份与还原.分离(转) 一.SQL数据库的备份: 1.依次打开 开始菜单 → 程序 → Microsoft SQL Server 2008 → SQL Ser ...
- SQLServer2008修改sa密码的方法与SQL server 2008数据库的备份与还原
sa密码的修改转载自:http://blog.csdn.net/templar1000/article/details/20211191 SQL server 2008数据库的备份与还原转自 :htt ...
- SQL Server 批量主分区备份(Multiple Jobs)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 案例分析(Case) 方案一(Solution One) 方案二(Solution Two) ...
- SQL Server 批量主分区备份(One Job)
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 案例分析(Case) 实现代码(SQL Codes) 主分区完整.差异还原(Primary B ...
- SQL Server数据库定时自动备份
SQL Server 数据库定时自动备份[转] 在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求 ...
- SQL Server 维护计划实现数据库备份(策略实战)
一.背景 之前写过一篇关于备份的文章:SQL Server 维护计划实现数据库备份,上面文章使用完整备份和差异备份基本上能解决数据库备份的问题,但是为了保障数据更加安全,我们需要再次完善我们的备份计划 ...
- SQL Server 维护计划实现数据库备份(Step by Step)(转)
SQL Server 维护计划实现数据库备份(Step by Step) 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server ...
- SQL Server如何提高数据库备份的速度
对于一个数据库完整备份来说,备份的速度很大程度上取决于下面两个因素:读磁盘数据.日志文件的吞吐量,写磁盘数据文件的吞吐量. 下图是备份过程中磁盘的变化情况: 读吞吐量 读吞吐量的大小取决于磁盘读取数据 ...
- (后台)SQL Server 数据库定时自动备份(转)
转自博客园: SQL Server 数据库定时自动备份[转] 在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以 ...
随机推荐
- 【学习篇:他山之石,把玉攻】Ajax请求安全性讨论
在开发过程中怎样考虑ajax安全及防止ajax请求攻击的问题. 先上两段网摘: Ajax安全防范的方法: 判断request的来源地址.这样的方式不推荐,因为黑客可以更改http包头,从而绕过检测. ...
- opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较
opencv中的SIFT,SURF,ORB,FAST 特征描叙算子比较 参考: http://wenku.baidu.com/link?url=1aDYAJBCrrK-uk2w3sSNai7h52x_ ...
- Nginx - 配置
1 自动显示目录 autoindex on; 1.1 显示文件大小 autoindex_exact_size off; 默认为on,显示出文件的确切大小,单位是bytes. 改为off后,显示出文件的 ...
- jquery插件开发
jQuery是一个封装的很好的类,比如我们用语句$("#btn1") 会生成一个 jQuery类的实例. 一.jQuery插件开发注意要点 1.使用闭包,避免全局依赖,避免第三方破 ...
- Matlab中一些函数的区别
1.fix, floor,ceil,round 都是对x取整,但取整方向不同. fix(x):向0取整(也可以理解为向中间取整) floor(x):向左取整(从名字看,地板,表示下面) c ...
- delphi 步长不等于 1 的方法
i:=; do begin ... INC(i,); end; 不能用for循环,只能用像上面的方法折衷一下
- 如何解决插入Oracle数据中文为乱码问题
1.首先,Oracle查询编码:select * from v$nls_parameters;//看看是否GBK 2.如果是用Servlet或者别的,插入数据之前输出一下,看看是否乱码.比如: doP ...
- C#调用C++动态库方法及动态库封装总结
我只是粗浅的学习过一些C++语法, 变量类型等基础内容, 如有不对的地方还望指出. 如果你跟我一样, 对指针操作不了解, 对封装C++动态库头疼的话, 下面内容还是有帮助的. 转载请注明出处: htt ...
- Android 单元测试(junit、mockito、robolectric)
1.运用JUnit4 进行单元测试 首先在工程的 src 文件夹内创建 test 和 test/java 文件夹. 打开工程的 build.gradle(Module:app)文件,添加JUnit4依 ...
- .NET CLI 命令
您可以立即使用的部分通用 .NET CLI 命令 命令 说明 dotnet new 使用 C# 语言初始化用于类库或控制台应用程序的有效项目. dotnet restore 还原在指定项目的 proj ...