oracle隔离级别的实现,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一致的block。Oracle会把最近的data  block复制到新的buffer中,应用Undo data来重建老版本的数据。这些重建的data block叫做一致性读克隆。

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

47c0bb3ebc34bf7467eb78c16759ad4b.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值