数据库系统(4)

数据库恢复技术

事务的基本概念

  • 事务:用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。是恢复和并发控制的基本单位。
  • 事务和程序:
    • 一个事务可以是一条SQL、一组SQL、整个程序,事务不可分割。
    • 一个程序中可以有多个事务,程序可以中断,走走停停。

定义事务

  • BEGIN TRANSACTION:事务开始
  • COMMIT:事务正常结束,提交事务的所有操作,即将事务中所有对数据库的更新写回到磁盘上的物理数据库中。
  • ROLLBACK:事务异常结束,系统将事务中对数据库的所有已完成操作全部撤销,回滚到事务开始时的状态。

事务的ACID特性

原子性(Automicity)
  • 事务是数据库的逻辑工作单位,事务中包括的所有操作要么全做,要么全不做。
一致性(Consistency)
  • 事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
  • 因此当数据库只包含成功事务提交的结果时(COMMIT),则数据库处于一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所作的修改有一部分已经写入物理数据库,这时数据库就处于一种不正确的状态。
隔离性(Isolation)
  • 一个事务的执行不能被其他事务干扰。即一个事务的内部操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。
持续性(Durability)
  • 又称为持久性,指一个事务一旦提交,它对数据库中的数据的改变是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
  • 所以才会有回滚(ROLLBACK),回滚是因为事务故障没有提交,所以已经执行的操作可以被撤销到上一个事务结束时的状态。

事务ACID遭到破坏的因素

  • 多个事务并行运行时,不同事物的操作交叉执行。(导致共享数据不一致)
  • 事务在运行过程中被强行停止。

数据库恢复概述

  • 引入:尽管数据库系统中采取了各种保护措施来防止数据库的安全性和完整性被破坏,保证并发事务的正确执行。但是计算机系统中硬件故障、软件错误、操作员的失误以及恶意的破坏是不可避免的,这些故障会影响数据库中的数据甚至会破坏数据库。
  • 数据库的恢复:DBMS必须具有把数据库从错误状态恢复到某一已知的正确状态(一致状态或完整状态)的功能。

故障的种类

事务内部的故障

  • 理解:事务内部的故障有的是可以预期的,通过事务程序本身发现的;有的是非预期的,不能由事务程序处理。如运算溢出、违反了某些完整性限制。
  • 事务故障:仅指非预期的故障,意味着事务没有到达预期的终点(COMMIT或显式的ROLLBACK),事务可能处于不正确的状态。
  • 事务撤销(UNDO):事务恢复程序要在不影响其他并发事务的情况下,强行回滚该事务,撤销该事务已经作出的任何对数据库的修改,使得该事务好像根本没有启动一样。

系统故障

  • 理解:指造成系统停止运转的任何事件,使得系统要重新启动,又称为软故障(soft crash)。如:硬件错误、操作系统故障、DBMS代码错误、系统断电等。这类故障影响正在运行的所有事务,但是不会破坏数据库。
  • 系统故障:此时主存中的内容全部丢失(包括数据库的缓冲区),所有运行事务都非正常终止。发生系统故障时,可能事务部分已完成,可能事务全部留在数据库缓冲区,都会导致数据库不一致状态。
  • 系统重新启动:需要撤销所有未完成的事务,还要重做(REDO)所有已经提交的事务。

介质故障

  • 理解:指外存故障的硬故障(hard crash),直接破坏数据库,并影响正在存取这部分数据的所有事务。如磁盘损坏、磁头碰撞、瞬时强磁场干扰等,发生的可能性较小,但是破坏性最大

计算机病毒

  • 理解:人为的故障或损坏,可以繁殖和传播,并造成对计算机系统的危害,计算机病毒已成为计算机系统的主要威胁。

故障总结

  • 各类故障对数据库的影响有两种可能性:
    • 数据库本身被破坏
    • 数据库没有被破坏,但是数据可能不正确
  • 恢复的基本原理:使用冗余技术,使用存储在系统别处的冗余数据来重建数据库。

恢复的实现技术

  • 关键问题:如何建立冗余数据;如何利用冗余数据恢复数据库。建立冗余数据通常结合数据转储、登录日志文件(logging)两种技术实现。

数据转储

  • 转储:指数据库管理员定期地将整个数据库复制到磁带、磁盘或其他介质上保存起来的过程。这些备用的数据称为后备副本(backup)。
  • 恢复:当数据库遭到破坏后可以将后备副本重新装入,但重装后备数据只能恢复到转储时的状态,还需要重新运行自转储以后的所有更新事务。
  • 特点:
    • 转储耗时耗资源,不能频繁进行,所以DBA应该根据数据库的使用情况确定适当的转储周期。
    • 转储分为静态转储和动态转储。还可以分为海量转储和增量转储。
  • 静态转储:转储时系统中无运行事务,事务必须等待,降低了数据库的可用性。
  • 动态转储:在运行事务同时还可以进行转储,需要后备副本、转储期间的日志文件(log file)才能真正恢复数据库。
  • 海量转储:一次性转储全部数据库,恢复时更方便但转储时麻烦。
  • 增量转储:每次只转储上一次转储后更新过的数据,更实用有效。

