Checkpoints and the Active Log

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

原文:http://msdn.microsoft.com/en-us/library/ms179355(SQL.90).aspx

检查点在数据库中的执行过程:

  1. 在日志文件中写入LOP_BEGIN_CKPT表示checkpoint开始、
  2. 记录MinLSN,MinLSN=min(LSN of the start of the checkpoint,LSN of the start of the oldest active transaction)
  3. 如果数据库使用的是简单恢复模式,则截断(truncate)MinLSN之前的所有VLFs。如果是完整恢复或者是大容量日志模式,不会截断任何事务日志。
  4. 将dirty log 和dirty page 写入磁盘。对于dirty page 来说,即使其中存在未提交的事务,也要写入的磁盘。因为已经记录了MinLSN,所以即使脏页写入了磁盘,也可以回滚。
  5. 在日志文件中写入LOP_END_CKPT表示checkpoint结束

The section of the log file from the MinLSN to the last-written log record is called the active portion of the log, or the active log. This is the section of the log required to do a full recovery of the database. No part of the active log can ever be truncated. All log records must be truncated from the parts of the log before the MinLSN.

首先,Active Log是指从MinLSN开始,到当前最新的Log Record。而Active Log是不会被truncate的,Truncate日志必须从MinLSN之前开始。如果是simple模式,那么在发生checkpoint的时候MinLSN之前的所有日志被truncate掉。但是在full模式下,发生checkpoint的时候并不truncate日志,它只会在backup transaction log完成之后,truncate掉MinLSN之前的所有log。总而言之,如果发生truncate,那么MinLSN之前的所有日志必定全部被truncate。

The following illustration shows a simplified version of the end-of-a-transaction log with two active transactions. Checkpoint records have been compacted to a single record.

LSN 148 is the last record in the transaction log. At the time that the recorded checkpoint at LSN 147 was processed, Tran 1 had been committed and Tran 2 was the only active transaction. That makes the first log record for Tran 2 the oldest log record for a transaction active at the time of the last checkpoint. This makes LSN 142, the Begin transaction record for Tran 2, the MinLSN.

如上所述,在最后一个checkpoint(LSN=147)的地方,我们发现Tran1已经提交了,只剩下Tran2没有提交,所以MinLSN就是Tran2的起点,也就是LSN=142的地方。

数据库的还原

如上图所示,假如数据库在LSN=148的地方发生了崩溃,我们需要恢复数据库,那么我们将执行如下操作。

  1. 首先进行完整还原。
  2. 接着事务日志还原,我们需要将数据库恢复到数据库崩溃的那一刻,执行前滚操作。从MinLSN开始redo操作,直到日志末尾
  3. 最后让数据库处于一致状态,也就是进行回滚操作。从日志末尾一致到MinLSN,回滚所有没有commit的事务,比如这里的Tran2.


本文转自xwdreamer博客园博客,原文链接http://www.cnblogs.com/xwdreamer/archive/2012/07/16/2593474.html,如需转载请自行联系原作者
相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
前端开发 JavaScript 应用服务中间件
multer实现文件上传功能全解(form上传、fetch请求上传、多文件上传)
multer实现文件上传功能全解(form上传、fetch请求上传、多文件上传)
multer实现文件上传功能全解(form上传、fetch请求上传、多文件上传)
|
10月前
|
人工智能 安全 数据安全/隐私保护
HarmonyOS应用开发实战:基于ArkTS的开箱即用登录页面实现【样式方式实现①】【HarmonyOS 5.0(Next)】
本文介绍了基于HarmonyOS 5.0(Next)和ArkTS实现的开箱即用登录页面。HarmonyOS 5.0是华为于2024年10月22日发布的第三代移动操作系统,具备原生智能、互联、安全及流畅特性。文章详细解析了使用ArkTS开发登录页面的代码,涵盖组件定义、界面布局、事件处理、样式设置及异步操作等内容,展示了清晰的组件结构、响应式设计与模块化编程的优势。通过这段代码,开发者可以快速上手并构建高效、美观的应用界面。
|
缓存 UED
强缓存与协商缓存
强缓存与协商缓存
370 63
|
消息中间件 前端开发 数据库
RocketMQ实战教程之MQ简介与应用场景
RocketMQ实战教程介绍了MQ的基本概念和应用场景。MQ(消息队列)是生产者和消费者模型,用于异步传输数据,实现系统解耦。消息中间件在生产者发送消息和消费者接收消息之间起到邮箱作用,简化通信。主要应用场景包括:1)应用解耦,如订单系统与库存系统的非直接交互;2)异步处理,如用户注册后的邮件和短信发送延迟处理,提高响应速度;3)流量削峰,如秒杀活动限制并发流量,防止系统崩溃。
|
11月前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
203 3
|
12月前
ChatGPT高效提问—prompt实践(二)
ChatGPT高效提问—prompt实践(二)
156 0
|
存储 数据库 C语言
Hawkeyes: x86软件迁移Arm的弱内存序问题解决方案
本文介绍了x86软件迁移到Arm过程中可能遇到的弱内存序问题的解决方案,解析了弱内存序问题的根因,介绍了Hawkeyes的架构和实现原理。欢迎有需求的团队发送邮件咨询
2071 0
|
Linux Windows JavaScript
csv文件乱码
问题描述: 生成的csv文件,设置为UTF-8格式,在windows上用EXCEL打开的话会乱码,在linux上用vim或者cat打开查看正常;设置为GBK格式的话,在windows上用EXCEL打开正常,但在linux上乱码   解决方法: 在csv文件头部的最前面加bom   BOM(Byte Order Mark),是 UTF编码方案里用于标识编码的标准标记,在 UTF-16里本来是 FF FE,变成 UTF-8就成了 EF BB BF。
1472 0
|
XML 存储 供应链
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!(1)
史上最全 Activiti 学习教程,一文搞定最强工作流引擎!
使用语雀创建文档
使用语雀创建文档
713 0
使用语雀创建文档