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