暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

事务管理

于小江的百宝箱 2022-02-14
219


提供对事务概念的支持和事务的管理能力是DBS的重要特点之一,DBMS中的一个重要成分——事务管理器提供对事务管理的支持。故障恢复机制和并发控制机制是事务管理器的两个重要功能。



事务的概念和特性

事务

事务:访问并可能更新数据库中各种数据项的一个程序执行单元。换言之就是一个操作序列,要么全部执行,要么全部不执行。

事务是数据库恢复和并发控制的基本单位。

事务可以被显式或隐式地定义:

  • 显式定义

    SQL语句
    功能
    BEGIN TRANSACTION
    事务开始
    COMMIT TRANSACTION
    事务提交
    ROLLBACK TRANACTION
    事务撤销
  • 隐式定义

    当不作显示定义时,每一条SQL语句即被当作一个事务执行。


事务的特性——ACID

  • 原子性(Atomicity)

    事务中的全部操作在数据库中是不可分割的,要么全部完成,要么全部不执行。

  • 一致性(Consistency)

    事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。

    这里的一致性指的是语义层面上的,是由用户定义的。一致性和其他三个特性的关系类似于目的与手段的。

  • 隔离性(Isolation)

    一个事务的执行不能受其他事务的干扰。事务执行的中间结果不会对其他事务产生影响。

  • 持续性(Durability)

    若事务已提交,它对数据库中数据的改变应该是永久性的,接下来的其他操作或故障不应该对其执行结果有任何影响。


事物特性遭到破坏的原因

  • 多个事务并发执行,若控制不当,可能破坏隔离性。

  • 事务执行过程被强行中止,可能破坏原子性与一致性。



数据库恢复

故障

故障分类

  • 事务内部的故障

    • 可预期的故障:由应用程序处理

    • 不可预期的故障(如运算溢出、死锁)

    • 问题:事务未到达终点,数据库处于不正常状态

  • 系统故障

    • 系统停止运转,所有活动事务都异常中止;系统需要重新启动

    • 可能造成数据不一致

      • 已完成的事务,尚未或部分写盘,

      • 未完成的事务,部分写盘

  • 介质故障

    • 你盘坏了

  • 病毒破坏

故障的前因后果

  • 发生原因:硬件故障、软件错误、误操作、恶意破坏

  • 后果:数据库被破坏或数据处于不一致状态


数据库恢复的实现技术

数据库恢复:DBMS把数据库从错误状态恢复到某一已知的正确状态的功能。

恢复原理:利用冗余

实现技术:数据转储、登记日志文件。

数据转储

定期将数据库复制到另一个存储设备。转储出来的文件称为后备副本后援副本

  • 根据转储时数据库是否可以处理事务,分为动态转储静态转储

  • 根据是否转储全部文件,分为海量转储增量转储

日志

日志文件是用来记录事务对数据库的更新操作的文件。

日志文件主要有两种格式:以记录为单位以数据库为单位

  • 以记录为单位

    日志内容:各个事务的开始、所有更新操作、结束

    事务的开始、结束以及每个更新操作均以日志记录的形式保存在日志文件中。

    日志记录的内容有:

  • 以数据块为单位

    日志内容:事务标识,更新前&后的数据块

日志的作用:

  • 动态转储与恢复

  • 各种故障恢复

登记日志的原则:

  • 登记次序与并发事务执行的时间次序一致

  • 先写日志原则:写完日志再写数据

日志文件需要更高频率的转储



恢复的具体策略

事务故障的恢复

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

  2. 对更新操作执行逆操作

  3. 继续逆向扫描,对所有的更新操作做同样处理

  4. 遇到该事务的开始标志,扫描结束

系统故障的恢复

内存缓冲区何时写盘

  1. (数据或日志)缓冲区满,写盘

  2. 遇到COMMIT,往硬盘写日志

  3. 遇到CHECKPOINT(检查点),写日志和数据

基本恢复思路

撤销(UNDO)故障发生时未完成的事务,重做(REDO)已完成的事务。

以下两种恢复方法,差别在于重做事务的范围。

不带检查点的恢复方法

  1. 生成REDO和UNDO序列

    1. 正向(从头)扫描日志文件

    2. 故障发生前已提交的事务,将其事务标识放入REDO队列

    3. 故障发生前未提交的事务,将其事务标识放入UNDO队列

  2. 逆向撤销UNDO序列

  3. 正向重做REDO序列

检查点

  • 检查点:数据库正常运行的一个时间标志

    在检查点时刻,系统将强行将缓冲区内容写盘

    重新开始文件用于记录检查点在日志文件中的位置

  • 检查点可以自动或人工设置

  • 检查点记录的内容

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

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

  • 检查点执行的动作及其顺序

  1. 缓冲区中的日志写盘

  2. 在日志文件中,增加一个检查点记录

  3. 缓冲区中的数据写盘

  4. 重新开始文件新增一行,指示检查点在日志文件中的位置

带检查点的恢复方法

  1. 生成REDO和UNDO序列

    1. 在重新开始文件中,找最后一个检查点在日志中的位置

    2. 在日志中取最后一个检查点,得到活动事务清单放入UNDO_LIST

    3. 从检查点开始,正向扫描日志文件,遇到新开始事务加入UNDO_LIST,遇到结束的事务将其从UNDO_LIST移入REDO_LIST

  2. 逆向撤销UNDO序列

  3. 正向重做REDO序列

介质故障的恢复

  1. 恢复最新的数据库备份副本

  2. 恢复日志文件副本

  • 重做已完成的所有事务

  • 撤销未完成的事务。

数据库镜像

DBMS根据DBA的要求,自动把数据库中全部或关键数据复制到另一块磁盘,此副本即为数据库镜像(Mirror)。

DBMS会自动维持二者一致性。当主数据库更新时,镜像中的数据也会更新。

镜像可以提高系统的可靠性,还可以用于并发操作


点击“阅读原文”,访问我的个人博客“于小江的百宝箱”,浏览更多数据库笔记


下期预告:事务管理(二):并发控制

  • 并发控制及其必要性

  • 封锁和封锁协议

  • 并发调度的可串行化

  • 多粒度封锁

文章转载自于小江的百宝箱,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论