数据并发性和一致性——数据库概念

这一章描述了数据并发访问和数据的一致性。

数据并发性意味着许多用户可以同时访问数据。

数据一致性意味着每个用户看到的数据具有一致性,包括当前用户事务和其他用户事务对数据的改变。

[@more@]

三种可防止的现象:

脏读(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

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/64429/viewspace-997637/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/64429/viewspace-997637/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值