zoukankan      html  css  js  c++  java
  • oracle的事务隔离级别和读一致性

    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即可解决这种,当然在应用设计上也需要有一些好的想法

  • 相关阅读:
    HDU 5441 离线处理 + 并查集
    [转载]HDU 3478 判断奇环
    POJ 1637 混合图的欧拉回路判定
    [转载] 一些图论、网络流入门题总结、汇总
    UVA 820 --- POJ 1273 最大流
    [转载 ]POJ 1273 最大流模板
    POJ 3041 -- 二分图匹配
    2014西安现场赛F题 UVALA 7040
    UVA 12549
    割点、桥(一点点更新)
  • 原文地址:https://www.cnblogs.com/lzfhope/p/7730394.html
Copyright © 2011-2022 走看看