设为首页 收藏本站
查看: 1261|回复: 0

[经验分享] SQL备份与恢复之事务日志

[复制链接]

尚未签到

发表于 2018-10-22 12:09:04 | 显示全部楼层 |阅读模式
  一、事务日志逻辑体系结构
  SQL Server 事务日志按逻辑运行,就好像事务日志是一串日志记录一样。每条日志记录由一个日志序列号 (LSN) 标识。每条新日志记录均写入日志的逻辑结尾处,并使用一个比前面记录的 LSN 更高的 LSN。

  日志记录按创建时的串行序列存储。每条日志记录都包含其所属事务的>  数据修改的日志记录或者记录所执行的逻辑操作,或者记录已修改数据的前像和后像。前像是执行操作前的数据副本;后像是执行操作后的数据副本。
  操作的恢复步骤取决于日志记录的类型:
  (1)记录逻辑操作

  •   若要前滚逻辑操作,请再次执行该操作。
  •   若要回滚逻辑操作,请执行相反的逻辑操作。
  (2)记录前像和后像

  •   若要前滚操作,请应用后像。
  •   若要回滚操作,请应用前像。
  许多类型的操作都记录在事务日志中。这些操作包括:

  •   每个事务的开始和结束。
  •   每次数据修改(插入、更新或删除)。这包括系统存储过程或数据定义语言 (DDL) 语句对包括系统表在内的任何表所做的更改。
  •   每次分配或释放区和页。
  •   创建或删除表或索引。
  回滚操作也记录在日志中。每个事务都在事务日志中保留空间,以确保存在足够的日志空间来支持由显式回滚语句或遇到错误引起的回滚。保留的空间量取决于在事务中执行的操作,但通常等于用于记录每个操作的空间量。事务完成后将释放此保留空间。
  日志文件中从必须存在以确保数据库范围内成功回滚的第一条日志记录到最后写入的日志记录之间的部分称为日志的活动部分,即“活动日志”。这是进行数据库完整恢复所需的日志部分。永远不能截断活动日志的任何部分。
  二、事务日志物理体系结构
  事务日志是一种回绕的文件。例如,假设有一个数据库,它包含一个分成四个虚拟日志文件的物理日志文件。当创建数据库时,逻辑日志文件从物理日志文件的始端开始。新日志记录被添加到逻辑日志的末端,然后向物理日志的末端扩张。日志截断将释放记录全部在最小恢复日志序列号 (MinLSN) 之前出现的所有虚拟日志。“MinLSN”是成功进行数据库范围内回滚所需的最早日志记录的日志序列号。下图所示为4个虚拟日志文件的日志文件。
DSC0000.png

  当逻辑日志的末端到达物理日志文件的末端时,新的日志记录将回绕到物理日志文件的始端。如下图所示。
DSC0001.png

  这个循环不断重复,只要逻辑日志的末端不到达逻辑日志的始端。如果经常截断旧的日志记录,始终为到下一个检查点前创建的所有新日志记录保留足够的空间,则日志永远不会填满。
  但是,如果逻辑日志的末端真的到达了逻辑日志的始端,如果未启用 FILEGROWTH 设置,或保存日志文件的磁盘的可用空间比 growth_increment 中指定的数量少,则会出现 9002 错误。
  如果日志包含多个物理日志文件,则逻辑日志在回绕到首个物理日志文件始端之前,将沿着所有物理日志文件移动。
  三、检查点(Checkpoint)
  检查点将脏数据页从当前数据库的缓冲区高速缓存刷新到磁盘上。
DSC0002.png

  这最大限度地减少了数据库完整恢复时必须处理的活动日志部分。 在完整恢复时,需执行下列操作:

  •   前滚系统停止之前尚未刷新到磁盘上的日志记录修改信息。
  •   回滚与未完成的事务(如没有 COMMIT 或 ROLLBACK 日志记录的事务)相关联的所有修改。
  检查点在数据库中执行下列过程:

  •   将记录写入标记检查点起点的日志文件。
  •   将为检查点记录的信息存储在检查点日志记录链内。
  •   如果数据库使用简单恢复模式,则标记在 MinLSN 前重用的空间。
  •   将所有脏日志和数据页写入磁盘。
  •   将标记检查点结束的记录写入日志文件。
  •   将这条链起点的 LSN 写入数据库启动页。
  SQL Server 数据库引擎将生成自动检查点。 自动检查点之间的间隔基于使用的日志空间量以及自上一个检查点以来经历的时间。 如果只在数据库中进行了很少的修改,自动检查点之间的时间间隔可能变化很大并且很长。 如果修改了大量数据,自动检查点也会经常出现。
  如果数据库使用的是简单恢复模式,自动检查点将截断事务日志中没有使用的部分。 但是,如果数据库使用的完整恢复模式或大容量日志恢复模式,自动检查点则不会截断日志。
  四、活动日志
  日志文件中从 MinLSN 到最后写入的日志记录这一部分称为日志的活动部分,或者称为“活动日志”。 这是进行数据库完整恢复所需的日志部分。 永远不能截断活动日志的任何部分。 所有的日志记录都必须从 MinLSN 之前的日志部分截断。
  下图显示了具有两个活动事务的结束事务日志的简化版本。 检查点记录已压缩成单个记录。
DSC0003.png

  LSN 148 是事务日志中的最后一条记录。 在处理 LSN 147 处记录的检查点时,Tran 1 已经提交,而 Tran 2 是唯一的活动事务。 这就使 Tran 2 的第一条日志记录成为执行最后一个检查点时处于活动状态的事务的最旧日志记录。 这使 LSN 142(Tran 2 的开始事务记录)成为 MinLSN。
  五、预写事务日志
  SQL Server 使用预写日志 (WAL),此日志确保在将关联的日志记录写入磁盘后再将数据修改写入磁盘。这维护了事务的 ACID (原子、一致、隔离和持久)属性。
  若要了解预写日志的工作原理,最重要的是了解如何将修改的数据写入磁盘。SQL Server 维护当必须检索数据时,将数据页读入的缓冲区高速缓存。数据修改不是直接在磁盘上进行,而是修改高速缓冲存储器中的页副本。直到数据库中出现检查点,或者必须将修改写入磁盘才能使用缓冲区来容纳新页时,才将修改写入磁盘。将修改后的数据页从高速缓冲存储器写入磁盘的操作称为刷新页。在高速缓存中修改但尚未写入磁盘的页称为“脏页”。
  对缓冲区中的页进行修改时,将在记录修改的日志高速缓存中生成一条日志记录。在将关联的脏页从高速缓冲存储器刷新到磁盘之前,必须将这条日志记录写入磁盘。如果在写入日志记录前刷新脏页,则该脏页便会在磁盘上创建修改。如果服务器在将日志记录写入磁盘前失败,则不能回滚此修改。SQL Server 具有防止在写入关联的日志记录前刷新脏页的逻辑。日志记录将在提交事务时写入磁盘。

  注意: 某些>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-624966-1-1.html 上篇帖子: MySQL Study之--Percona Server版本 下篇帖子: 两个sql查询语句之间的左连接left join
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表