登录日志文件

  • 日志文件的格式和内容:
    • 日志文件:记录事务对数据库的更新操作的文件
    • 格式:以记录为单位;以数据块为单位
    • 内容:一个日志记录包括,每个事务的开始、结束、执行的所有操作
  • 日志文件的作用:
    • 事务故障恢复和系统故障恢复
    • 动态转储、静态转储时需要日志文件
  • 登录日志文件:
    • 两条原则:登录的次序严格按并发事务执行的时间先后次序
    • 必须先写日志文件,再写入数据库 。如果先写入数据库再登记日志文件,如中间发生故障导致数据库已被修改,但是日志文件没有被记录,则以后再也不能恢复这个修改。如果先登记再写入数据库,则只需要在恢复时多执行一次不必要的UNDO,不会影响数据库的正确性。

恢复策略

事务故障的恢复

  • 事务故障:指事物在运行到正常终点前被终止,这时恢复子系统自动利用日志文件撤销(UNDO)此事务已对数据库进行的修改。
  • 恢复步骤:
    • 反向扫描日志文件(从最后向前扫描日志文件),查找该事务的更新操作。
    • 对该更新操作执行逆操作,恢复到“更新前的值” 。
    • 继续反向扫描,查找该事务的其他更新操作,执行相应的逆操作。
    • 重复下去,直到扫描到该事务的开始标记(BEGIN TRANSACTION)

系统故障的恢复

  • 系统故障:撤销未完成的事务,重做已完成的事务,由系统重启时自动完成,不需要用户干预。
  • 恢复步骤:
    • 正向扫描日志文件(即从头扫描日志文件),找出故障前已经提交的事务(这些事务既有BEGIN TRANSACTION,也有COMMIT记录),将其事务标识挂入到重做队列(REBO-LIST)中。同时找出故障时尚未完成的事务(这些事务只有BEGIN TRANSACTION记录,无COMMIT记录),将其事务标识记入撤销队列中(UNDO-LIST)。
    • 对撤销队列中的各个事务执行撤销(UNDO)处理,即反向扫描日志文件再做逆向操作。
    • 对重做队列中的各个事务进行重做(REDO)处理,即正向扫描日志文件再做正向操作。

介质故障的恢复

  • 介质故障:磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障,需要重装数据库,再重做已完成的事务。需要DBA将后备副本和日志文件装入系统,然后交给系统执行恢复命令即可。
  • 恢复步骤:
    • 装入最新的数据库后备副本,将数据库恢复到最近一次转储时的一致性状态。
    • 装入相应的日志文件副本,重做已完成的事务。

具有检查点的恢复技术

  • 检查点技术:在日志文件中增加了一类新的记录——检查点记录,增加了一个重新开始文件。
  • 检查点记录的内容:
    • 建立检查点时刻所有正在执行的事务清单
    • 这些事务最近的一个日志记录的地址
  • 重新开始文件:用来记录各个检查点记录在日志文件中的地址
  • 动态维护日志文件:
    • 将当前日志缓冲区的所有日志记录写入磁盘的日志文件上。
    • 在日志文件中写入一个检查点记录。(定期或不定期)
    • 将当前数据缓冲区的所有数据记录写入磁盘的数据库中。
    • 把检查点记录在日志文件中的地址写入到重新开始文件中。
  • 根据时期不同的不同恢复策略:
  • 优点:改善恢复效率

数据库镜像

  • 数据库镜像(mirror):为了避免介质故障,许多DBMS提供了数据库镜像的功能。

并发控制

  • 引入:当多个用户并发地存取数据库时就会产生多个事务同时存取同一数据的情况。如果不对并发操作进行控制的话,可能会导致存取和存储不正确的数据。

并发控制概述

  • 事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务。
  • 并发操作带来的数据不一致性:丢失修改、不可重复读、读“脏”数据

丢失修改(lost update)

  • 理解:两个事务T1、T2读入同一数据并修改,T2提交的结果导致T1提交的结果丢失,如图所示(a)。

不可重复读(non-repeatable read)

  • 理解:事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。
  • 不可重复读分为三种情况:
    • 事务T1读取数据后,事务T2对数据修改,当T1再次读该数据时,得到与前一次不同的值。如(b)求和后再验算结果
    • 事务T1读取数据后,事务T2删除了数据,当T1再次读该数据时,发现数据某些记录消失,称为幻影(phantom row)现象
    • 事务T1读取数据后,事务T2插入了数据,当T1再次读该数据时,发现数据某些记录多了,称为幻影(phantom row)现象

