目录
一、事务的基本概念
1、事务处理
事务处理也称联机事务处理(Online transaction processing, OLTP)
事务处理技术主要包括数据库恢复技术和并发控制技术
2、事务(Transaction)
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。
事务是恢复与并发控制的基本单位
3、事务与程序
事务是数据库应用程序的基本逻辑单元
在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序
一个程序通常包含多个事务
4、定义事务的两种方式
- 显式定义
- 事务的开始和结束由用户定义
- 事务定义的三条主要语句:BEGIN TRANSACTION; COMMIT; ROLLBACK
- 隐式定义
- 当用户没有显式地定义事务时,DBMS按缺省规定自动划分事务
5、事务的ACID特性
隔离性:
二、数据库恢复概述
故障是不可避免的:硬件故障、软件错误、操作员失误、恶意破坏
故障影响
轻:运行事务非正常中断,影响数据库中数据的正确性
重:破坏数据库,使数据库中全部或部分数据丢失
DBMS必须具有数据恢复的功能
即把数据库从错误状态恢复到某一已知正确状态(一致性状态或完整状态)的功能
恢复子系统是DBMS的一个重要组成部分
相当庞大,整个系统代码的10%以上 恢复技术衡量系统优劣的重要指标
三、故障的种类
1、事务内部故障
事务故障意味着事务没有达到预期的终点(COMMIT或显式的ROLLBACK),因此数据库可能处于不正确的状态。
事务故障的发现
事务程序本身发现
非预期的,不能由应用程序处理
- 运算溢出
- 并发事务发生死锁而被选中撤销该事务
- 违反了某些完整性限制而被终止
事务故障的恢复操作
事务撤销(UNDO)
2、系统故障(软故障)
系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。也称为软故障(soft crash)
- 特定类型的硬件错误(如CPU故障)
- 操作系统故障
- DBMS代码错误
- 系统断电
系统故障特点:
所有运行的事务都非正常终止,但不破坏数据库
内存中数据库缓冲区的信息全部丢失
系统故障的恢复操作:
系统重新启动时,恢复程序让所有非正常终止的事务回滚,强行撤消(UNDO)所有未完成事务
系统重新启动时,恢复程序重做(REDO)所有已完成的事务
3、介质故障(硬故障)
介质故障也称为硬故障(Hard crash),指外存故障.
- 磁盘损坏
- 磁头碰撞
- 瞬时强磁场干扰
介质故障特点:
破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务
与事务故障和系统故障相比,发生的可能性小,但破坏性最大
4、计算机病毒
计算机病毒是一种人为的故障或破坏,是一种恶意计算机程序
计算机病毒特点:
可以繁殖和传播,造成对计算机系统包括数据库的危害
- 有的病毒传播很快,一旦侵入系统就马上摧毁系统
- 有的病毒有较长的潜伏期,计算机在感染后数天或数月才开始发病
- 有的病毒感染系统所有的程序和数据
- 有的只对某些特定的程序和数据感兴趣
计算机病毒已成为计算机系统的主要威胁,自然也是数据库系统的主要威胁
数据库一旦被破坏仍要用恢复技术把数据库加以恢复
5、小结
各类故障对数据库的影响有两种可能性:
数据库本身被破坏
数据库没有被破坏,但数据可能不正确,这是由于事务的运行被非正常终止造成的
恢复的基本原理:
冗余,可以利用存储在系统别处的冗余数据来重建数据库中已被破坏或不正确的那部分数据
恢复的基本原理简单,但实现技术的细节却相当复杂:
一个大型数据库产品,恢复子系统的代码要占全部代码的10%以上
四、恢复的实现技术
建立冗余数据最常用的技术:
数据转储
登记日志文件(logging)
(通常在一个数据库系统中,这两种方法一起使用)
1、数据转储
数据转储是指数据库管理员定期地将整个数据库复制到磁带、磁盘或其他存储介质上保存起来的过程。
备用的数据称为后备副本或后援副本(backup)
数据库恢复采用的基本技术
十分耗费时间和资源的,不能频繁进行
利用后备副本进行数据库的恢复:
当数据库遭到破坏后可以将后备副本重新装入, 但重装后备副本只能将数据库恢复到转储时的状态, 要想恢复到故障发生时的状态,必须重新运行自转储以后的所有更新事务。
静态转储和动态转储:
动态转储缺点示例
在转储期间的某时刻Tc,系统把数据A=100转储到磁带上,而在下一时刻Td,某一事务将A改为200,后备副本上的A过时了
动态转储缺点的解决方案 把动态转储期间各事务对数据库的修改活动登记下来,建立日志文件(log file)。 后援副本加上日志文件就能把数据库恢复到某一时刻的正确状态。
海量转储和增量转储。
海量转储是指每次转储全部数据库
增量转储是指每次只转储上一次转储后更新过的数据
海量转储与增量转储比较
从恢复角度看,使用海量转储得到的后备副本进行恢复往往更方便
如果数据库很大,事务处理又十分频繁,则增量转储方式更实用更有效
2、登记日志文件
日志文件是用来记录事务对数据库的更新操作的文件。
日志文件的格式和内容:
日志文件的作用
用来进行事务故障恢复和系统故障恢复
协助后备副本进行介质故障恢复
登记日志文件必须遵循两条原则:
登记的次序严格按并发事务执行的时间次序
必须先写日志文件,后写数据库
写日志文件操作:把表示这个修改的日志记录写到日志文件中
写数据库操作:把对数据的修改写到数据库中
五、恢复策略
事务故障的恢复
由恢复子系统利用日志文件撤消(UNDO)此事务已对数据库进行的修改
事务故障的恢复由系统自动完成,对用户透明
事务故障的恢复步骤:
系统故障的恢复:
系统故障造成数据库不一致状态的原因
未完成事务对数据库的更新可能已写入数据库
已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库
恢复策略
撤消(UNDO)故障发生时未完成的事务;
重做(REDO)已完成的事务 系统故障的恢复由系统在重新启动时自动完成,对用户透明
系统故障的恢复步骤:
介质故障的恢复
恢复策略
重装数据库,然后重做已完成的事务
介质故障的恢复需要DBA介入
DBA只需要重装最近转储的数据库副本和有关的各日志文件副本,然后执行系统提供恢复命令即可,具体的恢复操作仍由DBMS完成。
介质故障的恢复步骤:
六、具有检查点的恢复技术
利用日志技术进行数据库恢复时,恢复子系统必须搜索日志,确定哪些事务需要重做,哪些事务需要撤销。
搜索日志文件过程中存在两个问题:
搜索整个日志将耗费大量的时间;
重做处理:重新执行,浪费了大量时间
解决方案:具有检查点的恢复技术
- 在日志记录中增加检查点(checkpoint)记录
- 建立检查点时刻所有正在执行的事务清单
- 这些事务最近一个日志记录的地址
- 增加重新开始文件
- 重新开始文件用来记录各个检查点记录在日志文件中的地址
- 恢复子系统在登录日志文件期间动态地维护日志
七、数据库镜像
数据库镜像(Mirror)是解决介质故障、提高数据库可用性的一种常用方法。
即根据DBA的要求,自动把整个数据库或其中的关键数据复制到另一个磁盘上。每当主数据库更新时,DBMS自动把更新后的数据复制过去,由DBMS自动保证镜像数据与主数据库的一致性。