数据库恢复技术
数据库恢复
事务(Transaction)
定义
一个数据库操作序列
一个不可分割的工作单位
恢复和并发控制的基本单位
事务和程序比较
在关系数据库中,一个事务可以是一条或多条SQL语句,也可以
包含一个或多个程序。
一个程序通常包含多个事务
- 显式定义方式
BEGIN TRANSACTION BEGIN TRANSACTION
SQL 语句1 SQL 语句1
SQL 语句2 SQL 语句2
。。。。。 。。。。。
COMMIT ROLLBACK - 隐式方式
当用户没有显式地定义事务时,DBMS按缺省规定自动划
二、事务的特性(ACID特性)
事务的ACID特性:
— 原子性(Atomicity)
— 一致性(Consistency)
— 隔离性(Isolation)
— 持续性(Durability)
事务状态
— 活动状态 — 部分提交状态 — 失败状态 — 提交状态 — 终止状态
数据库恢复概述
故障是不可避免的
— 系统故障:计算机软、硬件故障
— 人为故障:操作员的失误、恶意的破坏等。
数据库的恢复
— 把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)
故障的种类
— 事务内部的故障
— 系统故障
— 介质故障
— 计算机病毒
事务内部的故障
- 有的是可以通过事务程序本身发现的(见下面转账事的例子)
- 有的是非预期的
例如,银行转账事务,这个事务把一笔金额从一个账户甲转给另一个账户乙。
BEGIN TRANSACTION
读账户甲的余额BALANCE;
BALANCE=BALANCE-AMOUNT;(AMOUNT 为转账金额)
写回BALANCE;
IF(BALANCE < 0 ) THEN
{
打印'金额不足,不能转账';
ROLLBACK;(撤销刚才的修改,恢复事务)
}
ELSE
{
读账户乙的余额BALANCE1;
BALANCE1=BALANCE1+AMOUNT;
写回BALANCE1;
COMMIT;}
这个例子所包括的两个更新操作要么全部完成要么全部不做。否则就会使数据库处于不一致状态,例如只把账户甲的余额减少了而没有把账户乙的余额增加。
在这段程序中若产生账户甲余额不足的情况,应用程序可以发现并让事务滚回,撤销已作的修改,恢复数据库到正确
事务内部更多的故障是非预期的,是不能由应用程序处理的。
运算溢出
并发事务发生死锁而被选中撤销该事务
违反了某些完整性限制等
以后,事务故障仅指这类非预期的故障
— 事务故障的恢复:撤消事务(UNDO)
系统故障
称为软故障,是指造成系统停止运转的任何事件,使得系统要重新启动。
— 整个系统的正常运行突然被破坏
— 所有正在运行的事务都非正常终止
— 不破坏数据库
— 内存中数据库缓冲区的信息全部丢失
系统故障的常见原因
— 特定类型的硬件错误(如CPU故障)
— 操作系统故障
— DBMS代码错误
— 系统断电
系统故障的恢复
— 发生系统故障时,事务未提交
恢复策略:强行撤消(UNDO)所有未完成事务
— 发生系统故障时,