下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ORACLE的隔离级别作者: Parrotao隔离级别(isolation level)l 隔离级别定义了事务与事务之间的隔离程度。l 隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。l ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别:l 未提交读(read uncommitted)l 提交读(read committed)l 重复读(repeatable read)l 序列化(serializable)l 通过一些现象,可以反映出隔离级别的效果。这些现象有:l 更新丢失(lost update):当系统允许两个事务同时更新同一
2、数据是,发生更新丢失。l 脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,产生脏读。 l 非重复读(nonrepeatable read):A事务读取某数据,这个数据已经被B事务读取,并做了修改或删除。所以这数据已经不是以前的数据,(A transaction rereads data it has previously read and finds that another committed transaction has modified or deleted the data. )l 幻像(phantom read):A事务重复持行一个查询,由于其他提交事务所做
3、的插入操作,返回不同的结果集,此时发生幻像读。(A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additional rows that satisfy the condition. )(与非重复读的区别是:插入 与 修改或删除)ORACLE的隔离级别l ORACLE提供了SQL92标准中的read committed和serializable,同
4、时提供了非SQL92标准的read-only。l read committed:l 这是ORACLE缺省的事务隔离级别。l 事务中的每一条语句都遵从语句级的读一致性。l 保证不会脏读;但可能出现非重复读和幻像。l serializable:l 简单地说,serializable就是使事务看起来象是一个接着一个地顺序地执行。l 仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改。 l 保证不会出现非重复读和幻像。l Serializable隔离级别提供了read-only事务所提供的读一致性(事务级的读一致性),同时又允许DML操作。l 如果有在serializable事务开始时
5、未提交的事务在serializable事务结束之前修改了serializable事务将要修改的行并进行了提交,则serializable事务不会读到这些变更,因此发生无法序列化访问的错误。(换一种解释方法:只要在serializable事务开始到结束之间有其他事务对serializable事务要修改的东西进行了修改并提交了修改,则发生无法序列化访问的错误。) l If a serializable transaction contains data manipulation language (DML)that attempts to update any resource that may
6、have been updated in a transaction uncommitted at the start of the serializable transaction, (并且修改在后来被提交而没有回滚),then the DML statement fails. 返回的错误是ORA-08177: Cannot serialize access for this transaction。 l ORACLE是确定是否有在本事务开始时未提交的事务修改了本事务将要修改的行。具体见英文:Oracle permits a serializable transaction to modif
7、y a data row only if it can determine that prior changes to the row were made by transactions that had committed when the serializable transaction began. To make this determination efficiently, Oracle uses control information stored in the data block that indicates which rows in the block contain co
8、mmitted and uncommitted changes. In a sense, the block contains a recent history of transactions that affected each row in the block. The amount of history that is retained is controlled by the INITRANS parameter of CREATE TABLE and ALTER TABLE. Under some circumstances, Oracle may have insufficient
9、 history information to determine whether a row has been updated by a too recent transaction. This can occur when many transactions concurrently modify the same data block, or do so in a very short period. You can avoid this situation by setting higher values of INITRANS for tables that will experie
10、nce many transactions updating the same blocks. Doing so will enable Oracle to allocate sufficient storage in each block to record the history of recent transactions that accessed the block.l The INITRANS Parameter:Oracle stores control information in eachdata block to manage access by concurrent tr
11、ansactions. Therefore, if you set the transaction isolation level to serializable, you must use the ALTER TABLE command to set INITRANS to at least 3. This parameter will cause Oracle to allocate sufficient storage in each block to record the history of recent transactions that accessed the block. H
12、igher values should be used for tables that will undergo many transactions updating the same blocks.l read-only:l 遵从事务级的读一致性,仅仅能看见在本事务开始前由其它事务提交的更改。 l 不允许在本事务中进行DML操作。l read only是serializable的子集。它们都避免了非重复读和幻像。区别是在read only中是只读;而在serializable中可以进行DML操作。 l Export with CONSISTENT = Y sets the transacti
13、on to read-only. l read committed和serializable的区别和联系:l 事务1先于事务2开始,并保持未提交状态。事务2想要修改正被事务1修改的行。事务2等待。如果事务1回滚,则事务2(不论是read committed还是serializable方式)进行它想要做的修改。如果事务1提交,则当事务2是readcommitted方式时,进行它想要做的修改;当事务2是serializable方式时,失败并报错“Cannot serialize access”,因为事务2看不见事务1提交的修改,且事务2想在事务1修改的基础上再做修改。具体见英文:Both read
14、 committed and serializable transactions use row-level locking, and both will wait if they try to change a row updated by an uncommitted concurrent transaction. The second transaction that tries to update a given row waits for the other transaction to commit or roll back and release its lock. If tha
15、t other transaction rolls back, the waiting transaction (regardless of its isolation mode) can proceed to change the previously locked row, as if the other transaction had not existed. However, if the other (blocking) transaction commits and releases its locks, a read committed transaction proceeds
16、with its intended update. A serializable transaction, however, fails with the error Cannot serialize access, because the other transaction has committed a change that was made since the serializable transaction began.l read committed和serializable可以在ORACLE并行服务器中使用。 l 关于SET TRANSACTION READ WRITE:read
17、 write和read committed 应该是一样的。在读方面,它们都避免了脏读,但都无法实现重复读。虽然没有文档说明read write在写方面与read committed一致,但显然它在写的时候会加排他锁以避免更新丢失。在加锁的过程中,如果遇到待锁定资源无法锁定,应该是等待而不是放弃。这与read committed一致。l 语句级的读一致性l ORACLE保证语句级的读一致性,即一个语句所处理的数据集是在单一时间点上的数据集,这个时间点是这个语句开始的时间。l 一个语句看不见在它开始执行后提交的修改。l 对于DML语句,它看不见由自己所做的修改,即DML语句看见的是它本身开始执行以前存在的数据。l 事务级的读一致性l 事务级的读一致性保证了可重复
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- FZT 54133-2020无锑涤纶预取向丝(POY)标准深度与行业前瞻研究报告
- 《GBT 14492-2008一次性使用电石包装钢桶》专题研究报告
- 《GB 4706.33-2008家用和类似用途电器的安全 商用电深油炸锅的特殊要求》专题研究报告
- 道路安全教育培训课内容课件
- 道路危险品运输安全培训课件
- 2026年鲁教版八年级数学上册期末试卷含答案
- 道德的介绍教学课件
- 2026年广东省茂名市高职单招语文试题及答案
- 迪奥dior介绍教学课件
- 新高一化学暑假衔接(人教版):第17讲 元素周期律【教师版】
- 教师三笔字培训课件
- 少年宫乒乓球活动记录文本
- 各品牌挖掘机挖斗连接尺寸数据
- 2021-2022学年云南省曲靖市部编版六年级上册期末考试语文试卷(原卷版)
- 参会人员名单(模板)
- 飞机大战游戏设计与实现
- 数学课如何提高课堂教学容量
- 监理规划毕业设计(论文)
- 京港澳高速公路段改扩建工程施工保通方案(总方案)
- 医用设备EMC培训资料课件
- RoHS培训资料课件
评论
0/150
提交评论