oracle事务隔离级别

事务的隔离级别:

可能允许或者不允许的三种现象

隔离级别是根据三个现象来定义的:

 Dirtyread:脏读,也就是说,可以读取未提交的数据。

我不知道其他的数据库是否支持,但是我知道oracle肯定是不支持的

Oracle的事务有isolation的特点,只要你没有提交,那么任何人都看不到你对数据的改动



Nonrepeatable read:如果在T1时间读取某一行,在T2时间读取这一行的时候,这一行可能已经被修改了,被删除等等


这是什么意思?

What does that suppose to mean?


当然是这样了丫


幻象读:phantom read

T1执行一个查询,在T2再执行这个查询的时候,此时可能已经向数据库添加了另外的行,这回影响我的查询结果

我不明白,这是什么意思?

这当然会影响我的查询结果了

Of course it will affect my query results

But what I don’t know is that if it’s inone transaction then what?


I was selecting table  A in time 1

Then I select table A in time 2

But table A was changed in time 2

So ,what then?

In my old opinion ,it will be like just thetruth ,you know , in oracle


And 在幻象读中,已经读取的数据不会改变,如果有新增的数据,那么会添加进来



Oracle支持哪些?


我认为oracle一个也不支持丫



这里有一个让我很疑惑的新的名词


Read consistency



So,what exactly is read ,consistency



I see the oracle concepts ,and I see thetransaction-level read ,consistency,and statement-level consistency


And what is it exactly?

I also see that if a transaction is notcommited ,and select the table

Then you got the old data using the undosegment


And I also notice that the oracl e database



So what is read consistency exactly?



经过昨天的学习和我昨天晚上的思考




读一致性:

也就是说:在相同的时间点上,所有的数据库用户查询数据的结果都是一样的

其中有一个很明显的东西

也就是说,我们在查询数据的时候,

When we do the select ,it will be an scn

We will


一个select语句初始化的时候,oracle会给它添加一个实时的SCN号,查询的结果将会是在这个SCN点上的数据


buffer cache中的datablock也有自身的SCN号,,oracle会查看SCN号,然后检查是否符合查询,如果不符合查询的SCN号,就会使用REDO来重建数据



Oracle读一致性:


1:多版本读一致性:

oracle数据库中,多版本控制是同事实现多版本数据的能力。

Oracle数据库支持多版本读一致性:

也就是说数据库的查询具有以下特点:

1:读一致性查询

查询返回的数据是提交过的数据,而且在单一时间点是一致的。

Oracle读不会阻塞写,read进程和write进程不会相互阻塞



2:语句级别的读一致性


Oracle可以实现语句级别的读一致性,保证的而是,在单一时间点上,查询返回的数据是一致的。

一致性的SQL语句对应的时间点取决于事务的隔离级别和查询的属性


如果在read  commited隔离级别:时间点是语句开始的SCN,如果这个语句在SCN100处开始,那么这条语句就和SCN100同步


serializable级别的事务中,时间点取决于事务开始的时间,比如说transaction开始于SCN100,那么这个事务中的所有查询都是在时间点SCN100


Oracle本身支持两种事务隔离级别:readcommited and serialization


3:事务级别的一致性读


Oracle 能够在一个事务中提供给所有查询一致性读

这个意思是:事务中所有的查询都会返回同一个时间点的内容,就是事务开始的时间点。


串行化的事务的查询能够看到事务本身对数据的改变。




4:一致性读和UNDO SEGMENTS


为了管理多版本杜一致性的模型,database必须创建一系列的读一致性的数据,当一张表被同时查询和升级的时候。

Oracle使用undo data来实现这个目标。

当一个用户修改数据的时候,oracle database创建undo  entries,写到undosegments中。

Undo 段中存储了被修改数据的值。因此,相同数据的多个版本,因为时间点的不同,可以存在于数据库中。Oracle可以使用不同时间点的数据的快照来提供一致性读的数据的视图。



Oracle使用查询检索data block的时候,oracle确保每一个block里的数据都代表了当查询开始的数据。Oracle会回滚到需要的时间点的block


Oracle使用了一种叫做SCN的机制来保证transaction的顺序,select语句执行的时候,oracle会决定查询开始执行的SCN号。




Select语句需要和commited一致的blockOracle会把最近的data  block复制到新的buffer中,应用Undo data来重建老版本的数据。这些重建的data block叫做一致性读克隆。


奥,我看明白了,是把最新的数据拿出来,然后使用undo 段来重建




本文出自 “原歌轩” 博客,请务必保留此出处http://yuangeqingtian.blog.51cto.com/6994701/1371458

oracle事务隔离级别,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。