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数据库的最大并发数,以及这一参数对系统性能的影响。 ### Oracle最大并发数查询 在企业级应用中,Oracle数据库因其强大的数据处理能力...
Veeam 备份恢复 Oracle 数据库详细配置文档 本文档旨在详细介绍如何使用 Veeam 备份恢复 Oracle 数据库的配置过程。该文档将指导读者从环境准备到推送 Oracle RMAN Plugin,再到创建备份作业和运行备份作业,最后...
【Oracle数据库大作业】是一个关于Oracle数据库在教务管理系统中的应用项目,可能涵盖了数据库设计、实施、优化等多个方面的内容。这个大作业包含了PPT演示文稿、Word文档以及可能的源代码,为学习者提供了全面了解...
1. ORACLE数据库并发访问控制机制 并发控制主要依赖闩锁(latch)和锁定(lock)两种机制来实现。 1.1闩锁(latch)机制 闩锁是一个低级别的、轻量级的锁,获得和释放的速度非常快,主要通过类似信号灯的方式进行...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,适用于处理大量数据和并发事务。 Oracle数据库连接模块的核心在于如何建立和管理与Oracle服务器的通信。在这个模块中,通常会用到Oracle的数据访问接口,如...
Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,尤其在企业级应用中占据主导地位。本指南将针对初学者,详细介绍Oracle数据库的基础知识、安装与配置,以及一些常用的操作和管理技巧。 **1. Oracle...
《Oracle数据库性能优化实践指南》是一本专注于Oracle数据库性能调优的专业书籍,旨在帮助读者深入理解和掌握如何在实际环境中提升Oracle数据库的运行效率。Oracle数据库是全球广泛使用的大型企业级数据库管理系统,...
Oracle数据库是业界广泛使用的大型关系型数据库管理系统,由Oracle公司开发。它支持大容量的数据库,高并发事务处理,提供了强大的数据安全性和完整性控制。Oracle数据库拥有成熟的架构设计,能够在多种操作系统平台...
1. **Oracle数据库体系结构**:Oracle数据库的核心架构包括数据存储、内存结构和进程结构三大部分。数据存储主要通过数据文件、控制文件、重做日志文件和归档日志文件来保存数据;内存结构主要包括系统全局区(SGA)...
45. 在ORACLE7数据库并发控制技术的研究及其应用 46. 在SQLPlus中insert进的都是中文的,为什么一存入服务器后,再select出的就是???了 47. 在客户端处理Oracle的数据行加锁问题 48. 怎样查看init_ora文件 49. ...
Oracle数据库以其稳定性、可扩展性和安全性著称,支持大规模并发事务处理,适合复杂的企业级应用。此外,Oracle还提供了一整套数据库解决方案,包括数据库服务器、开发工具、中间件和云服务。 “Oracle体系结构”是...
创建和配置Oracle数据库是一个复杂而精细的过程,需要DBA具备深厚的理论知识和实践经验。通过精心规划、合理配置参数、选择合适的数据块尺寸和文件布局,可以构建出稳定、高效且易于管理的数据库系统。希望本文能为...
Oracle数据库系统由Oracle公司开发,提供了一整套解决方案,包括数据库服务器、数据存储、备份恢复、安全管理等。其核心功能是存储、管理和检索数据,支持多用户并发访问,并具备高度的可扩展性和可靠性。 二、...
表空间是Oracle数据库中的一种逻辑存储单元,它是数据库中的一个概念性的分组,用于组织和管理物理存储空间。每个表空间由一个或多个数据文件组成。表空间可以进一步细分为多个段(Segment),段又可以细分为多个...
这些参数的合理配置,可以在很大程度上提升Oracle数据库的并发处理能力和资源利用效率,特别是在处理大量并发请求时表现更为显著。 #### 方案二:内存分配优化 在高负载环境下,合理分配和管理内存资源对于Oracle...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,由甲骨文公司开发并维护。它以其强大的功能、高效性能和高度可扩展性而备受青睐,尤其在企业级应用中占据了重要地位。本教程《Oracle数据库基础教程》由...
Oracle数据库系统是全球广泛使用的大型关系型数据库管理系统之一,它为数据存储、管理和处理提供了高效、安全和可扩展的解决方案。对于初学者来说,理解Oracle数据库系统应用与开发的基础至关重要,这将帮助他们掌握...
1. **SQL基础**:Oracle数据库是基于SQL的,因此理解和熟练使用SQL语句是基础,包括SELECT用于查询数据,INSERT用于插入数据,UPDATE用于更新数据,DELETE用于删除数据,以及DDL(Data Definition Language)用于...