数据库应用技术教程第六章事务处理与并发.ppt_第1页
数据库应用技术教程第六章事务处理与并发.ppt_第2页
数据库应用技术教程第六章事务处理与并发.ppt_第3页
数据库应用技术教程第六章事务处理与并发.ppt_第4页
数据库应用技术教程第六章事务处理与并发.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论