Chinaunix首页 | 论坛 | 博客
  • 博客访问: 422150
  • 博文数量: 119
  • 博客积分: 5221
  • 博客等级: 大校
  • 技术积分: 972
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-04 08:57
文章分类

全部博文(119)

文章存档

2011年(13)

2010年(21)

2009年(19)

2008年(66)

我的朋友

分类: DB2/Informix

2011-08-09 11:53:25

  隔离级是指并发执行相同操作的进程相互隔离的程度。OnLine通过设定进程在读操作时上锁的不同规则而提供了四种隔离级:Dirty Read(脏读)隔离、Committed Read(提交后读)隔离、Cursor Stability(游标固定)隔离和Repeatable Read(可重复读)隔离具体说明如下: 
    1、Dirty Read(脏读)隔离 
    Dirty Read是最简单的隔离级,类同于无隔离级当进程在读数据据时并不对所读的数据上锁,也不管其他进程上没上锁或在做什么。 
    2、Committed Read(提交后读)隔离 
    当进程请求Committed Read隔离级时,OnLine保证进程得到的数据不是数据库未提交的数据即此时没有其他进程在对这些数据做修改。 
    3、Cursor Stability(游标固定)隔离 
    当进程使用Cursor Stability隔离级时,OnLine对进程最后获取的一行数据上锁,对普通的游标上一个共享锁,而对修改游标一个升级锁(更新锁)。 
    4、Repeatable Read(可重复读)隔离 
    Repeatable Read隔离级请求数据库服务器对进程读到的每一行数据都加锁为普通的游标加上共享锁而为修改游标上更新锁这些锁直到游标关闭或事务结束时才释放。Repeatable Read允许用户使用滚动游标对所选择的数据多次读取并保证这些数据没有被修改或被删除。用户设置隔离级的方法是用“Set Isolation To isolationlevel”SQL语句,其中isolationlevel是Dirty Read、Committed Read、Cursor Stability和Repeatable Read之一。在Informix-4gl、ESQL/C、SQL中均可以使用。

<一> dirty read  
可能读到未提交(commited)的记录,可能读到最后被回滚的记录,该记录是一个phantom。 在一些查询中,使用此隔离级别,可提高效率。因为不受其他进程锁表,锁记录的影响。  
<二> committed read 
读到的数据均为提交后的数据。两个进程可同时update 同一条记录。(缺省的隔离级别) 
<三> cursor stability  
当隔离级别设置为cursor stability 时,在某一游标内,当前记录不能被其他 
的进程update,delete ,但游标内其他的记录可被其他进程update ,delete 。 
<四> repeatable read  
当隔离级别设置为repeatable read 时,在某一游标内有两种情况 
1. 该游标的where 子句有索引,则满足条件的所有记录均不能被其他进程  
update ,delete 。(该索引的搜索树的所有节点) 
2. 该游标的where 子句不在索引上,则该表的所有记录均不能被其他进程 update,delete 。 
所以,当使用repeatable read 时,最好有索引,否则相当于锁表,极大损害系统效率。
阅读(3176) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~