Database 版 (精华区)
发信人: mm (绿色的梦), 信区: Database
标 题: 数据库技术讲座(七)-----并发处理(1)
发信站: 紫丁香 (Tue Oct 21 19:58:17 1997)
一 并发处理
数据库的特点就是数据的集中管理和共享。在通常情况下总是有
若干个事务并发地运行,这些并行的事务可能并发地存取相同的数据。
因此,数据库管理系统的一个重要任务就是要有一种机制去保证这种
并发的存取和修改不破坏数据的完整性,确保这些事务能正确地运行
并取得正确的结果。
我们知道,事务并发执行时若不加控制的话将导致不正确的结果
和数据库的不一致状态。为保证数据库数据正确地反映所有事务的更
新以及在一事务修改数据时其它事务不同时修改这个数据,数据库系
统用锁来控制对数据的并发存取。
二 ORACLE的并发处理机制
无需任何说明,ORACLE自动提供行级锁,它允许用户在没有冲突
的情况下更新表中不同的行。行级锁对联机事务处理非常有用。
1 ORACLE锁的类型
在正常情况下,ORACLE会自动锁住需要加锁的资源以保护数据,
这种锁是隐含的,叫隐含锁。然而,在一些条件下,这些自动的锁在
实际应用时并不能满足需要,必须人工加一些锁。这些人工加的锁叫
显示锁。
下面指明了会产生隐含锁的SQL语句:
INSERT;
UPDATE;
DELETE;
DDL/DCL语句。
下面指明了会产生显示锁的SQL语句:
SELECT FOR UPDATE;
LOCK TABLE IN XXX MODE。
解决读的不可重复性可以用下面的方法。在ORACLE中,用SELECT
FOR UPDATE对预期要修改的记录加行排它锁(X),对表加行共享锁
(RS)。它常用于要锁住一行,但不去真的修改这一行。
锁之间是有相互作用的。例如,更新时会对表加RX锁,对行加X锁,
而只有RS锁和RX锁允许再加RX锁。因此,当存在RS和RX锁时,表允许更
新。再比如,当执行DDL和DCL语句时,会对表加排它锁X,而在存在X、
RS、SRX、RX和S锁的前提下,都不能再加X锁。因此,当存在X,RS,SRX,
RS或S锁时,不能对表做DCL和DDL操作。这样,数据库会自动防止一个用
户更新表中的数据,而其他用户在同时修改表的结构。
--
_/ _/ _/ _/
_/_/ _/_/ _/_/ _/_/
_/ _/ _/ _/ _/ _/
_/ _/ _/ _/
_/ _/ _/ _/
※ 来源:.紫丁香 pclinux.hit.edu.cn.[FROM: space.hit.edu.c]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.664毫秒