读“脏”数据(dirty read)

  • 理解:指事务T1修改了某一数据并将其协会磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这是被T1修改过的数据恢复原值,T2读到的数据就与数据库中的数据不一致,这是T2读到的数据就是“脏”数据,即不正确的数据。

  • 示例图:
    在这里插入图片描述

  • 并发控制技术:封锁(locking)、时间戳(timestamp)、乐观控制法(optimistic scheduler)、多版本并发控制(multi-version concurrency control)

封锁

  • 定义:事务T在对某个数据对象操作之前,先向系统发出请求,对其加锁,加锁后事务T就对该数据对象有一定的控制,在事务T释放它的锁之前,其他事务不能更新此数据对象。(类似于OS的临界区)
  • 基本的封锁类型:排他锁(exclusive locks,简称X锁)、共享锁(share locks,简称S锁)

排他锁(exclusive locks,简称X锁)

  • 定义:又称为写锁。一旦事务T对数据对象A加上X锁,则只允许事务T读取和修改A,其他任何事务都不能再对A加上任何类型的锁,直到T释放A上的锁为止。保证了其他事务在T释放A之前不能再读取和修改A。

共享锁(share locks,简称S锁)

  • 定义:又称为读锁。一旦事务T对数据对象A加上S锁,则事务T可以读A但是不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁为止。保证了其他事务可以读A,但在T释放A之前不能对A做任何修改操作。

封锁协议

  • 封锁协议:在运用X锁和S锁这两种基本封锁对数据对象进行加锁时,需要约定一些规则,对封锁方式指定不同的规则,形成了把不同的封锁协议。不同级别的封锁协议达到的系统一致性级别是不同的。如:何时申请X锁或S锁、持有锁的时间、何时释放等

一级封锁协议

  • 定义:是指事务T在修改数据R之前必须先对其加X锁,直到事务结束才释放。事务结束包括正常结束(COMMIT)和异常结束(ROLLBACK)
  • 作用:防止丢失修改,并保证事务T是可恢复的。
  • 问题:如果不修改数据仅仅是读数据,则不需要加锁,所以它不能保证可重复读和不读“脏”数据。

二级封锁协议

  • 定义:是指在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,读完后即可释放S锁。
  • 作用:防止丢失修改,进一步防止读“脏”数据。
  • 问题:由于读完数据后即可释放S锁,所以不能保证可重复读。

三级封锁协议

  • 定义:是指在一级封锁协议的基础上增加事务T在读取数据R之前必须先对其加S锁,直到事务结束才释放
  • 作用:防止丢失修改、防止读“脏”数据、防止不可重复读。

封锁机制的总结

  • 封锁机制解决三种数据不一致性的示例:
  • 主要区别:什么操作需要申请锁,何时释放锁。
    在这里插入图片描述

活锁和死锁

活锁

  • 定义:某个事物T长时间处于等待状态,请求不能获得批准。如:事物T1封锁了数据R,事物T2有申请封锁R,于是T2等待;T3也申请R,当T1释放后系统首先批准了T3的请求,导致T2仍然等待。。。T2可能永远处于等待。
  • 解决方法:采用先来先服务的策略。

死锁

  • 定义:事务之间相互等待,导致事务永远不能结束。如:事务T1封锁了R1,事务T2封锁了R2;然后T1请求封锁R2导致T1等待,T2申请封锁R1导致T2也等待,相互等待对方的资源。
  • 解决方法:死锁预防、死锁检测与解除
死锁预防
  • 一次性封锁法:要求事务必须一次性将所有要使用的数据全部加锁,否则就不能继续执行。
  • 顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序实施封锁。
  • 死锁预防降低系统的并发度、且实现维护较难,所以不太适合工程应用。
死锁的诊断和解除
  • 超时法:如果一个事务的等待时间超过了规定的时限,则认为发生死锁。
  • 等待图法:动态维护所有事务的等待情况,若出现回路,则认为发生死锁。
  • 死锁解除:选择代价最小的事务,将其撤销,释放此事务持有的全部锁,直到其他事务继续运行。

并发调度的可串行性

  • 引入:DBMS对并发事务的不同调度可能会产生不同的结果,但是只有串行调度的结果是正确的。

可串行调度

  • 定义:多个事务的并发执行是正确的,当且仅当其结果与按照某一次序串行地执行这些事务的结果相同时,称为可串行化调度(serializable)

    现在有两个事务,分别包括下列操作:
    事务T1:读B;A=B+1;写回A;
    事务T2:读A;B=A+1;写回B;
    在这里插入图片描述

