欢迎来到天天文库
浏览记录
ID:45071451
大小:168.50 KB
页数:22页
时间:2019-11-09
《事务管理与并发控制》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、事务处理与并发控制单世民概述事务是数据库系统为保证数据一致性提出的。在具有较为完整功能的数据库系统中,事务管理都是必须支持的特性。同时,为了充分地利用数据库资源,数据库系统需要允许用户同时访问数据库资源,即进行所谓的并发操作。然而,并发操作会带来一定的数据不一致性,为避免数据不一致性对数据库系统的破坏,需要处理好并发性问题。事务事务是数据库区别于文件系统的特性之一。所谓事务,就是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务的特征原子性(Atomicity)一致性(Consistency)隔
2、离性(Isolation)持久性(Durability)数据库中引入数据库的主要目的就是:事务会把数据库从一种一致状态转变为另一种一致状态。事务控制语句COMMIT完整形式是COMMITWORK,二者等价。COMMIT会结束你的事务,并使得已做的所有修改成为永久性的(持久保存)。ROLLBACK完整形式是ROLLBACKWORK,二者等价。ROLLBACK会结束你的事务,并撤销正在进行的所有未提交的修改,把数据库块恢复到事务开始之前的状态。事务控制语句SAVEPOINTSAVEPOINT允许你在事务中创建一个标记点。一个事务中可以有多
3、个SAVEPOINT。ROLLBACKTO此语句和SAVEPOINT命令配合使用,可以把事务回滚到标记点,而不回滚在此标记点之前的任何工作。SETTRANSACTION此语句允许你设置不同的事务属性,比如事务的隔离级别以及事务是只读的还是可读写的。事务控制语句Oracle中的一个重要概念就是没有“开始事务处理”的语句。用户不能显式地开始一个事务处理。事务处理会隐式地开始与第一条修改数据的语句,或者一些要求事务处理的场合。如果发出COMMIT或ROLLBACK,就会显式地结束一个事务。ROLLBACKTOSAVEP
4、OINT命令不会结束事务!事务控制语句作为开发人员,用户应该使用commit或rollback显式终止用户的事务处理,否则用户正在使用的工具或环境就将为用户选择其中的一种方式。例如,如果用户没有进行提交或回滚就退出了用户的SQL*Plus会话,那么SQL*Plus就会认为用户希望提交用户工作。无论用户是否想要提交工作,系统都会为用户进行提交。无论事务处理的规模如何,提交都是非常快速的操作。事务的特征-原子性Oracle中事务的执行存在两种情况:构成事务的每条语句都会提交所有语句都回滚Oracle的这种保护可以延伸到单个的语句,即一个语
5、句要么完全成功,要么这条语句完全回滚。事务原子性的级别语句级原子性过程级原子性事务级原子性事务的特征-原子性语句级原子性语句所导致的任何副作用(例如触发器操作)都会被认为是该语句的一部分。为了得到语句级原子性,Oracle隐式地在每个数据库调用外面包了一个SAVEPOINT。形式化表现如下例:SAVEPOINTstatement1;deletefromcardwherecid=2;Iferrorthenrollbacktostatement1;SAVEPOINTstatement2;deletefromcardwherecid=8;
6、Iferrorthenrollbacktostatement2;事务的特征-原子性过程级原子性Oracle把客户提交的代码块认为是“语句”。特别的,PL/SQL匿名块也会被当作是语句。事务级原子性事务的隔离级别事务的隔离级别(transactionisolationlevel)一个事务对数据库的修改与并行的另外一个事务的隔离程度。输出处理可能出现的3种问题:幻像读取(phantomread)不可重复读取(nonrepeatableread)脏读(dirtyread)事务的隔离级别SQL标准定义的隔离级别隔离级别脏读不可重复读取幻像读
7、取READUNCOMMITTED允许允许允许READCOMMITTED允许允许REPEATABLEREAD允许SERIALIZABLEOracle支持READCOMMITTED和SERIALIZABLE两种事务隔离性级别事务的隔离级别settransaction语句可以用来设置事务处理的各种属性,例如,它的隔离层次,它是只读的还是可以进行读写的;是否需要使用特定的回滚段等。settransactionisolationlevelserializablesettransactionisolationlevelreadcommitted事
8、务的隔离级别当使用了该命令之后,无论是否出现改变,数据库都会被冻结,可以完全隔离其他事务处理的影响。与此命令相似的命令是:但两个命令存在区别:第一,readonly会确保用户无法执行修改数据的DML操作,例如,inser
此文档下载收益归作者所有