数据库恢复
事务、事务定义transaction显示隐式、事务结束commit/rollback、特性(原子、一致、隔离、持续)
故障:事务故障(事务异常没完成,输入溢出、完整性并发控制、应用程序,undo没做完的正向扫描)、系统故障(系统破坏、事务终止、内存丢失,os或者DBMS、cpu、停电,redo做完的、undo没做完的、正向扫描)、介质故障(硬件、外存丢失,备份+日志重做、DBA介入)
故障恢复技术:静态备份、动态备份、完全备份、差异备份
提升回复效率技术:检查点(查日志、redo耗时、)、镜像技术(区别于备份、DBMS自动更新、一致性、支持并发、镜像恢复、不影响系统)
恢复的主要概念
数据保护的类型(记背)
- 安全性保护
- 完整性保护
- 并发控制
- 数据库恢复
事务
事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全部不做,是不可分割的工作单位。
事务是恢复和并发控制的基本单位
定义事务
- 隐式方式:DBMS自动划分事务
- 显示方式:
BEGIN TRANSACTION
SQL 语句1
SQL 语句2
。。。。。
SQL 语句n
COMMIT(ROLLBACK)
结束事务
- COMMIT:事务正常结束,提交所有操作,对数据库永久性更新(还可以redo)
- ROLLBACK:事务异常终止,回滚所有操作,到开始时候的状态
事务的ACID特性
- 原子性(Atomicity):一个事务要么都做,要么都不做,十五必须以Commit或者Rollback结束
- 一致性(Consistency):使数据库从一个一致性状态到另一个一致性状态。一致性状态:数据库中只包含成功事务提交的结果
- 隔离性(Isolation):一个事务的执行不被其他事务干扰,并发不影响事务的执行。
- 持续性(Durability):一个事务一旦提交,对数据库的改变是永久的。
故障的种类和恢复策略
数据库管理系统对故障的对策
- DBMS提供恢复子系统
- 保证故障发生后,能把数据库中的数据从错误状态恢复到某种逻辑一致的状态
- 保证事务ACID特性
数据库的恢复:把数据库从错误状态恢复到某一已知的正确状态。
事务故障
概念:某一个事务在运行过程中由于各种原因未运行到正常的终点。
策略:利用日志文件撤销(UNDO)这个事务已经对数据库进行的修改。系统自动完成,是通过反向扫描文件日志的方式实现的。系统自动完成,无需用户干预。
常见原因:输入数据有误、运算溢出、违反了某些完整性限制、某些应用程序出错、并行事务发生死锁
事务运行异常没能结束、undo没做完的、反向扫描日志、系统自动完成,应用程序方面的错误、完整性并发控制
系统故障
概念:整个系统的正常运行被破坏,所有正在运行的事务都被终止,内存中数据缓冲区数据全部丢失。
策略:UNDO故障发生时未完成的事务,REDO已经完成的事务。系统自动完成,是通过正向扫描文日志文件实现的。
常见原因:操作系统或DBMS代码错误、特定类型的硬件错误(如CPU故障)、突然停电
系统破坏、事务终止、内存丢失,正向扫描undo没做完的、方向扫描redo做完的commit、重启自动完成,os或者DBM或则和cpu、停电
介质故障
概念:数据库硬件故障让存储在外存中的数据丢失。
策略:重新装入发生介质故障前某个时刻的副本,重做从那个时间点开始的所有成功事务。
常见原因:磁盘损坏、磁头碰撞、瞬时强磁场干扰
硬件故障、外存丢失,从备份开始重做,外存硬件问题,需要DBA接入、具体工作由DBMS完成
数据库恢复技术
基本原理:利用存储在系统其他地方的冗余数据来重建数据库中已经被破坏或者不正确的那部分数据。
实现技术
建立冗余数据
- 数据备份(静态备份、动态备份、完全备份、差异备份)
- **日志文件:**以流水的昂视记录每一个事务对数据库的每一个操作和操作顺序。
利用这些冗余数据来实现数据库的恢复
日志文件的内容:各个事物的开始标记和结束标记,各个事务的所有更新操作(包括更新前的值和更新后的值),与事务有关的内部更新操作。
日志文件的记录次序严格按照并行事务执行的时间次序。
必须先写日志文件,后写数据库。(先记下日志,大不了undo没做完的)
静态备份(冷备份)
在系统中无运行事务的时候进行备份,备份期间不允许对数据库进行任何操作。
简单但降低了可用性
动态备份(热备份)
备份操作和用户事务并发进行,备份期间允许对数据库进行操作。
不影响事务运行但不保证数据正确
完全备份(海量备份)
每次备份整个数据库
差异备份(增量备份)
只备份上次备份后更新过的数据
提升恢复效率的技术
具有检查点的恢复技术
搜索日志耗费大量时间,REDO耗费大量时间。所以可以在日志文件中增加检查点记录,增加重新开始文件,恢复子系统在登录日志文件期间动态维护日志。
检查点技术
- 检查点记录的内容
- 建立检查点时刻所有正在执行的事务清单
- 这些事务最近一个日志记录的地址
- 重新开始文件的内容
- 记录各个检查点记录在日志文件中的地址
检查点主要工作内容
- 将当前日志缓冲区中的所有日志记录写入磁盘的日志文件上
- 在日志文件中写入一个检查点记录(定时或者事件触发)
- 将当前数据缓冲区的所有记录数据写入磁盘的数据库中
- 把检查点记录在日志文件中的地址写入一个重新开始文件中。
利用检查点的恢复策略
- 从前向后读取 Redo,重做所有已提交的事务
- 从后往前读取 Undo,回滚未提交的事务
镜像技术
DBMS自动把整个数据库或者其中的关键数据复制到另一个磁盘上,并自动保证镜像数据与主数据的一致性。
-
当出现介质故障的时候自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统或者重装数据库副本。
-
没有故障的时候可以用于并发操作,一个用户对数据库进行修改,其他用户可以读取镜像上的数据。
第10章
1.试述事务的概念及事务的4 个特性。
答:
事务是用户定义的一个数据库操作序列,这些操作要么全做要么全不做,是一个不可分割的工作单位。
事务具有4 个特性:原子性(Atomicity )、一致性(consistency )、隔离性( Isolation )和持续性(Durability )。这4 个特性也简称为ACID 特性。
原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
持续性:持续性也称永久性(Perfnanence ) ,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
2 .为什么事务非正常结束时会影响数据库数据的正确性,请列举一例说明之。
答:
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。 例如某工厂的库存管理系统中,要把数量为Q 的某种零件从仓库1 移到仓库2 存放。 则可以定义一个事务T , T 包括两个操作;Ql = Ql 一Q , Q2= Q2 + Q。 如果T 非正常终止时只做了第一个操作,则数据库就处于不一致性状态,库存量无缘无故少了Q 。
3 .数据库中为什么要有恢复子系统?它的功能是什么?
答:
因为计算机系统中硬件的故障、软件的错误、操作员的失误以及恶意的破坏是不可避免的,这些故障轻则造成运行事务非正常中断,影响数据库中数据的正确性,重则破坏数据库,使数据库中全部或部分数据丢失,因此必须要有恢复子系统。 恢复子系统的功能是:把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)。
4 .数据库运行中可能产生的故障有哪几类?哪些故障影响事务的正常执行?哪些故障破坏数据库数据?
答:
数据库系统中可能发生各种各样的故障,大致可以分以下几类:
(1)事务内部的故障; (2)系统故障;
(3)介质故障; (4)计算机病毒。
事务故障、系统故障和介质故障影响事务的正常执行;介质故障和计算机病毒破坏数据库数据。
5 .数据库恢复的基本技术有哪些?
答:
数据转储(四种)和登记日志文件是数据库恢复的基本技术。 当系统运行过程中发生故障,利用转储的数据库后备副本和日志文件就可以将数据库恢复到故障前的某个一致性状态。
6 .什么是日志文件?为什么要设立日志文件?
答:
(1)日志文件是用来记录事务对数据库的所有更新操作的文件。 (2)设立日志文件的目的是:进行事务故障恢复;进行系统故障恢复;协助后备副本进行介质故障恢复。
7 .登记日志文件时为什么必须先写日志文件,后写数据库?
答:
把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。 如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO 操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。
8.针对不同的故障,试给出恢复的策略和方法。(即如何进行事务故障的恢复?系统故障的恢复?介质故障恢复?)
答: 事务故障的恢复: 事务故障的恢复是由DBMS自动完成的,对用户是透明的。DBMS执行恢复步骤是:强行回滚(ROLLBACK),也即是撤消事务(UNDO),清除该事务对数据库的所有修改,使得这个事务象根本没有启动过一样。
系统故障的恢复: 系统故障可能会造成数据库处于不一致状态:一是未完成事务对数据库的更新可能已写入数据库;二是已提交事务对数据库的更新可能还留在缓冲区,没来得及写入数据库。因此恢复操作就是要撤销(UNDO )故障发生时未完成的事务,重做(REDO )已完成的事务。 系统的恢复步骤是:
-
正向扫描日志文件,找出在故障发生前已经提交的事务队列(REDO 队列)和未完成的事务队列(UNDO 队列)。
-
对撤销队列中的各个事务进行UNDO 处理。
进行UNDO 处理的方法是,反向扫描日志文件,对每个UNDO 事务的更新操作执行逆操作,即将日志记录中“更新前的值”写入数据
-
对重做队列中的各个事务进行REDO 处理。
进行REDO 处理的方法是:正向扫描日志文件,对每个REDO 事务重新执行日志文件登记的操作。即将日志记录中“更新后的值”写入数据库。
介质故障的恢复: 介质故障是最严重的一种故障。 恢复方法是重装数据库,然后重做已完成的事务。具体过程是:
( 1 ) DBA 装入最新的数据库后备副本(离故障发生时刻最近的转储副本), 使数据库恢复到转储时的一致性状态; ( 2 ) DBA 装入转储结束时刻的日志文件副本; ( 3 ) DBA 启动系统恢复命令,由DBMS 完成恢复功能,即重做已完成的事务。
9 .什么是检查点记录?检查点记录包括哪些内容?
答: 检查点记录是一类新的日志记录。它的内容包括:
① 建立检查点时刻所有正在执行的事务清单
② 这些事务的最近一个日志记录的地址。
10 .具有检查点的恢复技术有什么优点?
答:
利用日志技术进行数据库恢复时,恢复子系统必须搜索日志,确定哪些事务需要REDO ,哪些事务需要UNDO 。一般来说,需要检查所有日志记录。这样做有两个问题:一是搜索整个日志将耗费大量的时间;二是很多需要REDO 处理的事务实际上已经将它们的更新操作结果写到数据库中了,恢复子系统又重新执行了这些操作,浪费了大量时间。 检查点技术就是为了解决这些问题。
在采用检查点技术之前,恢复时需要从头扫描日志文件,而利用检查点技术只需要从最后一个检查点时刻Tc开始扫描日志,这就缩短了扫描日志的时间。
11 .什么是数据库镜像?它有什么用途?
答:
数据库镜像即根据DBA 的要求,自动把整个数据库或者其中的部分关键数据复制到另一个磁盘上。每当主数据库更新时,DBMS 自动把更新后的数据复制过去,即DBMS 自动保证镜像数据与主数据的一致性。 数据库镜像的用途有:
一是用于数据库恢复。当出现介质故障时,可由镜像磁盘继续提供使用,同时DBMS 自动利用镜像磁盘数据进行数据库的恢复,不需要关闭系统和重装数据库副本。
二是提高数据库的可用性。在没有出现故障时,当一个用户对某个数据加排它锁进行修改时,其他用户可以读镜像数据库上的数据,而不必等待该用户释放锁。