冲突可串行化调度

  • 冲突操作:是指不同的事务对同一数据的读写操作和写写操作,其他操作是不冲突操作。
    在这里插入图片描述
  • 冲突可串行化的调度:一个调度Sc在保证冲突操作的相对次序不变的情况下,通过交换两个事务不冲突操作的次序得到另一个调度Sc’,如何Sc’是串行的,则调度Sc为冲突可串行化的调度。
  • 若一个调度是冲突可串行化,则一定是可串行化的调度。冲突可串行化调度是可串行调度的充分条件,不是必要条件。

两段锁协议

  • 引入:为了保证并发调度的正确性,DBMS的并发控制机制必须提供一定的手段来保证并发调度的可串行化,从而保证调度的正确性。
  • 两段锁:是指所有事务必须分为两个阶段对数据项加锁和解锁。
    • 在对任何数据进行读、写操作之前,首先要申请并获得对该数据的封锁。即第一阶段,也称为扩展阶段,在这个阶段,事务可以申请获得任何数据项上的任何类型的锁,但是不能释放任何锁。
    • 在释放一个封锁后,事务不再申请和获得任何其他封锁。即第二阶段是释放封锁,也称为收缩阶段,在这个阶段,事务可以释放任何数据项上的任何类型的锁,但是不能再申请任何锁。
  • 两段锁协议是可串行化调度的充分条件,不是必要条件。

其他并发控制机制

时间戳

  • 定义:给每个事务添加一个时标,即事务开始执行的时间。每个事务具有唯一的时间戳,并且按照时间戳来解决事务的冲突操作。如果发生冲突操作,就回滚具有最早时间戳的事务,保证其他事务的正常执行,被回滚的事务被赋予新的时间戳并重复头开始执行。

乐观控制法

  • 定义:乐观控制法认为事务执行时很少发生冲突,因此不对事务进行特殊的管制,而是让它自由执行,事务提交前再进行正确性检查。如果检查后发现该事务执行中出现过冲突并影响了可串行性,则拒绝提交并回滚该事务。又称为验证方法(certifier)。

多版本并发控制

  • 定义:是指在数据库中通过维护数据对象的多个版本信息来实现高效并发控制的一种策略。
  • 版本(version):是指数据库中数据对象的一个快照,记录了数据对象某个时刻的状态。随着计算机系统存储设备价格的不断降低,可以为数据库系统的数据对象保留多个版本,提高系统的并发操作度。(类似于文件的并行副本写操作,再检查合并)
  • 优点:消除了数据对象读和写操作的冲突,提高了事务的并发度,有效提高了系统的性能

数据库管理系统

数据库管理系统的基本功能

  • 数据库创建和定义:定义和创建模式、外模式、内模式、表、视图、索引等
  • 数据组织、存储和管理:需要分类进行组织、存储和管理各种数据,确定以何种文件结构和存取方式再存储器上组织这些数据。
  • 数据存取:方便用户对数据的操作功能,实现检索、插入、修改、删除。
  • 数据库事务管理和运行管理:多用户环境下的事务管理和安全性、完整性控制功能;数据库恢复、并发控制和死锁检测、日志文件等
  • 数据库的建立和维护:数据库的初始建立、数据转化、数据库的转储和恢复、数据库的重组织和重构造以及性能检测分析。
  • 其他功能:与网络中的其他软件系统的通信功能、不同系统之间的数据转换、异构数据库之间的互访和互操作。

数据库管理系统的系统结构

关系数据库管理系统的层次结构

  • 层次结构:从上到下为应用层、语言处理层、数据存取层、数据存储层
  • 应用层:位于关系DBMS系统的核心之外。应用层处理对象是数据库应用程序。
  • 语言处理层:对SQL语句进行语法分析、视图转换、安全性检查、完整性检查、查询优化等。处理对象是数据库语言。
  • 数据存取层:执行扫描,排序,元组的查找、修改、删除等基本操作,完成数据记录的存取、存取路径的维护。处理对象是单个元组。
  • 数据存储层:执行文件的逻辑打开、关闭、写页、缓冲区读和写等操作,完成缓冲区管理、内外存交换、外存的数据管理等功能。处理对象是数据页和系统缓冲区。
  • 数据读取实例:

数据库技术发展概述

数据库系统发展的三阶段

  • 第一代数据库系统-层次、网状
  • 第二代数据库系统-关系
  • 新一代数据库系统:第3代DBMS的3个基本特征
    • 应支持数据管理、对象管理和知识管理
    • 必须保持或继承第二代数据库系统的技术
    • 必须对其他系统开放

数据管理技术面临的挑战

  • 数据量巨大:要求系统具有高度的可拓展性和可伸缩性
  • 数据类型多样、异构:要求系统具有存储和处理异构数据的能力。
  • 基于数据进行决策分析具有广阔的前景和巨大价值:要求数据挖掘算法可拓展性、高效分析算法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值