欢迎来到天天文库
浏览记录
ID:40443683
大小:298.01 KB
页数:24页
时间:2019-08-02
《事务处理与并发控制》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、事务处理与并发控制单世民概述并发性是一个非常重要的概念,是用来解决多个用户对同一数据进行操作的问题。特别是对于分布式数据库来说,这个特点更加突出。提高数据库的处理速度,仅依靠提高计算机的物理速度是不够的,还必须充分考虑数据库的并发性问题,提高数据库并发的效率。OracleDatabase10g系统通过使用事务和锁机制,解决了数据库的并发性问题。事务事务是数据库区别于文件系统的特性之一。所谓事务,就是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。事务的特征原子性(At
2、omicity)一致性(Consistency)隔离性(Isolation)持久性(Durability)数据库中引入数据库的主要目的就是:事务会把数据库从一种一致状态转变为另一种一致状态。事务控制语句Oracle中的一个重要概念就是没有“开始事务处理”的语句。用户不能显式地开始一个事务处理。事务处理会隐式地开始与第一条修改数据的语句,或者一些要求事务处理的场合。如果发出COMMIT或ROLLBACK,就会显式地结束一个事务。ROLLBACKTOSAVEPOINT命令不会结束事务!事务控制语句COMMIT
3、完整形式是COMMITWORK,二者等价。COMMIT会结束你的事务,并使得已做的所有修改成为永久性的(持久保存)。ROLLBACK完整形式是ROLLBACKWORK,二者等价。ROLLBACK会结束你的事务,并撤销正在进行的所有未提交的修改,把数据库块恢复到事务开始之前的状态。事务控制语句作为开发人员,用户应该使用commit或rollback显式终止用户的事务处理,否则用户正在使用的工具或环境就将为用户选择其中的一种方式。例如,如果用户没有进行提交或回滚就退出了用户的SQL*Plus会话,那么SQL*
4、Plus就会认为用户希望提交用户工作。无论用户是否想要提交工作,系统都会为用户进行提交。无论事务处理的规模如何,提交都是非常快速的操作。事务控制语句提交时执行的任务为用户的事务处理声称SCN(systemchangenumber,系统改变编号)。这是Oracle的内部时钟,可以称为数据库时间。SCN不是传统意义上的时钟,因为它不是随着时间推移而递进。相反,他是在事务处理提交时递进,由Oracle在内部使用,以对事务处理排序。将所有剩余的已经缓冲的重做日志表项写入磁盘,并且将SCN记录到在线重做日志文件中。
5、这要由数据库后台进程LGWR执行。这一步实际上就是所谓的“提交”,使事务处理永久地生效。释放用户会话所占有的所有锁定。事务控制语句SAVEPOINTSAVEPOINT允许你在事务中创建一个标记点。一个事务中可以有多个SAVEPOINT。ROLLBACKTO此语句和SAVEPOINT命令配合使用,可以把事务回滚到标记点,而不回滚在此标记点之前的任何工作。SETTRANSACTION此语句允许你设置不同的事务属性,比如事务的隔离级别以及事务是只读的还是可读写的。事务的特征-原子性Orac
6、le中事务的执行存在两种情况:构成事务的每条语句都会提交所有语句都回滚Oracle的这种保护可以延伸到单个的语句,即一个语句要么完全成功,要么这条语句完全回滚。事务原子性的级别语句级原子性过程级原子性事务级原子性事务的特征-原子性语句级原子性语句所导致的任何副作用(例如触发器操作)都会被认为是该语句的一部分。为了得到语句级原子性,Oracle隐式地在每个数据库调用外面包了一个SAVEPOINT。形式化表现如下例:SAVEPOINTstatement1;deletefromcardwherecid=2;I
7、ferrorthenrollbacktostatement1;SAVEPOINTstatement2;deletefromcardwherecid=8;Iferrorthenrollbacktostatement2;事务的特征-原子性过程级原子性Oracle把客户提交的代码块认为是“语句”。特别的,PL/SQL匿名块也会被当作是语句。事务级原子性事务的隔离级别事务的隔离级别(transactionisolationlevel)一个事务对数据库的修改与并行的另外一个事务的隔离程度。输出处理可能出现的3种问
8、题:幻像读取(phantomread)不可重复读取(nonrepeatableread)脏读(dirtyread)事务的隔离级别SQL标准定义的隔离级别隔离级别脏读不可重复读取幻像读取READUNCOMMITTED允许允许允许READCOMMITTED允许允许REPEATABLEREAD允许SERIALIZABLEOracle支持READCOMMITTED和SERIALIZABLE两种事务隔离性级别事务的隔离级别settran
此文档下载收益归作者所有