当前位置:
文档之家› 数据库第7章数据库系统的恢复和并发控制
数据库第7章数据库系统的恢复和并发控制
返回
11
造成了数据的丢失更新问题,导致数据的不一 致。 仍以上例中的操作为例进行分析。
在表7.1中,数据库中R的初值是1000,事务T1 包含 三 个 操 作 : 读 入 R 初 值 ( FIND R ) ; 计 算 ( R=R100);更新R(UPDATE R)。 事务T2也包含三个操作:FIND R;计算(R=R-200); UPDATE R。 如果事务T1 和T2 顺序执行,则更新后,R的值是700。 但如果T1 和T2 按照表7.1所示的并发执行,R的值是 800,得到错误的结果,原因在于在t7时刻丢失了T1 对数据库的更新操作。 因此,这个并发操作不正确。
可见事务的一致性与原子性是密切相关的。
返回
6
3.隔离性(Isolation) 如果多个事务并发地执行,应像各个事务独立 执行一样,一个事务的执行不能被其他事务干 扰。 即一个事务内部的操作及使用的数据对并发的 其他事务是隔离的。 并发控制就是为了保证事务间的隔离性。 4.持久性(Durability) 指一个事务一旦提交,它对数据库中数据的改 变就应该是持久的,即使数据库因故障而受到 破坏,DBMS也应该能够恢复。
10
结果两个事务共取走存款300元,而数据库中 的存款却只少了200元。 得到这种错误的结果是由甲乙两个事务并发操 作引起的,数据库的并发操作导致的数据库不 一致性主要有以下三种: 1.丢失更新(Lost Update) 当两个事务T1和T2读入同一数据做修改,并发 执行时, T2把T1或T1把T2的修改结果覆盖掉,
返回
21
时间 t0
事务T1 XLOCK R
数据库中R的值 1000
事务T2
t1
t2 t3 t4 t5 t6 t7 T8 t9
FIND R
返回
4
7.2ቤተ መጻሕፍቲ ባይዱ2
事务的特征
事务是由有限的数据库操作序列组成,但并不是任意 的数据库操作序列都能成为事务,为了保护数据的完 整性,一般要求事务具有以下四个特征: 1.原子性(Atomic) 一个事务是一个不可分割的工作单位,事务在执行时, 应该遵守“要么不做,要么全做”(nothing or all) 的原则,即不允许事务部分的完成。 即使因为故障而使事务未能完成,它执行的部分结果 要被取消。
19
1.一级封锁协议
一级封锁协议的内容是:事务T在修改数据对象之前必 须对其加X锁,直到事务结束。 具体地说,就是任何企图更新记录R的事务必须先执行 “XLOCK R”操作,以获得对该记录进行寻址的能力并对 它取得X封锁。 如果未获准“X 封锁”,那么这个事务进入等待状态, 一直到获准“X封锁”,该事务才继续做下去。 该事务规定事务在更新记录R时必须获得排它性封锁, 使得两个同时要求更新R的并行事务之一必须在一个事 务更新操作执行完成之后才能获得X封锁,这样就避免 了两个事务读到同一个R值而先后更新时所发生的丢失 更新问题。 返回
20
利用一级封锁协议可以解决表7.1中的数据丢失 更新问题,如表7.4所示。 事务T1先对R进行X封锁(XLOCK),事务T2执行 “XLOCK R”操作,未获准“X封锁”,则进入 等待状态,直到事务T1更新R值以后,解除X封 锁操作(UNLOCK X)。 此后事务T2再执行“XLOCK R”操作,获准“X 封锁”,并对R值进行更新(此时R已是事务T1 更新过的值,R=900)。 这样就能得出正确的结果。
返回
3
事务是数据库系统中执行的一个工作单位,它是由用 户定义的一组操作序列。 一个事务可以是一组SQL语句、一条SQL语句或整个程 序,一个应用程序可以包括多个事务。 事务的开始与结束可以由用户显式控制。如果用户没 有显式地定义事务,则由DBMS按照缺省规定自动划分 事务。在SQL语言中,定义事务的语句有三条:
2
因此,为了充分利用数据库资源,很多时候数 据库用户都是对数据库系统并行存取数据,这 样就会发生多个用户并发存取同一数据块的情 况,如果对并发操作不加控制可能会产生不正 确的数据,破坏数据的完整性,并发控制就是 解决这类问题,以保持数据库中数据的一致性。
7.2
事务(Transaction)
7.2.1 事务的定义 DBMS的并发控制是以事务为基本单位进行的。 那么到底什么是事务呢?
第7章数据库系统的恢复和并发控制
返回
1
7
7.1
并发控制与封锁
数据库并发性的含义
上一章讨论的完整性是保证各个事务本身能得到正确 的数据,只考虑一个用户使用数据库的情况,但实际 上数据库中有许多用户。 每个用户在存取数据库中的数据时,可能是串行执行, 即每个时刻只有一个用户程序运行,也可能是多个用 户并行地存取数据库。 数据库的最大特点之一就是数据资源是共享的,串行 执行意味着一个用户在运行程序时,其他用户程序必 须等到这个用户程序结束才能对数据库进行存取,这 样如果一个用户程序涉及大量数据的输入/输出交换, 则数据库系统的大部分时间将处于闲置状态。 返回
BEGIN TRANSACTION COMMIT ROLLBACK BEGIN TRANSACTION表示事务的开始; COMMIT表示事务的提交,即将事务中所有对数据库的更新写 回到磁盘上的物理数据库中去,此时事务正常结束; ROLLBACK表示事务的回滚,即在事务运行的过程中发生了某 种故障,事务不能继续执行,系统将事务中对数据库的所有 已完成的更新操作全部撤销,再回滚到事务开始时的状态。
返回
7
事务上述四个性质的英文术语的第一个字母为ACID。 因此,这四个性质以称为事务的ACID准则。 下面是一个事务的例子,从帐号A转移资金额R到帐号B:
BEGIN TRANSACTION READ A A←A-R IF A<0 /* A 款不足*/ THEN BEGIN DISPLAY “A款不足” ROLLBACK END
排它锁又称写锁,简称为X锁,其采用的原理是禁止并 发操作。 当事务T对某个数据对象R实现X封锁后,其他事务要等T 解除X封锁以后,才能对R进行封锁。这就保证了其他事 务在T释放R上的锁之前,不能再对R进行操作。
2.共享锁(Share Lock)
共享锁又称读锁,,简称为S锁,其采用的原理是允许其 他用户对同一数据对象进行查询,但不能对该数据对象 进行修改。 当事务T对某个数据对象R实现S封锁后,其他事务只能 对R加S锁,而不能加X锁,直到T释放R上的S锁。 这就保证了其他事务在T释放R上的S锁之前,只能读取R, 而不能再对R作任何修改。
时间 t0 t1 t2 t3 t4 t5 800 FIND R FIND R R=R-200 UPDATE R 事务T1 数据库中R的值 1000 事务T2
表7.3
不可重读问题 返回
16
产生上述三类数据不一致性的主要原因就是并发操作 破坏了事务的隔离性。 并发控制就是要求DBMS提供并发控制功能以正确的方 式高度并发事务,避免并发事务之间的相互干扰造成 数据的不一致性,保证数据库的完整性。
在COMMIT之前,即在数据库修改过程中,数据可能是 不一致的,事务本身也可能被撤销。 只有在COMMIT之后,事务对数据库所产生的变化才对 其他事务开放,这就可以避免其他事务访问不一致或不 存在的数据。
返回
9
7.3
并发操作与数据的不一致性
当同一数据库系统中有多个事务并发运行时,如果不加 以适当控制,可能产生数据的不一致性。 [例1]并发取款操作。假设存款余额R=1000元,甲事务T1 取走存款100元,乙事务T2取走存款200元,如果正常操 作,即甲事务T1执行完毕再执行乙事务T2,存款余额更 新后应该是700元。但是如果按照如下顺序操作,则会 有不同的结果: 甲事务T1读取存款余额R =1000元; 乙事务T2读取存款余额R =1000元; 甲事务T1 取走存款100元,修改存款余额R =R -100=900, 把R =900写回到数据库; 乙事务T2 取走存款200元,修改存款余额R =R -200=800, 把R =800写回到数据库。 返回
比如,这里事务T2在t2时刻读取的就是“脏数据”。
返回
14
时间 t0 t1 t2 t3 t4 t5
事务T1
数据库中R的值 1000
事务T2
FIND R R=R-100 UPDATE R 900 ROLLBACK FIND R
t6
1000
表7.2
污读问题
返回
15
3.不可重读(Unrepeatable Read) 事务T1 读取了数据R,事务T2 读取并更新了数据R,当 事务T1再读取数据R以进行核对时,得到的两次读取值 不一致,这种情况称为“不可重读”。 在表7.3中,在t0 时刻事务T1 读取R的值为1000,但事 务T2在t4时刻将R的值更新为为800。所以T1所使用的值 已经与开始读取的值不一致。
ELSE /* 拨款 */ BEGIN B←B+R DISPLAY “拨款完成” COMMIT END
返回
8
这是对一个简单事务的完整的描述。 该事务有两个出口:
当A 帐号的款项不足时,事务以ROLLBACK (撤销)命令结束,即撤销该事务的影响; 另一个出口是以COMMIT(提交)命令结束,完 成从帐号A到帐号B的拨款。
返回
18
7.4.2 封锁协议(Lock Protocol)
封锁可以保证合理的进行并发控制,保证数据的一致 性。 在封锁时,要考虑一定的封锁规则,例如,何时开始 封锁、封锁多长时间、何时释放等,这些封锁规则称为 封锁协议。 对封锁方式规定不同的规则,就形成了各种不同的封 锁协议。 封锁协议在不同程序上对正确控制并发操作提供了一 定的保证。 上面讲述过的并发操作所带来的丢失更新、污读和不 可重读等导致数据不一致性问题,可以通过三级封锁 协议在不同程度上给予解决,下面介绍三级封锁协议。 返回