事务日志初探(二)—简单恢复模式

事务日志初探(二)—简单恢复模式

简述

    在简单恢复模式下,日志文件的作用仅仅是保证了SQL Server事务的ACID属性。并不承担具体的恢复数据的角色。正如”简单”这个词的字面意思一样,数据的备份和恢复仅仅是依赖于手动备份和恢复.我们简单介绍下三种恢复模式。

1.完整恢复模式

   这种模式会为所有操作都记录日志,当数据文件被破坏时,可以备份尾部事务日志,并用于将数据库还原到给定的时间点。因此OLTP生产系统通常会使用完整的恢复模式。

2.大容量日志恢复模式

   这种模式把日志记录量最小化,只为大容量操作记录日志。

3.简单恢复模式

   我们本篇的重点介绍该模式,该模式下不保存事务日志,由于检查点进程会截断事务日志,因此不需要维护事务日志。如果把数据库从其他恢复模式切换到这个模式下,会破坏事务日志的连续性,因为无法备份事务日志,在这种模式下,无法进行到某个时间的恢复。

  事务日志备份:仅仅备份自上次完整备份或日志备份之后的记录。在简单模式下,日志备份毫无意义(SQL Server不允许在简单恢复模式下备份日志)。

 

image

我们在每周一0点做一次完整备份,在周三0点和周五0点分别做差异备份。在简单恢复模式下,如果周六数据库崩溃。我们的恢复计划只有根据周一0点的做的完整备份恢复后,再利用周五0点的差异备份进行恢复.而周五0点之后到服务器崩溃期间所有的数据将会丢失。

    正如”简单”这个词所涵盖的意思,在简单恢复模式下,日志可以完全不用管理。而备份和恢复完全依赖于我们自己的完整和差异备份.

     恢复模式是一个数据库级别的参数,可以通过在SSMS里或通过SQL语句进行配置:

image

简单恢复模式下日志的空间使用

    日志文件会划分成多个VLF进行管理,在逻辑上记录是线性的,给每个记录一个顺序的,唯一的LSN。

    而在简单恢复模式下,为了保证事务的持久性,那些有可能回滚的数据会被写入日志。这些日志需要被暂时保存在日志以确保在特定条件下事务可以顺利回滚。这就涉及到了一个概念—最小恢复LSN(Minimum Recovery LSN(MinLSN) )

    MinLsn是在还未结束的事务记录在日志中最小的LSN号,MinLSN是下列三者之一的最小值:

  • CheckPoint的开始LSN

  • 还未结束的事务在日志的最小LSN

  • 尚未传递给分发数据库的最早的复制事务起点的 LSN.

    下图是一个日志的片段:

3

    (图片摘自MSDN)

    可以看到,最新的LSN是148,147是CheckPoint,在这个CheckPoint之前事务1已经完成,而事务2还未完成,所以对应的MinLSN应该是事务2的开始,也就是142.

    而从MinLSN到日志的逻辑结尾处,则称为活动日志(Active Log)。

    而活动日志分布在物理VLF上的关系可以用下图表示:

4

    因此,VLF的状态是源自其上所含有的LSN的状态,可以分为两大类:活动VLF和不活动VLF

而更加细分可以将VLF的状态分为以下四类:

  1. 活动(Active) –在VLF 上存储的任意一条LSN是活动的时,则VLF则为活动状态,即使一个200M的VLF只包含了一条LSN,如上图的VLF3
  2. 可恢复(Recoverable) – VLF是不活动的,VLF上不包含活动LSN,但还未被截断(truncated)
  3. 可重用(Reusable) – VLF是不活动的,VLF上不包含活动LSN,已经被截断(truncated),可以重用
  4. 未使用(Unused) – VLF是不活动的,并且还未被使用过

    概念如下图:

