事务管理-数据库期末总结

事务的概念

事务是数据库环境下由一组数据库操作序列组成的逻辑工作单元。这些操作是一个整体,要么全做要么全不做。

事务四个特性

  • 原子性:事务中诸操作要么全做要么全不做
  • 一致性:事务执行的结果必须使数据库从一个一致性状态变成另一个一致性状态
  • 隔离性:一个事务的执行不能被其他事务干扰
  • 持久性:一个事务一旦提交,它对数据库的改变应该是持久性,接下来的故障不应对其执行结果产生影响

事务的状态

  • 活动状态:事务开始执行后就进入这个状态,此时事务可以进行读写操作
  • 部分提交状态:事务结束时进入这一状态
  • 失败状态:如果事务执行时检查出故障或在活动状态期间被撤销就进入失败状态
  • 提交状态:只有事务进入提交状态,事务已经成功结束才说事务已提交
  • 中止状态:数据库被恢复到事务开始执行前的状态后事务进入了中止状态

数据库系统故障

分类

  • 事务故障:指影响单个事务正常运行的任何事件
  • 系统故障:指造成系统停止运转的任何事件,使得系统要重新启动
  • 介质故障:主要指外存故障,如磁盘损坏、磁头碰撞,瞬时强磁场干扰等

事务恢复技术

故障对数据库影响有两种可能性:一是数据库本身被破坏,二是数据库没有破坏,但数据可能不正确,这是因为事务的运行被非正常终止造成的。

恢复的基本原理是根据存储在系统别处的冗余数据来“重建”。

恢复机制:第一是建立冗余数据,第二是利用这些冗余数据进行数据库恢复。

建立冗余最常用的技术是建立数据备份和事务日志文件。

数据库备份

备份是指DBA定期将整个数据库复制到磁带或另一个磁盘上保存起来的过程。这些备用的数据文本称为后备副本或后援副本。

备份可分为脱机备份和联机备份两种方式:

  • 脱机备份:在备份过程中数据库系统处于脱机状态,即在备份过程中数据库系统不再接受应用程序的访问,因此脱机备份又称为静态备份。
  • 联机备份:是在备份过程中数据库系统处于联机状态,即在进行备份的同时数据库系统还可接受应用程序的访问,因此联机备份又称为动态备份。

数据库备份还可以分为全备份,部分备份和增量备份。从恢复角度看,使用全备份得到的后备副本进行恢复一般来说比较方便些。但是如果数据库很大,事务处理又十分频繁,增量备份更实用更有效。

数据库日志

事务故障恢复和系统故障恢复必须要用日志文件。
作用:在数据库毁坏后可重新装入后援副本把数据库恢复到备份结束时刻的正确状态,然后利用日志文件,把已完成的事务进行重做处理,对故障发生时尚未完成的事务进行撤销处理。
格式:不同数据库系统并不完全相同。概括起来可以分成两种,以记录为单位的和以数据块为单位的日志文件。
内容:各个事务的开始标记、各个事务的结束标记、各个事务的所有更新操作。
以上三条内容均作为日志文件中的一个记录,日志记录的主要内容主要包括:事务标识TID、操作的类型、操作对象、更新前数据的旧值、更新后数据的新值。

为保证数据库是可恢复的,登记日志时必须遵循两条原则:

  • 登记的次序必须严格按并发事务执行的时间次序
  • 必须先记日志文件,后写数据库

恢复的策略

  • 事务故障:反向扫描文件日志,查找该事务的更新操作;对该事务的更新操作进行逆操作;继续反向扫描日志文件,查找该事务的其他更新操作,并做同样处理;如此处理下去直至读到此事务的开始标记,事务故障恢复完成
  • 系统故障:正向扫描日志文件,找出在故障发生前已经提交事务,将其事务标识记入重做(REDO)队列;同时找出发生故障时为完成的事务,将其事务标识记入撤销(UNDO)队列;对撤销队列的每个事务进行撤销处理,对重做队列中的每个事务进行重做处理
  • 介质故障:装入最新的数据库后备副本,使数据库恢复到最近一次备份时的一致状态;对于联机备份的数据库副本,还须同时装入备份开始时刻的日志文件副本,利用恢复系统故障的方法才能将数据库恢复到一致性状态;装入相应的日志文件副本,重做已完成的事务。

采用检查点的恢复技术
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

数据库的并发控制

事务并发可能引起的问题:

  • 丢失修改:两个事务T1,T2读入同一数据并修改,T2提交的结果破坏了T1提交的结果,导致T1的修改被丢失。
  • 读脏数据:指事务T1修改某一数据并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时T1已修改的数据恢复原值,T2读到的数据就是脏数据,即不正确的数据。
  • 不可重复读:指事务T1读取数据后,事务T2执行更新操作,使T1无法再现前一次读取结果。
    并发控制的正确性准则
    在一个调度中,不同事务的操作可以交叉执行,但必须保持同一个事务中各个操作的次序。

目标等价:有两个调度,如果它们在数据库的任何初始状态下所有读出的数据都是一样的,留给数据库的最终状态也是一样的,则称它们是目标等价。
冲突等价:设S为一个调度,我们将通过调换S中不冲突的操作所得到的新的调度称为S的冲突等价。

如果两个调度是冲突等价则一定是目标等价的,反之未必正确。
前驱图的使用可以判别一个调度是否是可串行的。

基于锁的并发控制

  • 排它锁(X锁):又称为写锁
  • 共享锁(S锁):又称为读锁
  • 更新锁(U锁):

1级加锁协议:事务T在修改之前必须先对其加X锁,直至事务结束才释放,事务结束包括正常结束和非正常结束。可以防止丢失修改。
2级加锁协议:1级基础上,事务T在读取数据A之前必须对其加S锁,读完后即可释放S锁。可进一步防止读脏数据
3级加锁协议:2级基础上,事务T在读取数据A之前必须对其加S锁,直到事务结束才释放。可进一步防止不可重复读。

SQL中一致性级别的意义

  • 读未提交:允许读取未提交的记录
  • 读已提交:只允许读取已提交的记录,但不要求可重复读
  • 重复读:只允许读取已提交的记录,并要求一个事务对同一记录的两次读取之间,其他事务不能对该记录进行更新。
  • 串行化:一个调度的执行必须等价于串行调度的结果。

两段锁协议(2PL)
事务分为两个阶段:第一阶段是获得锁,也称为扩展阶段;第二阶段是释放封锁,也称为收缩阶段。


死锁处理预防,活锁略
多粒度封锁:多粒度封锁协议允许多粒度树中的每个节点被独立的加锁;对一个结点加锁意味着这个结点的所有后裔结点也被加以同样类型的锁,因此在多粒度锁中一个数据对象可能有两种方式封锁:显式封锁和隐式封锁。

发布了352 篇原创文章 · 获赞 31 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/strawqqhat/article/details/103456276