12009-7-28 School Of Information · ChangJun
第十二章数据库保护
22009-7-28 School Of Information · ChangJun
时刻对新事物充满好奇,
使自己时刻处于最佳学习状态!
32009-7-28 School Of Information · ChangJun
回顾
数据的增加(插入,INSERT)
数据的删除 ( DELETE )
数据的修改 (更新,UPDATE )
数据的检索 (查询,SELECT)
视图( VIEW)的管理和应用
42009-7-28 School Of Information · ChangJun
本章背景
二十世纪九十年代初,关系数据库的理论已经成熟,各大公司竞相推出 RDBMS产品。
但遇到一系列技术问题:
数据库的规模越来越大
数据库的结构越来越复杂数据一致性( Integrity)?
? 数据安全性( Security)
52009-7-28 School Of Information · ChangJun
本章背景
数据库的共享用户越来越多
数据库出现的故障各种各样数据并发性( Concurrency)?
? 数据恢复( Recovery)
总之,我们该如何保护数据库成为了一个 必须 解决的 首要 问题?
62009-7-28 School Of Information · ChangJun
本章背景
九十年代中,以 Microsoft公司的 James Gray
为代表的一大批数据库专家开拓性的工作,提出了解决问题的有效技术:
事务处理( Transacton Processing )
1998年 James Gray被授于了计算机领域的最高奖 ——
图灵奖
72009-7-28 School Of Information · ChangJun
本章目标
事务的基本概念
定义
特征
事务处理模型
并发控制
概述
措施
封锁协议
死锁
数据库备份与恢复
82009-7-28 School Of Information · ChangJun
12.1 事务的基本概念例如:对于一个转帐活动,A帐户转帐给 B帐户
n元钱,这个活动包含两个动作:
第一个动作,A帐户 - n
第二个动作,B帐户 + n
92009-7-28 School Of Information · ChangJun
事务( Transaction)
事务是用户定义的数据操作系列,这些操作作为一个完整的工作单元,一个事务内的所有语句被作为一个整体,要么全部执行,要么全部不执行。
一、什么是事务
102009-7-28 School Of Information · ChangJun
二、事务处理模型每个事务都有显式的开始和结束标记。
事务的开始标记是:
BEGIN TRANSACTION( TRANSACTION可简写为
,TRAN)
事务的结束标记为:
COMMIT [ TRANSACTION| TRAN]
和 ROLLBACK [ TRANSACTION| TRAN]
112009-7-28 School Of Information · ChangJun
二、事务处理模型
例:
BEGIN TRANSACTION
UPDATE 支付表 SET 帐户总额 = 帐户总额 - n
WHERE 帐户名 = ‘ A’
UPDATE 支付表 SET 帐户总额 = 帐户总额 + n
WHERE 帐户名 = ‘ B’
COMMIT
122009-7-28 School Of Information · ChangJun
三,事务的特征
原子性( Atomicity)
一致性 (Consistency)
事务具有四个特性,简称 ACID特性。
事务的原子性是指事务是数据库的逻辑工作单位,事务中的操作要么都做,要么都不做。
事务一致性是指事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。
132009-7-28 School Of Information · ChangJun
三,事务的特征
隔离性 (Isolation)
持久性 (Durability)
事务的隔离性是指数据库中一个事务的执行不能被其它事务干扰。
事务的持久性也称为永久性
( Permanence),指事务一旦提交,则其对数据库中数据的改变就是永久的。
142009-7-28 School Of Information · ChangJun
三,事务的特征
保证事务的 ACID特性是事务处理的重要任务,可能遭到破坏的因素:
多个事务并发运行时,不同事务的操作交叉执行。
—— RDBMS的 并发控制机制
事务在运行过程中被强行停止。
—— RDBMS的 恢复机制
152009-7-28 School Of Information · ChangJun
12.2 并发控制例如:假设有两个飞机订票点 A和 B,如果 A,B两个订票点恰巧同时办理同一架航班的飞机订票业务。其操作过程及顺序如下:
1) A订票点(事务 A)读出航班目前的机票余额数,
假设为 10张。
2) B订票点(事务 B)读出航班目前的机票余额数,
也为 10张。
3) A订票点卖出 6张机票,修改机票余额为 10-6=4,
并将 4写回到数据库中。
4) B订票点卖出 5张机票,修改机票余额为 10-5=5,
并将 5写回到数据库中。
162009-7-28 School Of Information · ChangJun
一、概述
并发操作会产生数据的不一致,可慨括为四种:
丢失数据修改( Lost Update)
172009-7-28 School Of Information · ChangJun
一、概述
读,脏,数据 (Dirty Read )
182009-7-28 School Of Information · ChangJun
一、概述
不可重复读 (Non-Repeatable Read)
192009-7-28 School Of Information · ChangJun
一、概述
产生,幽灵,数据实际属于不可重复读的范畴。指当事务 T1
按一定条件从数据库中读取了某些数据记录后
,事务 T2删除了其中的部分记录,或者在其中添加了部分记录,则当 T1再次按相同条件读取数据时,发现其中莫名其妙地少了(对删除)
或多了(对插入)一些记录。这样的数据对 T1
来说就是,幽灵,数据或称,幻影,数据。
202009-7-28 School Of Information · ChangJun
一、措施
加锁( Locking)
并发控制的主要方式是封锁机制,即加锁
( Locking)。
所谓加锁就是事务 T在对某个数据操作之前,先向系统发出请求,对其加锁。加锁后事务 T对其要操作的数据具有了一定的控制权,在事务 T释放它的锁之前,其他事务不能操作这些数据。
加锁就是限制事务内和事务外对数据的操作。
212009-7-28 School Of Information · ChangJun
一、措施
加锁并发控制措施( Locking)
基本的锁类型有两种:排它锁(
Exclusive Locks,也称为 X锁或写所)和共享锁( Share Locks,也称 S锁或读锁)。
共享锁:若事务 T对数据对象 A加了 S锁,则事务 T可以读 A,但不能修改 A,其它事务只能再对 A加 S锁,而不能加 X锁,直到 T释放了 A上的 S锁。
排它锁:若事务 T对数据对象 A加了 X锁,则允许 T读取和修改 A,但不允许其它事务再对 A
加任何类型的锁和进行任何操作。
222009-7-28 School Of Information · ChangJun
排它锁和共享锁的相容矩阵
T1 T2 X S 无锁
X NO NO YES
S NO YES YES
YES YES YES
一、措施
232009-7-28 School Of Information · ChangJun
并发控制
加锁(封锁)协议对封锁方式规定不同的规则,就形成了各种不同级别的封锁协议。
一级封锁协议
一级封锁协议是:对事务 T要修改的数据加 X锁,
直到事务结束(包括正常结束和非正常结束)时才释放。
一级封锁协议可以防止丢失修改,但不能保证可重复读和不读“脏”数据。
242009-7-28 School Of Information · ChangJun
并发控制
二级封锁协议
二级封锁协议是:一级封锁协议加上对事务
T对要读取的数据加 S锁,读完后即释放 S锁。
二级封锁协议除了可以防止丢失修改外,还可以防止读“脏”数据。但在二级封锁协议协议中,由于事务 T读完数据即释放 S锁,因此,
不能保证可重复读数据。
252009-7-28 School Of Information · ChangJun
并发控制
三级封锁协议
三级封锁协议是:一级封锁协议加上事务 T
对要读取的数据加 S锁,并直到事务结束才释放。
三级封锁协议除了可以防止丢失修改和不读“脏”数据之外,还进一步防止了不可重复读。
262009-7-28 School Of Information · ChangJun
并发控制
三个封锁协议的 主要区别 在于什么操作需要申请封锁,以及何时释放锁。
X锁(对写数据
S锁(对只读数据)
不丢失修改(写)
不读脏数据(读)
可重复读
(读)
一级 事务全程加锁不加 √
二级 事务全程加锁事务开始加,
读完即放
√ √
三级 事务全程加锁事务全程加锁
√ √ √
272009-7-28 School Of Information · ChangJun
并发控制预防死锁的方法有多种,常用的方法有:
一次封锁法:每个事务一次将所有要使用的数据全部加锁。
顺序封锁法:预先对数据对象规定一个封锁顺序,所有事务都按这个顺序封锁。
一次封锁法的问题是封锁范围过大,降低了系统的并发性。顺序封锁法的问题是若封锁对象级多,则随着插入、删除等操作的不断变化,使维护这些资源的封锁顺序很困难。
282009-7-28 School Of Information · ChangJun
并发控制并发调度的可串行性
直观地说,如果多个事务在某个调度下的执行结果与这些事务在某个串行调度下的执行结果相同,那么这个调度就一定是正确的,因为所有事务的串行调度策略一定是正确的调度策略。
多个事务的并发执行是正确的,当且仅当其结果与按某一顺序的串行执行的结果相同,则我们称这种调度为可串行化的调度。
292009-7-28 School Of Information · ChangJun
并发控制并发调度的可串行性例如,假设有两个事务,分别包含如下操作:
事务 T1:读 B; A= B+ 1;写回 A;
事务 T2:读 A; B= A+ 1;写回 B;
假设 A,B的初值均为 4,则按 T1? T2的顺序执行,其结果为 A= 5,B= 6;如果按 T2? T1
的顺序执行,则其结果为 A= 6,B= 5。则当并发调度时,如果执行的结果是这两者之一,就都是正确的。
302009-7-28 School Of Information · ChangJun
并发控制
T1 T2 T1 T2 T1 T2 T1 T2
B加 S锁 B加 S锁 B加 S锁 B加 S锁
Y= B= 4 X= A= 4 Y= B= 4 Y= B= 4
B释放 S锁 A释放 S锁 A加 S锁 B释放 S锁
A加 X锁 B加 X锁 X= A= 4 A加 X锁
A= Y+1 B= X+1 B释放 S锁 A加 S锁写回 A(5) 写回 B(4) A释放 S锁 A= Y+1 等待
A释放 X锁 B释放 X锁 A加 X锁 写回 A(5) 等待
A加 S锁 B加 S锁 A= Y+1 等待
X= A= 5 Y= B= 5 写回 A(5) X= A= 5
A释放 S锁 B释放 S锁 B加 X锁 A释放 S锁
B加 X锁 A加 X锁 B= X+1 B加 X锁
B= X+1 A= Y+1 B= X+1
写回 B(6) 写回 A(6) A释放 X锁 写回 B(6)
B释放 X锁 A释放 X锁 B释放 X锁 B释放 X锁
(a) 串行调度 (b) 串行调度 (c) 不可串行化调度 (d) 可串行化调度
312009-7-28 School Of Information · ChangJun
并发控制
两段锁协议
两段锁( Two-Phase Locking,简称 2PL)协议是保证并发调度的可串行性的封锁协议。
两段锁协议是实现可串行化调度的充分条件。
两段锁的含义是,可以将每个事务分成两个时期:申请封锁期(开始对数据操作之前)和释放封锁期(结束对数据操作之后),申请期申请要进行的封锁,释放期释放所占有的封锁。
在申请期不允许释放任何锁,在释放期不允许申请任何锁。
322009-7-28 School Of Information · ChangJun
并发控制
若某事务遵守两段锁协议,则其封锁序列为:
事务过程开始加锁段分界解锁段
LOCK段 UNLOCK段明显的分为加锁界所两个段
t
332009-7-28 School Of Information · ChangJun
12.3 数据库备份与恢复
12.3.1 数据库故障的种类
12.3.2 数据库备份
12.3.3 数据库恢复
342009-7-28 School Of Information · ChangJun
数据库备份与恢复数据库故障的种类:
事务内部的故障是可以预期到的,这样的故障可以通过事务程序本身发现。如,在银行转帐事务中,当把一笔金额从 A帐户转给 B帐户时,如果 A帐户中的金额不足,则应该不能进行转帐,否则可以进行转帐。
352009-7-28 School Of Information · ChangJun
数据库备份与恢复
系统故障指造成系统停止运转、系统要重启的故障。
例如,硬件错误( CPU故障)、操作系统故障、
突然停电等。这样的故障会影响正在运行的所有事务,但不破坏数据库。
其它故障介质故障或由计算机病毒引起的故障或破坏,我们归为其它故障。
362009-7-28 School Of Information · ChangJun
数据库备份与恢复数据库备份数据备份是指定期或不定期地对数据库数据进行复制,可以将数据复制到本地机器上,也可以复制到其它机器上,备份的介质可以是磁带也可以是磁盘。
在制定备份策略时,应考虑如下几个方面:
备份的内容
备份数据库应备份数据库中的表(结构)、
数据库用户(包括用户和用户操作权)、用户定义的数据库对象和数据库中的全部数据。而且还应该备份数据库日志等内容。
372009-7-28 School Of Information · ChangJun
数据库备份与恢复
备份频率确定备份频率要考虑两个因素:
一、是存储介质出现故障或其它故障时,
允许丢失的数据量的大小。
二、是数据库的事务类型(读多还写多)
以及事务发生的频率(经常发生还是不经常发生)。
382009-7-28 School Of Information · ChangJun
数据库备份与恢复数据库恢复恢复数据库是指将数据库从错误描述状态恢复到正确的描述状态(最近的正确时刻)的过程。
1.恢复策略
(1) 事务故障的恢复事务故障是指事务在运行到正常结束前被终止,这时恢复子系统可以利用日志文件撤消
( Undo)此事务对数据库已进行的修改。
392009-7-28 School Of Information · ChangJun
数据库备份与恢复事务故障的恢复是由系统自动完成的,对用户是透明的。
恢复的过程为:
反向扫描日志文件并执行相应操作的逆操作。
402009-7-28 School Of Information · ChangJun
数据库备份与恢复
( 2)系统故障的恢复系统故障造成数据库不一致状态的原因有两个,一个是未完成事务对数据库的更新可能已写入数据库,二是已提交事务对数据库的更新可能还留在缓冲区中未写入数据库。
系统故障的恢复是系统在重启时自动完成的,
不需用户干预。
恢复过程为,正向扫描日志文件,找出故障发生前已提交的事务,将其重做;同时找出故障发生时未完成的事务,并撤消这些事务。
412009-7-28 School Of Information · ChangJun
数据库备份与恢复
( 3)介质故障的恢复介质故障发生后,磁盘上的物理数据和日志文件均遭到破坏,这是最严重的一种故障,恢复的方法是首先重装数据库,使数据库管理系统能正常运行,然后利用介质损坏前对数据库已做的备份或利用镜像设备恢复数据库。
422009-7-28 School Of Information · ChangJun
数据库备份与恢复
2.恢复方法
( 1)利用备份技术由 DBA定期对数据库进行备份,生成数据库瞬时正确状态的副本(备份)。当发生错误时,
利用备份将数据库恢复到备份完成时的数据库状态。
(2)利用事务日志利用事务日志可以恢复非完整事务:从非完整事务当前值按事务日志记录的顺序反做
( Undo),直到事务开始时的数据库值。
432009-7-28 School Of Information · ChangJun
数据库备份与恢复
( 3)利用镜像技术所谓镜像就是在不同的设备上同时存有两份数据库,把其中的一个设备称为主设备,把另一个称为镜像设备。主设备与镜像设备互为镜像关系。每当主数据库更新时,DMBS自动把更新后的数据复制到另一个镜像设备上,保证主设备上的数据库与镜像设备上的数据库一致。
数据库镜像功能可用于有效地恢复磁盘介质的故障。
442009-7-28 School Of Information · ChangJun
小结本章我们介绍了事务,并发控制和数据库的备份和恢复三个概念 。 事务在数据库中是非常主要的,它是保证数据并发性的重要方面 。 并发控制是指当同时有多个事务在执行时,为了保证一个事务的执行不受其他事务的干扰所采取的措施 。
并发控制的主要方法是加锁,根据对数据操作的不同,锁分为共享锁和排他锁两种 。 为了保证并发执行的事务是正确的,一般要求事务遵守两段锁协议 。
数据库的备份和恢复是保证当数据库出现故障时能够将数据库尽可能的恢复到正确状态的技术。
452009-7-28 School Of Information · ChangJun