前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库恢复技术总结

数据库恢复技术总结

作者头像
用户1476962
修改2022-09-22 10:12:41
1.3K0
修改2022-09-22 10:12:41
举报
文章被收录于专栏:RxJS

前面:出于预习数据库故障恢复的小项目,可能会有侧重于实际而会忽略部分非必要理论内容哈!

一、事务介绍

事务是一个要么全做,要么全不做的操作序列,而且是一个不可分割的工作单位。

事务的四个特性

原子性(Atomicity):操作序列要么全做,要么全不做。

一致性(Consistency):在事务执行之后,数据库的状态必须是一致的。

隔离性(Isolation):事务在执行的时候互不干扰。

持续性(Durability):在事务提交之后,它对数据库的影响是持续的,即它改变了数据库的数据。

二、故障发生种类

事务内部故障

事务内部发生的故障大多是非预期的,是不能够由应用程序处理的,这也是数据库故障恢复主要面对的状况。对此类故障可执行 事务撤销(undo) 进行恢复。

系统故障

是指造成系统停止运行的事件,需要系统从新启动。对此类故障可执行 事务重做(redo) 进行恢复。

三、恢复实现技术

数据转储

是指定期地将整个数据库复制到磁带、磁盘或其他储存介质上保存的过程。备用的数据称为 后备副本 。

静态转储:指无运行事务时进行的转储操作。转储简单,但降低了数据库的可用性。

动态转储:指在事务运行时对数据库进行操作。克服了静态转储的缺点,但不能保证副本数据的有效性。不过这已经可以通过建立 日志文件(log file) 解决这一问题。

日志文件

日志文件是用于记录事务对数据库的更新操作。主要分为两种:

1、以记录为单位的日志文件 内容包括:

各个事务的开始(BEGIN TRANSACTION) 标记

各个事务的结束(COMMIT 或 ROLLBACK) 标记

各个事务的所有更新操作

2、以数据块为单位的日志文件 内容包括:

事务标识 (标明是哪个事务)

操作类型 (插入、删除、修改)

操作对象 (记录内部标识)

更新前数据值 (旧值,插入操作时为空)

更新后的数据 (新值,删除操作时为空)

登记日志遵守 1. 登记次序严格按并发事务执行的时间次序、2. 先写日志,后写数据库 原则。

日志文件可以用来进行事务故障恢复和系统故障恢复。见下图

四、恢复策略

事务故障恢复步骤

反向扫描日志文件,查找事务的更新操作。

执行逆向操作,将更新前的值 写入数据库。

继续反向扫描,查找其他事务的更新操作并处理。

直至读到此事务的开始标记,此时故障恢复完成。

系统故障恢复步骤

正向扫描日志文件,找出故障发生前已经提交的事务,将其加入重做队列(redo_list)。同时找出故障发生时未完成的事务,将其加入撤销队列(undo_list)。

对撤销队列进行撤销(undo) 处理。同上事务故障恢复。

对重做队列进行重做处理。正向扫描日志文件,对每个重做事务重新执行日志文件登记的操作,将更新后的值写入数据库。

五、含检查点恢复技术

检查点内容包括:

建立检查点时刻所有正在执行的事务清单。

这些事务最近一个日志记录的地址。

在故障恢复过程中,使用检查点方法可以改善恢复效率,通常是通过周期性地建立检查点、保存数据库状态地操作来维护日志文件。

建立检查点步骤:

将当前日志缓冲区的所有日志写入磁盘的日志文件。

在日志文件写入一个检查点记录。

将当前数据缓冲区所有数据记录写入磁盘地数据库。

把检查点记录在日志文件的地址写入一个重新开始的文件。

最后

如果你觉得此文对你有一丁点帮助,点个赞

如果你觉得这篇文章对你有点用的话,麻烦请给我们的开源项目点点 star:http://github.crmeb.net/u/lsq不胜感激 !

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档