事务的基本概念,数据库恢复技术,数据库的故障分析笔记

一、什么是事务
事务(Transaction)是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单元。
事务和程序是两个概念:
在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序;
一个应用程序通常包含多个事务;
事务是恢复和并发控制的基本单位。

事务的基本特性
原子性(Atomicity):事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性(Consistency):事务执行结果必须使数据库从一个一致性状态变到另一个一致性状态。
隔离性(Isolation):由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务识别数据时数据所处的状态,要么是另一并发事务修改它之前的状态,一个事务的执行不能被其他事务干扰,从而影响它对数据的正确使用和修改。
持续性(Durability):一个事务一旦提交,它对数据库的改变就应该是永久的,接下来的其他操作或故障不应该对其执行结果有任何影响。

例:银行转帐:从帐号A中取出一百元,存入帐号B。
定义一个事务,该事务包括两个操作
① 从帐户A减去一百元(A=A-100);
② 给帐户B加上一百元(B=B+100)。
该事务应该符合:这两个操作要么全做,要么全不做。如果只做一个操作,数据库就处于不一致性状态。

事务的基本概念,数据库恢复技术,数据库的故障分析笔记_第1张图片

数据库系统故障的种类
一、事务内部的故障
事务内部的故障有的是可以通过事务程序本身发现的(见下面转账事务的例子),有的是非预期的,不能由事务程序处理的。
例如:银行转账事务,这个事务把一笔金额从一个账户甲转给另一个账户乙。
二、系统故障
系统故障是指造成系统停止运转的任何事件,使得系统要重新启动。例如,特定类型的硬件错误(CPU故障)、操作系统故障、DBMS代码错误、突然停电等。这类故障影响正在运行的所有事务,但不破坏数据库。这时主存内容,尤其是数据库缓冲区(在内存)中的内容都被丢失,所有运行事务都非正常终止。发生系统故障时,一些尚未完成的事务的结果可能己送入物理数据库,从而造成数据库可能处于不正确的状态。为保证数据一致性,需要清除这些事务对数据库的所有修改。
恢复于系统必须在系统重新启动时让所有非正常终止的事务回滚,强行撤销(UNDO)所有未完成事务。
另一方面,发生系统故障时,有些己完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分或全部丢失,这也会使数据库处于不一致状态,因此应将这些事务己提交的结果重新写入数据库。所以系统重新启动后,恢复子系统除需要撤销所有未完成事务外,还需要重做(REDO)所有己提交的事务,以将数据库真正恢复到一致状态。
三、介质故障
系统故障常称为软故障(Soft Crash),介质故障称为硬故障(Hard Crash)。硬故障指外存故障,如磁盘损坏、磁头碰撞,瞬时强磁场干扰等。这类故障将破坏数据库或部分数据库,并影响正在存取这部分数据的所有事务。这类故障比前两类故障发生的可能性小得多,但破坏性最大。

数据库恢复技术基本知识
故障是不可避免的 :计算机硬件故障 ,软件的错误 ,操作员的失误 ,恶意的破坏 。
故障的影响 :运行事务非正常中断,影响数据库中数据的正确性 ,破坏数据库,全部或部分丢失数据 。

数据库的恢复
数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,这就是数据库的恢复管理系统对故障的对策。
恢复子系统是数据库管理系统的一个重要组成部分 。
恢复技术是衡量系统优劣的重要指标。

事务故障

什么是事务故障
 事务在运行过程中未运行至正常终止点就夭折了。
常见原因
输入数据有误
运算溢出
违反了某些完整性限制
某些应用程序出错
并行事务发生死锁
事务故障恢复
(1) 可预见错误:由事务程序来处理
(2) 不可预见错误:由DBMS强行回滚该事务

事务故障:事务在运行至正常终止点前被中止
恢复方法:由恢复子系统应利用日志文件撤消(UNDO)此事务已对数据库进行的修改,事务故障的恢复由系统自动完成,不需要用户干预

系统故障造成数据库不一致状态的原因
一些未完成事务对数据库的更新已写入数据库
一些已提交事务对数据库的更新还留在缓冲区没来得及写入数据库

恢复方法

  1. Undo 故障发生时未完成的事务
  2. Redo 已完成的事务

系统故障的恢复由系统在重新启动时自动完成,不需要用户干预
介质故障是对系统影响最为严重的一种故障,严重影响数据库的可用性
介质故障恢复比较费时为预防介质故障,DBA必须周期性地转储数据库

检查点
一、检查点的建立

  1. 将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上。
  2. 在日志文件中写入一个检查点记录。
  3. 将当前数据缓冲区的所有数据记录写入磁盘的数据库中。
  4. 把检查点记录在日志文件中的地址写入一个重新开始文件。

优点:当事务T在一个检查点之前提交T对数据库所做的修改已写入数据库,在进行恢复处理时,没有必要对事务T执行REDO操作

二、检查点的使用

  1. 从重新开始文件中找到最后一个检查点记录在日志文件中的地址
    2 由该地址在日志文件中找到最后一个检查点记录,由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST
    建立两个事务队列
    UNDO-LIST
    REDO-LIST
    把ACTIVE-LIST暂时放入UNDO-LIST队列,REDO队列暂为空。
    3.从检查点开始正向扫描日志文件,直到日志文件结束
    如有新开始的事务Ti,把Ti暂时放入UNDO-LIST队列
    如有提交的事务Tj,把Tj从UNDO-LIST队列移到REDO-LIST队列
    4.对UNDO-LIST中的每个事务执行UNDO操作, 对REDO-LIST中的每个事务执行REDO操作

2.5 数据库镜像
提高数据库可用性的解决方案
数据库镜像(Mirror)

你可能感兴趣的:(数据库的基础知识笔记)