数据并发性意味着许多用户可以同时访问数据。
数据一致性意味着每个用户看到的数据具有一致性,包括当前用户事务和其他用户事务对数据的改变。
三种可防止的现象:
脏读(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
阅读(2217) | 评论(0) | 转发(0) |