1 / 131

第 7 章 系统实现技术

第 7 章 系统实现技术. 7.1 事务. 7.2 数据库的并发控制. 7.3 DB 的恢复. 7.4 数据库的安全性. 7.5 数据库的完整性. 7.1.1 事务的基本概念. 定义: 事务是形成一个逻辑工作单位的数据库的操作的汇集。 或: 是由用户定义的一个 DB 的操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。 事务和程序是两个概念,一般的,一个程序可包含多个事务。 程序  事务. 7.1. 事务.

Download Presentation

第 7 章 系统实现技术

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章 系统实现技术 7.1 事务 7.2 数据库的并发控制 7.3 DB的恢复 7.4数据库的安全性 7.5数据库的完整性

  2. 7.1.1 事务的基本概念 定义: 事务是形成一个逻辑工作单位的数据库的操作的汇集。 或: 是由用户定义的一个DB的操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。 事务和程序是两个概念,一般的,一个程序可包含多个事务。 程序  事务 7.1 事务

  3. 事务以begin transaction 开始 显示定义 commit 提交 事务以end Transaction结束 事务的定义 roll back回退 7.1.1 事务的基本概念 默认按缺省自动划分(隐式) 默认(隐式)有:ALTER TABLE 、CREATE 、DELETE、 DROP、 FETCH、 INSERT 、OPEN 、SELECT、 UPDATE等

  4. 例:定义一个未提交的事务。 BEGIN TRANSACTION T1 GO UPDATE S SET SDEPT='计算机‘ WHERE SDEPT='aa' GO BEGIN TRANSACTION T1 GO UPDATE S SET SDEPT='计算机‘ WHERE SDEPT='aa' ROLLBACK TRAN GO 7.1.1 事务的基本概念

  5. 例:定义一个提交的事务。 BEGIN TRANSACTION T1 GO UPDATE S SET SDEPT='计算机'WHERE SDEPT='aa' COMMIT TRAN GO --注意:打开S表看结果 BEGIN TRANSACTION T1 GO UPDATE S SET SDEPT='计算机'WHERE SDEPT='aa' ROLLBACK TRAN GO --注意:同样打开S表看结果 7.1.1 事务的基本概念

  6. 7.1.2 事务的ACID性质 为了保证DB的完整(正确),事务应具有以下四个性质 1. 原子性(atomicity) 一个事务是不分割的操作序列,要么全做,要么全不做. 2. 一致性(consistency) 事务的执行必须从一个使DB一致的状态到另一个是使DB一致的状态。既:DB不会因事务的执行而遭受破坏。 7.1 事务 如:一公司在银行有两个帐号。从A帐号—>B帐号转10000元,既可定义一个事务。 A-10000 B+10000

  7. 3. 隔离性(isolation) 一个事务的执行不能被其他事务打扰,在并发事务操作时,系统应保证与这些事务独执行时结果一样。 4. 持久性(durability) 一个事务一旦完成全部操作后,它对DB的所有更新应永久反映在DB中。即使以后系统发现故障,也应保留这个事务的结果。 7.1.2 事务的ACID性质 上述四个性质分别有DBMS相应的子系统实现。 A: 由 DBMS的事务管理子系统实现。 C: 由DBMS测试完整性约束自动完成。 I: 由DBMS的并发控制子系统实现 D: 由DBMS恢复控制子系统实现。

  8. 对DB的访问是建立在读,写两个操作的基础上的对DB的访问是建立在读,写两个操作的基础上的 . read(x): 把数据X从DB读到内存缓冲区 . write(x): 把数据X从内存缓冲区写回DB (在实际操作时,write(x)未必就写回DB很可能先暂存在系统缓冲区,然后再写回硬盘。先假定write(x)写回磁盘。) 举例说明事务的ACID性质: 7.1.2 例:银行DB有转帐事务T1,从帐号A转50元到帐号B 事务的ACID性质 T1: read(A) A:=A-50 Write(A) Read(B) B:=B+50 Write(B)

  9. (1) 原子性: 由事务的原子性保持事务的一致性,但事务的执行有一定的时间,在某一个时刻会不一致,是正常的 (2) 一致性: A-50,B+50 A+B的和不变 7.1.2 (3) 隔离性: 事务的ACID性质 在A-50后,突然插入一个事务来计算A+B,那肯定会不对,这就要由DBMS的并发控制来控制。 (4) 持久性: 事务正确执行后,仍长期保存,不能丢失

  10. 7.1.3 事务的状态变迁 read/write commit begin end 提 交 活动 局部提交 transaction transaction abort 7.1 失败 异常终止 事务 roll back

  11. read/write commit begin end 提 交 局部提交 活动 transaction transaction abort 失败 异常中止 7.1.3 roll back 事务的状态变迁 1、活动状态: 事务开始执行,即进入“活动”状态,在活动状态执行对DB进行读/写,但“写”并不立即写到硬盘,可暂存在系统缓冲区。

  12. read/write commit begin end 提 交 局部提交 活动 transaction transaction abort 失败 异常中止 7.1.3 roll back 事务的状态变迁 2、局部提交 事务执行完后,进入该状态,但对DB的修改很可能在缓冲区内,所以事务并未真正结束。

  13. read/write commit begin end 提 交 局部提交 活动 transaction transaction abort 失败 异常中止 7.1.3 roll back 事务的状态变迁 3、失败 没有运行到事务的最后一个语句就中止 两种 事务的修改未写到硬盘

  14. read/write commit begin end 提 交 局部提交 活动 transaction transaction abort 失败 异常中止 4、异常中止 roll back 7.1.3 在“失败”状态的事务,很可能对硬盘的数据进行了一部分修改,为了保证事务的原子性,应撤消,执行rollback回退到事务执行前的状态,由恢复子系统完成。 事务的状态变迁 重新启动事务: 由硬件等原因造成 在异常中止时: 取消事务: 由事务内逻辑错误

  15. read/write commit begin end 提 交 局部提交 活动 transaction transaction abort 失败 异常中止 7.1.3 roll back 5、提交 事务的状态变迁 在局部提交后,并发控制系统将检查该事务与并发事务是否发生干扰,通过检查后,系统执行commit。 把对DB的修改的全部写到硬盘,成功结束。 commit 事务结束有两个状态 roll back

  16. 7.1.4事务的并发执行 为了提高事务的执行效率,使多个事务并发执行。 定义: 事务的执行次序称为“调度”。 如果多个事务依次执行,则称为事务的串行调度。 如果利用分时的方法同时处理多个事务,则称为事务的并发调度。 7.1 举例说明事务的并发执行,可能会带来DB的不一致性。 事务

  17. 例7-1: 设事务T1从帐号A转100元到帐号B T2从帐号A转10%的款到帐号B T2: T1: Read(A) Read(A) A:=A-100 Temp:=A*0.1 Write(A) A:=A-temp 7.1.4 Write(A) Read(B) 事务的并发执行 B:=B+100 Read(B) Write(B) B:=B+temp Write(B) 设A.B的初值为2000,1000

  18. 第一种S1:串行:T1、T2 设A.B的初值为2000,1000 7.1.4 事务的并发执行 A=1710 B=1290

  19. 设A.B的初值为2000,1000 7.1.4 事务的并发执行 A=1700B=1300

  20. 第三种S3:并发调度 设A.B的初值为2000,1000 7.1.4 事务的并发执行 A=1710 B=1290

  21. 设A.B的初值为2000,1000 第四种S4:并发调度 7.1.4 事务的并发执行 A=1900 B=1200

  22. 如果有n个事务,串行调度有n!种不同的有效调度(都正确)并行调度有远远>n!种调度,且有的并发调度是正确的(和串行调度之一相等即可)。如果有n个事务,串行调度有n!种不同的有效调度(都正确)并行调度有远远>n!种调度,且有的并发调度是正确的(和串行调度之一相等即可)。 如何产生一个正确的并发调度,由DB的并发控制系统实现。 7.1.4 事务的并发执行

  23. 7.1.5并发事务的可串行化 从上例可以看出,有的并发调度可以保持DB的一致,有的则不行,涉及到一个概念——并发事务的可串行化。 冲突可串行化 两种不同形式的等价调度: 观察可串行化 (了解) 1. 冲突可串行化 7.1 事务 设有两个事务Ti、Tj,其调度为S。 S中有两个相邻语句Ii和Ij(指read,write)分别来自Ti、Tj。

  24. 第一: 如果Ii和Ij是对不同数据的操作,那么交换Ii和Ij次序,不影响调度执行的结果。 第二: 如果Ii和Ij是对同一数据的操作,则 (1) Ii=r(Q) Ij=r(Q) 可忽视Ii、Ij的先后次序 即可互换 7.1.5 并发事务的可串行化 (2) Ii=r(Q) Ij=w(Q) Ii、Ij互换后,Ii读Q可能就 不一样 即:不能互换 (3) Ii=w(Q) Ij=r(Q) 不能互换 (同上) (4) Ii=w(Q) Ij=w(Q) 其次序直接影响DB中 值 即:不能互换

  25. 定义: Ii和Ij是并发事务Ti和Tj中的read、write语句,并在并发调度中相邻。 当Ii和Ij是对同一数据操作时,并且至少有一个write语句,我们称Ii、Ij是一对“冲突”语句,否则,为“非冲突”语句。 7.1.5 在调度S中,有一对相邻的语句是“非冲突”的,那么它次序可互换,且交换后产生的新调度S’和S等价,即产生相同的执行结果。 并发事务的可串行化 上例上的第三种情况S3(简化只留下r、w语句)

  26. S3 S3-1 7.1.5 并发事务的可串行化

  27. S3-2 S3-3 7.1.5 并发事务的可串行化

  28. S3-4 7.1.5 并发事务的可串行化 同第一种,所以第三种S3和第一种S1是等价的。

  29. 定义: 如果调度S’从调度S通过交换一系列的非冲突语句得到,那么称S、S’是一对“冲突等价”的调度。 如果调度S和某个串行调度是“冲突等价”,那么称调度S是“冲突可串行化”的调度。 例7-2:第一种S1和第二种S2是“冲突等价等价”吗? 7.1.5 并发事务的可串行化

  30. 例7-2:第一种S1和第二种S2是“冲突等价等价”吗?例7-2:第一种S1和第二种S2是“冲突等价等价”吗? 7.1.5 并发事务的可串行化 即:T2的r(A)不可能换到T1的w(A)之前 ,所以两种情不一样。

  31. 例7-3:有一并发调度T3、T4是“冲突可串行化”吗?例7-3:有一并发调度T3、T4是“冲突可串行化”吗? T3 T4 7.1.5 两邻语句不能互换即不能变为 并发事务的可串行化 T4 T3 所以不是“冲突可串行化”

  32. 例7-4:有一并发调度 设: A=2000 B=1000 T1: 从帐号A转100到帐号B T5: 从帐号B转10 到帐号A 7.1.5 并发事务的可串行化 A=1910 B=1090 A=1910 B=1090

  33. 这两种“调度”等价,但不是“冲突可串行化”这两种“调度”等价,但不是“冲突可串行化” 可见:“冲突等价”的定义比“调度等价”的定义严格。 即:“冲突等价”一定是“调度等价”。 而“调度等价”不一定是“冲突等价”。 7.1.5 并发事务的可串行化

  34. 2. 观察可串行化 比“冲突等价”的定义放宽一些。 定义: 定义:在同样事务集上的两个调度设S、S’,如果满足下列三个条件,那么称S、S’是“观察等价”的调度。 7.1.5 并发事务的可串行化

  35. 对每个数据项Q,如果事务Ti在调度S中读了Q的初值,那么事务Ti在调度S’也读Q的初值。对每个数据项Q,如果事务Ti在调度S中读了Q的初值,那么事务Ti在调度S’也读Q的初值。 例7-5: S1 7.1.5 并发事务的可串行化

  36. 对每个数据Q,如果在调度S中,事务Tj执行read(Q)操作,读了由事务Ti产生的Q值,那么在调度S’中,事务Tj也必须执行read(Q)操作,读由事务Ti产生的Q值。对每个数据Q,如果在调度S中,事务Tj执行read(Q)操作,读了由事务Ti产生的Q值,那么在调度S’中,事务Tj也必须执行read(Q)操作,读由事务Ti产生的Q值。 S2 7.1.5 并发事务的可串行化

  37. 对每个数据项Q,如果在调度S中, 最后执行 W(Q)的事务是Ti,那么在S’中最后执行W(Q)也是Ti。 S3 7.1.5 并发事务的可串行化

  38. S3 S1 S2 (1)(2)可以保证在调度中每个事务读到同样的数据值,(1)(2)(3)可以导致DB的状态是一样的。 7.1.5 并发事务的可串行化

  39. S3 S1 S2 在S1中:T1读A的初始,S2中T1不读A的初始。 所以S1,S2不是观察等价。 S1和S3比较。 (1) T1读 A的初始值(S1,S3中) B的初始值(S1,S3中) 7.1.5 (2) S1中,T2读由T1产生的A,B值。 并发事务的可串行化 (3) S1中,最后执行W(A)、W(B)是T2。 S3中,最后执行W(A)、W(B)是T2。 所以S1和S3是“观察等价”。

  40. 定义: 如果调度S与某个串引调度是“观察等价”,那么称调度S是“观察可串行化”的调度。 S3为:观察可串行化,也是“冲突可串行化 7.1.5 例7-6: S1 并发事务的可串行化

  41. S1是“观察可串行化” 但S1不是“冲突可串行化”。 7.1.5 并发事务的可串行化 结论: 每个“冲突可串行化”的调度都是“观察可串行化”,但 “观察可串行化”的调度不一都是“冲突可串行化”。

  42. 小 结 1、事务以及性质 2、事务的并发执行 7.1 事务

  43. 作 业: 1. 什么样的 调度是正确的调度? P 306 8 9 本节结束

  44. 7.2 并发操作 7.2.1 DB的并发操作带来的问题 1. 丢失更新的问题。 S1 7.2 数据库的并发控制 事务T1对数据A的更新丢失,被T2覆盖。

  45. 2. 不一致分析的问题(读了过时的数据) S2 7.2.1 DB的并发操作带来的问题 T1要验算,A+B的值是否一致。即:D=C?

  46. 7.2.1 DB的并发操作带来的问题 T2读的是过时的数据。

  47. 3. 依赖于未提交更新的问题。(读“脏”数据) S3 7.2.1 DB的并发操作带来的问题 T2读到了“脏”数据。 这些问题需要用并发控制来完成, 封锁协议技术 时标协议技术 乐观方法

  48. 7.2.2 封锁(locking) 封锁是并发控制的一个非常重要的技术。 基本封锁有两种类型: 排它锁(exclusive locks,简称X锁,又称写锁) 共享锁(share locks,简称S锁,又称读锁)。 X锁: 如果事务T对某个数据(数据项、记录 ……DB)实现X封锁,那么其他事务要等T解除X封锁之后,才能对这个数据进行封锁。 7.2 S锁:如果事务Ti对某数据有一个S封锁,那么其他事物Tj也能对这个数据实现S封锁。但不能对其实现X封锁。 数据库的并发控制

  49. 7.2.3 封锁协议 运用X和S锁,对数据加锁时,还要约定一些规则 (如:何时申请、持续时间、何时释放 ), 这些规则称为封锁协议。 1. 一级封锁协议 事务T在修改数据R之前必须先对其加X锁。直到事务结束才释放。 7.2 数据库的并发控制 或: 任何企图更新记录R的事务必须先执行:“Lock-X(R)”操作可获取对该记录进行寻址的能力,并对它获取X封锁。 如果未获取X封锁,那么这个事务进入等待状态,一直到获取X锁,事务才继续。

  50. 例7-8: 对丢失更新问题的解决 T1: 对A-2 T2: 对 A-1 7.2.3 封锁协议

More Related