《数据库应用技术教程第六章事务处理与并发.ppt》由会员分享,可在线阅读,更多相关《数据库应用技术教程第六章事务处理与并发.ppt(25页珍藏版)》请在三一办公上搜索。
1、数据库应用技术第六章事务处理与并发,事务处理并发异常与并发控制数据库实现机制简介,内容概要,事务是包括多个数据库操作的逻辑工作单元。事务执行的结果不是全部成功就是全部失败。事务的ACID特性原子性(Atomicity):事务的一组操作是不可分的。要么完全成功,要么完全失败,即使是在发生系统崩溃的情况下。一致性(Consistency):符合程序员所定义的商业规则(Business Rules)。隔离性(Isolation):两个事务并行执行的结果和串行执行的结果是一样的。也称可串行性(Serializability)。持久性(Durability):事务提交后,结果是持久存储的,即使是在系统崩
2、溃时。(内存缓冲区向磁盘的写入,通过日志来实现)。,事务处理的基本概念,提交:通知数据库当前事务完全结束,数据库将事务的影响永久化。并准备开始下一个事务。卷回:通知数据库撤销当前事务,准备开始下一个事务。或撤销一部分操作,仍处于当前事务。事务、用户与会话的关系语句正确执行与事务提交的区别语句级卷回与事务卷回,事务处理的基本概念,事务开始从上一个事务完成(或初次连接数据库)后的第一个DML语句作为开始。在MSS中有BEGIN TRANSACTION语句事务结束以提交或卷回语句作为结束;执行一个DDL语句(提交);用户断开连接(提交);用户进行不正常结束(卷回)。,事务处理的基本概念,COMMIT
3、 WORK;ROLLBACK WORK;SAVEPOINT 保存点;ROLLBACK WORK TO SAVEPOINT 保存点;卷回到一个SAVEPOINT时,使其后的所有SAVEPOINT失效,释放这之后的所有锁(但其他在此期间申请相同资源的事务仍需要等待)。,事务处理语句,要注意程序执行流程与数据库状态的区别。例子:,事务处理语句,事务处理并发异常与并发控制数据库实现机制简介,内容概要,并发控制:多个事务同时进行,可能会导致一些错误的情况。如何保证这些情况不出现,是DBMS的职责之一。在没有确保事务的隔离性和一致性的情况下出现的异常。脏写(Dirty Write)*脏读(Dirty Re
4、ad)不可重复读(Non-repeatable Read)幻影读(Phantom Read),并发异常与并发控制,任务1:读出数据A,将其加上50,写回任务2:读出数据A,将其加上40,写回假设A原值为100,串行执行结果:190并发执行,可能出现各种可能结果,并发异常,并发异常-脏写,串行执行结果:190,并发执行结果:140,并发异常-脏读,串行执行结果:140,并发执行结果:190,并发异常-不可重复读,串行执行结果:190,并发执行结果:140,并发异常-幻影读,串行执行结果:250或240,并发执行结果:200,脏写(Dirty Write)*R1(A,100),R2(A,100),
5、W1(A,140),W2(A,150),C1,C2;脏读(Dirty Read)W1(A,140),R2(A,140),RB1;不可重复读(Non-repeatable Read)R1(A,40),W2(A,80),C2,R1(A,80),C1;R1(A,100),R2(A,100),W1(A,140),C1,W2(A,150),C2;幻影读(Phantom Read)R1(*),I2(B),C2,R1(*)=old value;,并发异常,并发隔离级别,Oracle支持Read committed和Serializable两种级别缺省是Read committed级别,应用系统的并发程度系统
6、规模和用户规模业务并发程度和冲突概率应用系统对并发错误的容忍程度。在通常情况下,程序员无需考虑每个事务内部处理细节来避免并发异常,而是通过控制隔离级别保证不出现相关的异常程序员可以采用一些方法来尽量避免可能的并发错误。使用尽量少的SQL,直接修改数据可以使用手工加锁等方式,预先申请资源。,实施并发控制,事务处理并发异常与并发控制数据库实现机制简介,内容概要,回滚的实现机制:Undo Tablespace持久性:Redo Log File事务特性与数据库缓存备份与恢复,事务处理的实现机制,锁的作用与类型写锁、读锁、谓词锁行锁、页面锁、表锁锁:是防止事务之间对相同资源的存取而发生冲突的机制。锁的生
7、存期:直到事务提交和卷回为止。死锁和检测:ORACLE自动检测死锁,并卷回一个事务中的语句。死锁避免:对一系列资源使用相同的申请次序,或首先申请更高级别(范围)的锁。,事务处理的实现机制,锁的类别独占(exclusive)锁:其他事务不能存取资源。共享(share)锁:其他事务可以读取,但不能修改。行锁(row locks)和表锁(table locks),事务处理的实现机制,应用程序要求事务级的读一致性(可重复读),或者要求对资源的独占存取,不需要等待其他事务。事务级手工加锁SET TRANSACTION ISOLATION LEVELLOCK TABLE SELECT FROM table
8、 FOR UPDATE OF,程序员手工加锁,会话级手工加锁ALTER SESSION LOCK TABLELOCK TABLE IN ROW SHARE|ROW EXCLUSIVE|SHARE|SHART ROW EXCLUSIVE|EXCLUSIVE MODE NOWAIT;不包括FOR UPDATE子句的查询和其他子查询不申请任何锁,不需要等待任何资源,立即返回。,程序员手工加锁,DECLAREs1 NUMBER;s2 NUMBER;BEGINLOCK TABLE detail IN EXCLUSIVE MODE;LOCK TABLE master IN SHARE ROW EXCLUS
9、IVE MODE;SELECT SUM(balance)INTO s1 FROM detail WHERE id=001;SELECT amount INTO s2 FROM master WHERE id=001;IF s1 s2 THEN Raise_Application_Error(-20001,not matched);END IF;END;,程序员手工加锁,BEGINLOCK TABLE detail IN EXCLUSIVE MODE;LOCK TABLE master IN SHARE ROW EXCLUSIVE MODE;INSERT INTO detail(id,balance)VALUES(001,100);UPDATE master SET amount=amount+100 WHERE id=001;END;,程序员手工加锁,