zoukankan      html  css  js  c++  java
  • 《数据库系统概论》 -- 10. 事务& 数据库恢复技术

    1. 事务概念

    1.1概念

             事务是一系列的数据库操作,是数据库应用程序的基本逻辑单元。

             事务使用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位

    1.2定义事务语句

             BEGIN TRANSACTION; #开始事务

             COMMIT; #提交事务(将事务所有对数据库的更新写到磁盘上的物理数据库中)

             ROLLBACK; #回滚事务(将事务所有对数据库已完成的操作全部撤销,会滚到事务开始时的状态)

    1.3事务特性ACID

             Atomicity原子性:事务的所有操作要不都做,要么都不做。

             Consistency一致性:事务执行的结果是数据库从一个一致性状态变到另一个一致性状态。

             Isolation隔离性:一个事务的执行不能被其他事务干扰。

             Durability持续性:事务一旦被提交,它对数据库数据的改变就应是永久性的。

    1.4影响事务ACID特性的因素及相关处理技术

             事务运行被终止(数据库恢复技术)

             事务之间相互干扰(并发控制技术)

    2.事务处理技术

    数据库恢复技术和并发控制技术

    3.数据库恢复技术

    3.1概念

    计算机系统的硬件故障、软件错误、误操作、恶意破坏,造成运行事务非正常中断,甚至破坏数据库,RDBMS使用恢复子系统把数据库从错误状态恢复到某一已知的正确状态(一致性状态)

    3.2故障种类

    3.2.1事务故障

    影响

             影响单个事务,不影响其他事务。

    类型

             程序可控回滚(ROLLBACK)-->UNDO(撤销)

             事务执行故障(如运算溢出、并发死锁等)-->UNDO(撤销)

    3.2.2系统故障

    概念

             某事件造成RDBS停止运转,需要重启RDBS。如操作系统故障、DBMS代码错误、系统断电等。

    影响

             影响所有事务,但不损坏数据库。

    类型

             已完成事务未写入磁盘-->REDO(重做)

             未完成事务写入磁盘-->UNDO(撤销)

    3.2.3介质故障

    影响

             数据库部分或全部损坏,数据丢失。如磁盘损坏。

    3.2.4计算机病毒

    影响

             影响计算机整体系统

    3.3恢复技术

    3.3.1原理

             建立冗余数据

    3.3.2常用技术

             数据转储+登记日志文件。

             另:主从同步技术(即数据库镜像技术)

    3.3.3数据转储

             静态转储

                       在系统中无运行事务时进行转储操作

                       优点:得到一个数据一致性副本。

                       缺点:必须等待用户事务结束后才可进行,降低数据库可用性。

             动态转储

                       在转储期间允许执行事务

                       优点:不影响用户事务执行

                       缺点:不能保证正确有效,转出过程中数据会随用户事务而改变,得到的不是一致性副本

             海量转储

                       每次转储为全量转储

             增量转储

                       每次只转储上一次转储后更新过的数据

    3.3.4登记日志文件

             概念

                       记录事务对数据库的更新操作的文件

             原则

                       先写日志文件、后写数据库

                       登记的次序严格按照并发事务执行的时间次序

             分类

                       以记录为单位的日志文件

                                日志记录:事务开始(BEGIN TRANSACTION)标记、事务的所有数据库更新操作、事务结束(COMMIT/ROLLBACK)标记。这三个每一个都是一种日志记录。

                                每个日志记录的内容:事务标识(标明是那个事务)、操作类型(插入/删除/修改)、操作对象(记录内部标识)、更新前的旧值(insert此项为空值)、更新后的新值(delete此项为空值)

                       以数据块为单位的日志文件

                                日志文件的内容:事务标识、更新前的数据块、更新后的数据块。

    3.3.5恢复策略

             事务故障

                       思想:恢复子系统利用日志文件UNDO该事务

                       步骤

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

                                对该事务的更新操作执行逆操作

                                继续反向扫描日志文件,找到其他更新操作,并作逆处理

                                重复上述步骤,直至事务开始标记

             系统故障

                       思想:未完成事务写入数据库采用UNDO操作;已完成事务未写入数据库采用REDO操作。

                       步骤

                                找到故障发生前已经提交的事务(既有事务开始标记,也有事务结束标记中的COMMIT标记),将该事务放入重做队列(REDO-LIST)

                                找到故障发生时尚未完成的事务(只有事务开始标记,没有事务结束标记中的COMMIT标记),将该事务放入撤销队列(UNDO-LIST)

                                反向扫描日志文件,逆操作执行撤销事务

                                正向扫描日志文件,重做每个重做事务

             介质故障

                       思想:重装数据库,重做已完成的事务

                       步骤

                                重装数据库,装入最新的转储副本(转储开始时刻的副本),恢复到最新的具有一致性状态的数据(对于动态转储的副本,还需采用与恢复系统故障相同的方法,进行UNDO+REDO方法,恢复数据一致性)

                                装入相应的日志文件副本(转储结束时刻的副本),重做已完成的事务(只做REDO-LIST里的事务即可)

    3.3.6带有检查点的恢复技术

    思想

             在日志文件中增加一类新的记录:检查点记录,增加一个重新开始文件,使用恢复子系统来动态维护日志。

    使用

             恢复技术用于系统故障

    概念

             检查点记录内容

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

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

             重新开始文件记录内容

                       记录各个检查点记录在日志文件中的地址

             动态维护日志文件

                       把当前日志缓冲区的所有日志记录写入磁盘的日志文件上

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

                       把当前数据缓冲区的所有数据记录写入磁盘的数据库中

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

    通过检查点方法恢复的步骤

             从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录

             由该检查点记录得到此刻正在执行的事务清单ACTIVE-LIST,建立UNDO-LIST和REDO-LIST,并将ACTIVE-LIST中的事务放入UNDO-LIST

             从检查点开始正向扫描日志文件,如果有新开始的事务(有BEGIN TRANSACTION标记),放入UNDO-LIST,如果有新提交的事务(有COMMIT标记),放入REDO-LIST,重复,直至日志文件结束

             对UNDO-LIST中的每个事务反向执行UNDO操作,对REDO-LIST中每个事务正向执行REDO操作

    3.3.7数据库镜像技术(主从同步技术)

    概念

             根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上,每当主数据库更新时,DBMS自动把更新后的数据复制过去,由DBMS保证朱从数据库的一致性。

  • 相关阅读:
    shell函数使用
    laravel调试神器tinker
    laravel 5.1 单元测试 Cannot modify header information 错误
    angular 使用rxjs 监听同级兄弟组件数据变化
    angular 有关侦测组件变化的 ChangeDetectorRef 对象
    XML文件操作类--创建XML文件
    (收藏)C#实现截屏
    (转)C#操作PPT
    (转).NET代码混淆实践
    (整理)RPC
  • 原文地址:https://www.cnblogs.com/yc913344706/p/7689042.html
Copyright © 2011-2022 走看看