3

     而所谓的截断(truncated)只是将可恢复状态的VLF转换到可重用状态。在简单恢复模式下,每一次CheckPoint,都会去检查是否有日志可以截断.如果有inactive的VLF时,CheckPoint都会将可截断部分进行截断,并将MinLSN向后推.

    在日志达到日志文件(ldf文件)末尾时,也就是上图的VLF8时,会重新循环到VLF1开始,以便让空间进行重复利用.所以日志虽然可以从物理顺序上是从VLF1到VLF8,但逻辑顺序可以是从VLF6开始到VLF2结束:

5

因此可以看出,简单恢复模式下日志是不保存的(当事务结束后,相关的会被截断)。仅仅是用于保证事务回滚和崩溃恢复的用途.所以备份日志也就无从谈起,更不能利用日志来恢复数据库。

总结

    本文介绍了简单恢复模式下日志的原理,并简单的引出了一些备份或者恢复数据的基础。而实际上,除了在开发或测试环境下。使用简单恢复模式的场景并不多,因为在现实生活中,在生产环境允许几个小时的数据丢失的场景几乎没有.下篇文章将会讲述在完整恢复模式下,日志的作用。

参考:http://www.cnblogs.com/CareySon/archive/2012/02/17/2355200.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119750.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月25日 上午7:00
下一篇 2021年11月25日 上午8:00


相关推荐

  • 在乌镇拼命“洗白”的拼多多

    在乌镇拼命“洗白”的拼多多“虽然我们没为别人拼过命,但是一定为别人拼过多多。“以往冬初的乌镇世界互联网大会,刘强东往往会穿着显腰瘦的西服出现,不过今年没出现,倒是友商拼多多的创始人黄峥,来了。黄峥…

    2022年5月26日
    43
  • SQLServer2K远程连接问题解决方案(转载自飞狐小屋)

    SQLServer2K远程连接问题解决方案(转载自飞狐小屋)由于特定需求,最近实验室需要远程连接外地的sqlserver2000服务器,最开始怎么连也连不上,出现了很多问题,但是在今天上午,借用实验室的测试条件(一个公网IP,两个教育网静态IP),终于调试通过,也算是完成了老师的任务,在这里写下自己的心得,参考了很多网上的文章和论坛里的问题,希望对有此需要的有帮助。不完善之处,也请留言。废话少说,进入主题。步骤:一看ping服务…

    2026年4月17日
    7
  • 【HDU2865】构造矩阵+Burnside定理+欧拉函数类似poj2888[通俗易懂]

    【HDU2865】构造矩阵+Burnside定理+欧拉函数类似poj2888[通俗易懂]BirthdayToyTimeLimit:2000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):466    AcceptedSubmission(s):238ProblemDescriptionAekdyCoinloves

    2022年7月23日
    8
  • AndroidManifest.xml 最全详解

    AndroidManifest.xml 最全详解AndroidManif xml 是每个 android 程序中必须的文件 它位于整个项目的根目录 我们每天都在使用这个文件 往里面配置程序运行所必要的组件 权限 以及一些相关信息 但是对于这个文件 我们真正又了解多少了 还是只是停留在只会简单的配置 而不明白其中的具体含义 以及为什么要这样设置 今天就让我们来详细的学习一下这个文件里各项参数的具体含义 因为它是整个应用的入口 所以有助于我们更加

    2026年3月20日
    2
  • 简述sealed关键字_java field

    简述sealed关键字_java fieldsealed的中文意思是密封,故名思义,就是由它修饰的类或方法将不能被继承或是重写。sealed关键字:在类声明中使用sealed可防止其它类继承此类;在方法声明中使用sealed修饰符可防止扩充类重写此方法。相当于Java中的final类和final方法密封类:密封类在声明中使用sealed修饰符,这样就可以防止该类被其它类继承。如果试图将一个密封类作为其它类的基类,C#将提示出错。在哪些场合…

    2025年8月15日
    4
  • [特殊字符] Nano-Banana实战教程:为小米生态链产品定制拆解图生成流程

    [特殊字符] Nano-Banana实战教程:为小米生态链产品定制拆解图生成流程

    2026年3月14日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号