oracle设置事务隔离级别为读已提交,oracle的事务隔离级别和读一致性

本文介绍了Oracle数据库的三种事务隔离级别:读提交、串行化和只读,重点讨论了如何在汽车票销售场景中应用这些隔离级别来避免并发问题。对于查询事务,使用读提交级别即可;而对于售票事务,使用串行化级别,通过设置事务状态防止并发冲突。在高并发应用如12306中,除了数据库技术,还需要结合应用设计策略来减轻负载。
摘要由CSDN通过智能技术生成

oracle提供了三个隔离级别:

1.读提交 ,简而言之只能读取语句开始执行前提交的数据

2.串行,这个好理解,就是事务串行运行,避免经典的三个场景-脏读、不可重复读、幻读。

3.只读,oracle已经实现的只读模式。

--

这些都很容易理解,问题的关键是解决一些实际的问题,例如典型的汽车票销售。

1.对于查票事务而言,使用简单的读提交隔离级别即可,读取那些可售票(状态不是已经售出或者正在销售的)

2.对于售票事务而言,只需要简单使用窜行隔离级别即可,在开始购买时候,先设置标记为正在销售,完成之后设置销售完毕,并提交事务。

具体简单的做法就是

set transaction isolation level serializable;

update tickets  a set a.status=‘sailing‘ where a.seat_no=?;

如果其它事务也企图这么做,但当前事务还没有提交,那么就会引发ORA-08177: Cannot serialize access for this transaction

应用遇到这条信息的时候,就知道这个座位已经被临时占用了,可以换一个座位。

如果为了避免可能的高概率异常,选票可以放在一个过程中处理,避免比必要的网络传输。

--

如果在一个高并发的应用中,例如像12306那样的应用,如何避免负载过大? 理论上使用oracle的exdata即可解决这种,当然在应用设计上也需要有一些好的想法

原文:http://www.cnblogs.com/lzfhope/p/7730394.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值