Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4008548
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

分类: Oracle

2006-12-18 18:34:53

数据并发性意味着许多用户可以同时访问数据。
数据一致性意味着每个用户看到的数据具有一致性,包括当前用户事务和其他用户事务对数据的改变。

三种可防止的现象:
脏读(dirty read):事务可以读取其他事务还没有提交的修改;
不可重复读(nonrepeatable read):事务读取先前曾读取过的数据,发现其他的已提交事务修改或删除了要读取的数据;
幻象读(phantom read):事务再次执行一个查询,发现其他已提交事务插入了新的满足当前查询条件的数据。
针对以上三种现象,SQL92标准指定了4种隔离制度,这4种隔离制度一种比一种严格。
Read uncommitted:允许脏读、不可重复读和幻象读;
Read committed:不允许脏读,允许不可重复读和幻象读;
Repeatable read:不允许脏读、不可重复读,允许幻象读;
Serializable:不允许脏读、不可重复读和幻象读。
Oracle提供Read Committed和Serializable隔离等级,还提供了一种额外的只读模式。其中默认采用Read Committed模式。

Oracle提供语句级读一致性和事务级读一致性。当Oracle开始一个查询时,只会读取SCN小于当前查询SCN的记录,如果发现数据文件中记录的SCN比查询的SCN大,则Oracle会从回滚段中找到数据在查询发生之前的镜像。

串行隔离等级的适用环境:
大数据库中执行短的事务,且UPDATE语句只更新少数几条记录;
两个并发事务同时修改同一条记录的可能性很低;
运行时间相对较长的事务以只读事务为主。
使用串行隔离等级时需要对ORA-08177错误进行额外的处理。

Oracle通过锁机制在事务之间提供数据的并发性和一致性。
锁的模式包括两种:
独占锁:锁住相关资源不被其他人共享。
共享锁:根据操作类型允许资源的共享。多个事务可以在同一个资源上设立共享锁。
死锁:两个事务都占用一定的资源,且两个事务都需要等待对方释放资源才能继续执行,这种情况就构成了死锁。Oracle会自动监测死锁的发生。


锁类型包括三种:
DML锁:用于保护数据;
DDL锁:用于保护数据字典;
内部锁和LATCH:用来保护数据库内部结构如数据文件。

DML锁分为行级锁(TX)和表级锁(TM)两种,而表级锁又包含5种类型:
Row Share Table Lock(RS):获取方式SELECT FROM TABLE FOR UPDATE OF和LOCK TABLE IN ROW SHARE MODE。
Row Exclusive Table Lock(RX):获取方式UPDATE/INSERT/DELETE TABLE或LOCK TABLE IN ROW EXCLUSIVE MODE。
Share Table Lock(S):获取方式LOCK TABLE IN SHARE MODE。
Share Row Exclusive Table Lock(SRX):获取方式LOCK TABLE IN SHARE ROW EXCLUSIVE MODE。
Exclusive Table Lock(X):获取方式LOCK TABLE IN EXCLUSIVE MODE。

DDL锁分为独占DDL锁和共享DDL锁两种。

Oracle9i新增功能闪回查询:
闪回查询允许用户查询过去某个时间点或系统SCN号的数据情况。
这里有一个介绍闪回操作的例子:http://blog.itpub.net/post/468/15464

from : http://yangtingkun.itpub.net/post/468/30838
阅读(2249) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~