java committed_java – Oracle数据库中的READ_COMMITTED和SERIALIZABLE隔离级别有什么区别?...

在阅读了很少有关交易的文件后,我现在完全糊涂了.我先解释一下我的情景.

我有一个批量读取,大约需要3分钟从表中读取数据(SELECT)查询.同时另一个线程尝试执行INSERT / UPDATE / DELETE.它抛出一个错误,说“无法获取事务”(因为我的数据源的默认事务为8(SERIALIZABLE)).

要允许INSERT / UPDATE / DELETE执行,我将事务设置为READ_UNCOMMITTED(根本没有锁定(读/写/范围)).但是,当我执行我的程序时,它抛出一个错误,说唯一支持的事务是READ_COMMITTED和SERIALIZABLE.

当我进一步调查时,我发现Oracle引入了事务隔离类型快照隔离,它通过在事务期间获取数据库的快照来实际消除可重复读取和脏读取,从而提供一致的数据.

从上面的语句我可以使用READ_COMMITTED的事务类型,但是维基百科到目前为止完全混淆了我的理解与下面的陈述:

Snapshot isolation is called “serializable” mode in Oracle[2][3][4]

and PostgreSQL versions prior to 9.1,[5][6][7] which may cause

confusion with the “real serializability” mode. There are arguments

both for and against this decision; what is clear is that users must

be aware of the distinction to avoid possible undesired anomalous

behavior in their database system logic.

所以现在我的问题是:

>从Oracle角度来看,SERIALIZABLE和READ_COMMITTED有什么区别?

>如果采用快照隔离并且两个不同的事务和更新相同的条目引发错误,Oracle是否会抛出错误?

>如果我的理解中有任何突破,请告诉我.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值