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

 

一、数据库恢复技术


1. 事务

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


2. 事务的特性

事务具有四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability),简称为ACID特性。

(1) 原子性

事务是数据库的逻辑工作单位,事务中包含的诸操作要么都做,要么都不做。

(2) 一致性

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

(3) 隔离性

一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰

(4) 持续性

指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。

事务是恢复和并发控制的基本单位。保证事务ACID特性是事务管理的重要任务。


3. 故障种类

数据库系统中可能发生的各种各样的故障,大致可以分为下几类:

(1) 事务内部的故障

有的可以通过事务程序本身发现,如转账时发现账户余额不足。更多的故障是非预期的,是不能由应用程序处理的,如运算溢出、并发事务发生死锁而被选中撤销该事务、违反了某些完整性限制等

(2) 系统故障

指造成系统停止运转的任何事件,使得系统要重新启动。例如:硬件错误(CPU故障)、操作系统故障、DBMS代码错误、系统断电等。这类故障影响正在运行的所有事务,但不破坏数据库。这时主存内容,尤其是数据库缓冲区(在内存)中的内容都被丢失,所有运行事务都非正常终止。发生故障时,一些尚未完成的事务的结果可能已送入物理数据库,从而造成数据库可能处于不正确的状态。

恢复子系统必须在系统重新启动时让所有非正常终止的事务回滚,强行撤销(UNDO)所有未完成事务。另一方面,有些已完成的事务可能有一部分甚至全部留在缓冲区,尚未写回到磁盘上的物理数据库中,系统故障使得这些事务对数据库的修改部分或全部丢失,这也会使数据库处于不一致状态,因此应将这些事务已提交的结果重新写入数据库。所以系统重新启动后,恢复子系统除需要撤销所有未完成的事务,还需要重做(REDO)所有已提交的事务,以将数据库真正恢复到一致状态。

(3) 介质故障

也称硬故障,如磁盘损坏、磁头碰撞、强磁场干扰等。

(4) 计算机病毒


4. 恢复的实现技术

恢复机制涉及的两个关键问题是:第一,如何建立冗余数据;第二,如何利用这些冗余数据实施数据库恢复。建立冗余数据最常用的技术是数据转储和登录日志文件。


5. 恢复策略

当系统运行过程中发生故障,利用数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态。

(1) 事务故障的恢复

事务故障是指事务在运行至正常终止点前被终止,这时恢复子系统应利用日志文件撤销(UNDO)此事务已对数据库进行的修改。事务故障的恢复是由系统自动完成的,对用户是透明的。

恢复步骤:

1> 反向扫描日志文件,查找该事务的更新操作
2> 对事务的更新操作执行逆操作
3> 继续查找该事务的其他更新操作,并做同样处理,直至读到该事务的开始标记,事务故障恢复就完成了。

(2) 系统故障的恢复

系统故障造成数据库不一致状态的原因有两个,一是未完成事务对数据库的更新可能已写入数据库,二是已提交事务对数据库的更新可能还留在缓冲区没来得及写入数据库。因此恢复操作就是要撤销故障发生时未完成的事务,重做已完成的事务。系统故障的恢复是由系统在重新启动时自动完成的,不需要用户干预。

恢复步骤:

1> 正向扫描日志文件,找出在故障发生前已提交的事务(这些事务既有BEGIN TRANSACTION标记,也有COMMIT标记),将其事务标识记入重做(REDO)队列。同时找出故障发生时尚未完成的事务(这些事务只有BEGIN TRANSACTION标记,无相应的COMMIT标记),将其事务标识记入撤销队列。
2> 对撤销队列中的各个事务进行撤销(UNDO)处理。方法是,反向扫描日志文件,对每个UNDO事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据库。
3> 对重做队列中的各个事务进行重做(REDO)处理。方法是,正向扫描日志文件,对每个REDO事务重新执行日志文件登记的操作,即将日志记录中“更新后的值”写入数据库。

(3) 介质故障的恢复

恢复方法是重装数据库,然后重做已完成的事务。

 

二、并发控制


1. 交叉并发方法:单处理机系统中的并发事务并没有真正地并行运行,但是减少了处理机的空闲时间,提高了系统的效率。

2. 同时并发方法:多处理机系统中,每个处理机可以运行一个事务,多个处理机可以同时运行多个事务,实现多个事务真正的并发执行。

3. 并发控制概述

为了保证事务的隔离性和一致性,DBMS需要对并发操作进行正确调度。并发操作带来的数据不一致性主要包括丢失修改、不可重复读和读“脏”数据等。下面把事务读数据x记为R(x),把事务写数据x记为W(x)。三种数据不一致可以由下图表示:

并发控制的主要技术有封锁(Locking)、时间戳(Timestamp)和乐观控制法。

4. 封锁

封锁是实现并发控制的一个非常重要的技术。

所谓封锁就是事务T在对某个数据对象例如表、记录等操作之前,先向系统发出请求,对其加锁。加锁后事务T就对该数据对象有了一下的控制,在事务T释放它的锁之前,其他的事务不能更新此数据对象。

确切的控制由封锁的类型决定。基本的封锁类型有两种:排它锁(Exclusive Locks,简称X锁)和共享锁(Share Locks,简称S锁)

(1) 排它锁又称为写锁。若事务T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事务都不能再对A加任何类型的锁,直到T释放A上
的锁。这就保证了其他事务在T释放A上的锁之前不能再读取和修改A。

(2) 共享锁又称为读锁。若事务T对数据对象A加上S锁,则事务T可以读A但不能修改A,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。这就保证了其他事务可以读A,但在T释放A上的S锁之前不能对A作任何修改。

排它锁和共享锁的控制方式可以用下图的相容矩阵来表示:


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值