Oracle
数据库允许多用户并发访问数据库,那么实现并发访问、控制和数据修改成为了一个重要问题,一方面它通过锁定机制实现数据库的并发控制,另一方面通过多版本模型来进行并发数据访问。
Oracle
的锁机制
锁模式
Oracle
在多用户数据库中使用两种模式的锁:
排他锁
|
阻止相关资源被共享。修改数据自动获得这个锁模式。如果排他锁没有释放,排他锁定一个资源的第一个事务是仅有的一个可以修改该资源的事务。
|
共享锁
|
允许相关资源被共享(和涉及的操作有关)。多个用户读取数据可以共享数据、持有共享锁来阻止并发的写入权限(需要排他锁)。多个事务可以在同一个资源上获得共享锁。
|
锁类型
Oracle
锁通常分为
3
类。
DML
锁(数据锁)
|
DML
锁保护数据。例如,表锁锁定整个表,行锁锁定选择行
|
DDL
锁(字典锁)
|
DDL
锁保护模式对象的结构,例如表和视图的定义
|
内部锁和闩
|
内部锁和闩保护内部数据库结构,比如数据文件。内部锁和闩是完全自动的
|
Oracle
自动使用不同类型的锁来控制数据的并发访问,阻止用户之间的破坏性干扰。
Oracle
自动为事务锁定一个资源,阻止其他需要同一资源的共享锁的事务获得锁。在某些条件下,事务不再需要资源时,
Oracle
自动释放锁。
在这个操作中,
Oracle
自动根据资源锁定情况和执行的操作在不同的限制级别上获得不同类型的锁。
DML
锁
DML
锁(数据锁)的目的是确保多个用户并发访问的数据的完整性。
DML
锁阻止了同时发生的冲突的
DML
或者
DDL
操作造成的破坏性干扰。
DML
语句自动获得行级锁和表级锁。
行锁(
TX
)
行级锁主要用于阻止两个事务同时修改一行。当事务需要修改一行时,需要获得一个行级锁。一个事务通过下列语句修改的每行都会获得一个行级互斥锁:
INSERT
、
UPDATE
、
DELETE
和
SELECT ... FOR UPDATE
。行修改总是排他锁,所以其他的事务无法修改这一行,除非持有锁的事务提交或者回滚了。
如果一个事务在一行上获得一个行锁,事务也在对应表上获得一个表锁。这个表锁阻止了冲突的
DDL
操作,这个
DDL
操作可能覆盖当前事务中的数据修改。
表锁(
TM
)
表级锁主要用于并发控制并发的
DDL
操作,比如阻止在一个
DML
操作过程中删除相关表。当在一个表上执行
DDL
或
DML
语句,就获得一个表锁。一个事务在一个表使用下列
DML
语句:
INSERT
、
UPDATE
、
DELETE
、
SELECT....FOR UPDATE
和
LOCK TABLE
时获得一个表锁。这些
DML
操作获得表锁有两个目的:为事务保留表的
DML
访问权限和阻止和这个事务冲突的
DDL
操作。任何表锁都阻止了同一个表上的排他
DDL
锁的获得,从而阻止了需要这个锁的
DDL
操作。
表锁可以以多种方式持有:行共享(
row share
,
RS
)、行排他(
row exclusive
,
RX
)、共享行排他(
share row exclusive
,
SRX
)、和排他锁(
exclusive
,
X
)。一个表的锁模式的限制确定了同一表上可以获得和持有的其他表锁。
语句获得表锁模式和这表锁允许和禁止的操作
SQL
语句
|
表锁模式
|
是否允许下列锁类型
|
RS
|
RX
|
SRX
|
X
|
SELECT ..... FROM table
|
None
|
Y
|
Y
|
Y
|
Y
|
INSERT INTO table ....
|
RX
|
Y
|
Y
|
N
|
N
|
UPDATE table ....
|
RX
|
Y*
|
Y*
|
N
|
N
|
DELETE FROM table .....
|
RX
|
Y*
|
Y*
|
N
|
N
|
SELECT .... FROM table FOR UPDATE OF
...
|
RS
|
Y*
|
Y*
|
Y*
|
N
|
RS
:行共享锁
RX
:行排他锁
SRX
:共享行排他锁
X
:排他锁
*
:如果没有其他事务持有冲突的行锁就为是,否则发生等待。
DML
语句获得的锁
DML
语句
|
行锁
(TX)
|
表锁
(TM)
|
SELECT ..... FROM table
|
None
|
None
|
INSERT INTO table ....
|
X
|
RX
|
UPDATE table ....
|
X
|
RX
|
DELETE FROM table .....
|
X
|
RX
|
SELECT .... FROM table FOR UPDATE OF
...
|
X
|
RS
|
DDL
锁
正在执行的
DDL
操作引用和操作的模式对象使用数据字典锁(
DDL
)来保护。前面说过,
DDL
语句隐式的提交当前事务。例如,假定用户创建一个过程。对于用户的单语句进程来说,
Oracle
自动对过程定义的所有引用的模式对象获得
DDL
锁。
DDL
锁阻止了过程编译完成之前其中的引用对象被修改结构或者删除的操作。
分享到:
相关推荐
这是国内第一本深度讲解如何架构与设计高并发Oracle数据库系统的著作,也是国内第一本系统讲解内存数据库TimesTen的专著。作者是拥有10余年Oracle从业经验的资深数据库架构师,本书的内容也得到了业界以盖国强为代表...
ORACLE数据库并发访问控制机制及访问冲突的解决方法.pdf
45. 在ORACLE7数据库并发控制技术的研究及其应用 46. 在SQLPlus中insert进的都是中文的,为什么一存入服务器后,再select出的就是???了 47. 在客户端处理Oracle的数据行加锁问题 48. 怎样查看init_ora文件 49. ...
查询ORACLE最大的并发数,在出现性能等问题时可以用到。
oracle数据库的并发控制
查看oracle数据库的连接数以及用户 1、查询oracle的连接数 2、查询oracle的并发连接数 3、查看不同用户的连接数 4、查看所有用户: 5、查看用户或角色系统权限(直接赋值给用户或角色的系统权限): 6、...
并发访问ORACLE数据库的数据死锁分析和解决措施.pdf
起初,Oracle公司开发了一种名为Oracle数据库的关系数据库管理系统,并于1979年推出了第一个商业版本。 随着时间的推移,Oracle数据库不断发展壮大。在1983年,Oracle发布了第二个版本,并加入了事务处理和并发控制...
数据库管理系统(DataBase Managerment System,简称DBMS)是管理数据库的一个软件,它充当所有数据的知识库,并对它的存储、安全、一致性、并发操作、恢复和访问负责。是对数据库的一种完整和统一的管理和控制机制。...
课程想以介绍了Oracle认证体系,详细带领同学们进行Oracle实战环境搭建,Oracle体系结构,Oracle数据库创建于安装,管理ASM实力实战,数据并发与控制,实施oracle数据库的审计,数据库的性能管理,备份恢复与数据库...
民族古籍数字化保护系统中ORACLE数据库的并发控制研究.pdf
高并发Oracle数据库系统的架构与设计主要内容从三个维度展开:首先是内部扩展的维度,深入探讨了高效B树索引、高效表设计、查询优化器等数据库架构设计与优化的核心技术,以及高并发Oracle数据库系统架构与设计的...
oracle数据库闩锁锁定与并发专题
Oracle9i的数据库管理, Oracle9i数据库对象的管理,Oracle9i数据库的安全性,Oracle9i数据库的完整性和并发控制等
数据库设计 高并发 表、索引、分区设计与分析及解决方案 内存数据库timesten
软件环境 ——————————————————————————– •Windows 2003 Server •Oracle 11g Release 1 (11.1) 简单演示 Oracle 数据库并发导致行级锁 首先,打开一个会话 session 1,执行如下操作: ...
第1章 认识Oracle RAC 1.1 RAC产生的背景 1.2 RAC体系结构 1.2.1整体结构 1.2.2物理层次结构 1.2.3逻辑层次结构 1.3 RAC的特点 1.3.1双机并行 1.3.2高可用性 1.3.3易伸缩性 1.3.4低成本 1.3.5高吞吐量 ...
8.1 并发控制概述 8.2 封锁 8.3 封锁协议 8.4 活锁和死锁 8.5 并发调度的可串行性 8.6 两段锁协议 8.7 封锁的粒度 8.8 Oracle的并发控制 8.9 小结