- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
16_事务处理和并发控制
事务处理与并发控制 单世民 概述 并发性是一个非常重要的概念,是用来解决多个用户对同一数据进行操作的问题。特别是对于分布式数据库来说,这个特点更加突出。提高数据库的处理速度,仅依靠提高计算机的物理速度是不够的,还必须充分考虑数据库的并发性问题,提高数据库并发的效率。Oracle Database 10g系统通过使用事务和锁机制,解决了数据库的并发性问题。 事务 事务是数据库区别于文件系统的特性之一。所谓事务,就是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。 事务的特征 原子性(Atomicity) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 数据库中引入数据库的主要目的就是:事务会把数据库从一种一致状态转变为另一种一致状态。 事务控制语句 Oracle中的一个重要概念就是没有“开始事务处理”的语句。用户不能显式地开始一个事务处理。事务处理会隐式地开始与第一条修改数据的语句,或者一些要求事务处理的场合。 如果发出COMMIT或ROLLBACK,就会显式地结束一个事务。 事务控制语句 COMMIT完整形式是COMMIT WORK,二者等价。COMMIT会结束你的事务,并使得已做的所有修改成为永久性的(持久保存)。 ROLLBACK完整形式是ROLLBACK WORK,二者等价。ROLLBACK会结束你的事务,并撤销正在进行的所有未提交的修改,把数据库块恢复到事务开始之前的状态。 事务控制语句 作为开发人员,用户应该使用commit或rollback显式终止用户的事务处理,否则用户正在使用的工具或环境就将为用户选择其中的一种方式。 例如,如果用户没有进行提交或回滚就退出了用户的SQL*Plus会话,那么SQL*Plus就会认为用户希望提交用户工作。无论用户是否想要提交工作,系统都会为用户进行提交。 无论事务处理的规模如何,提交都是非常快速的操作。 事务控制语句 提交时执行的任务 为用户的事务处理声称SCN(system change number,系统改变编号)。这是Oracle的内部时钟,可以称为数据库时间。SCN不是传统意义上的时钟,因为它不是随着时间推移而递进。相反,他是在事务处理提交时递进,由Oracle在内部使用,以对事务处理排序。 将所有剩余的已经缓冲的重做日志表项写入磁盘,并且将SCN记录到在线重做日志文件中。这要由数据库后台进程LGWR执行。这一步实际上就是所谓的“提交”,使事务处理永久地生效。 释放用户会话所占有的所有锁定。 事务控制语句 SAVEPOINTSAVEPOINT允许你在事务中创建一个标记点。一个事务中可以有多个SAVEPOINT。 ROLLBACK TO SAVEPOINT此语句和SAVEPOINT命令配合使用,可以把事务回滚到标记点,而不回滚在此标记点之前的任何工作。 SET TRANSACTION此语句允许你设置不同的事务属性,比如事务的隔离级别以及事务是只读的还是可读写的。 事务的特征-原子性 Oracle中事务的执行存在两种情况: 构成事务的每条语句都会提交 所有语句都回滚 Oracle的这种保护可以延伸到单个的语句,即一个语句要么完全成功,要么这条语句完全回滚。 事务原子性的级别 语句级原子性 过程级原子性 事务级原子性 事务的特征-原子性 语句级原子性语句所导致的任何副作用(例如触发器操作)都会被认为是该语句的一部分。为了得到语句级原子性,Oracle隐式地在每个数据库调用外面包了一个SAVEPOINT。形式化表现如下例: 事务的特征-原子性 过程级原子性Oracle把客户提交的代码块认为是“语句”。特别的,PL/SQL匿名块也会被当作是语句。 事务级原子性 事务的隔离级别 事务的隔离级别(transaction isolation level)一个事务对数据库的修改与并行的另外一个事务的隔离程度。 输出处理可能出现的3种问题: 幻像读取(phantom read) 不可重复读取(nonrepeatable read) 脏读(dirty read) 事务的隔离级别 SQL标准定义的隔离级别 事务的隔离级别 set transaction语句可以用来设置事务处理的各种属性,例如,它的隔离层次,它是只读的还是可以进行读写的;是否需要使用特定的回滚段等。 事务的隔离级别 当使用了该命令之后,无论是否出现改变,数据库都会被冻结,可以完全隔离其他事务处理的影响。 与此命令相似的命令是: 但两个命令存在区别: 第一,read only会确保用户无法执行修改数据的DML操作,例如,insert、update或delete。如果执行了这样的操作,则系统就会发出
文档评论(0)