`
kingsui
  • 浏览: 190132 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle数据库锁的概念

阅读更多

为了确保并发用户在存取同一数据库对象时的正确性(即无丢失修改、可重复读、不读

“脏”数据),数据库中引入了锁机制。基本的锁类型有两种:排它锁(Exclusive locks 记

为X 锁)和共享锁(Share locks记为 S锁)。

排它锁:若事务T对数据D加X锁,则其它任何事务都不能再对D加任何类型的锁,

直至T 释放D 上的X 锁;一般要求在修改数据前要向该数据加排它锁,所以排它锁又称为

写锁。

共享锁:若事务T对数据D加S 锁,则其它事务只能对D加 S锁,而不能加X 锁,直

至 T 释放 D 上的 S 锁;一般要求在读取数据前要向该数据加共享锁,所以共享锁又称为读

锁。

2.Oracle多粒度封锁机制介绍

根据保护对象的不同,Oracle数据库锁可以分为以下几大类:

(1) DML lock(data locks,数据锁):用于保护数据的完整性;

(2) DDL lock(dictionary locks,字典锁):用于保护数据库对象的结构(例如表、视图、索

引的结构定义);

(3) internal locks 和 l a t c h es(内部锁与闩):保护内部数据库结构;

(4) distributed locks(分布式锁):用于OPS(并行服务器)中;

(5) PCM locks(并行高速缓存管理锁):用于OPS(并行服务器)中。

本文主要讨论DML(也可称为data locks,数据锁)锁。从封锁粒度(封锁对象的大小)

的角度看,Oracle DML锁共有两个层次,即行级锁和表级锁。

2.1 Oracle 的 TX 锁(行级锁、事务锁)

许多对Oracle不太了解的技术人员可能会以为每一个 TX锁代表一条被封锁的数据行,

其实不然。 TX的本义是Transaction (事务),当一个事务第一次执行数据更改(Insert、 Update、

Delete)或使用SELECT… FOR UPDATE 语句进行查询时,它即获得一个TX(事务)锁,

直至该事务结束(执行COMMIT 或ROLLBACK操作)时,该锁才被释放。所以,一个TX

锁,可以对应多个被该事务锁定的数据行。

在 Oracle 的每行数据上,都有一个标志位来表示该行数据是否被锁定。Oracle 不象其

它一些 DBMS(数据库管理系统)那样,建立一个链表来维护每一行被加锁的数据,这样

就大大减小了行级锁的维护开销,也在很大程度上避免了其它数据库系统使用行级封锁时经

常发生的锁数量不够的情况。数据行上的锁标志一旦被置位,就表明该行数据被加 X 锁,

Oracle在数据行上没有 S锁。 2.2 TM锁(表级锁)

2.2.1 意向锁的引出

表是由行组成的,当我们向某个表加锁时,一方面需要检查该锁的申请是否与原有的表

级锁相容;另一方面,还要检查该锁是否与表中的每一行上的锁相容。比如一个事务要在一

个表上加 S 锁,如果表中的一行已被另外的事务加了 X 锁,那么该锁的申请也应被阻塞。

如果表中的数据很多,逐行检查锁标志的开销将很大,系统的性能将会受到影响。为了解决

这个问题,可以在表级引入新的锁类型来表示其所属行的加锁情况,这就引出了“意向锁”

的概念。

意向锁的含义是如果对一个结点加意向锁,则说明该结点的下层结点正在被加锁;对任

一结点加锁时,必须先对它的上层结点加意向锁。如:对表中的任一行加锁时,必须先对它

所在的表加意向锁,然后再对该行加锁。这样一来,事务对表加锁时,就不再需要检查表中

每行记录的锁标志位了,系统效率得以大大提高。

2.2.2 意向锁的类型

由两种基本的锁类型(S锁、X 锁),可以自然地派生出两种意向锁:

意向共享锁(Intent Share Lock,简称 IS 锁):如果要对一个数据库对象加S锁,首先

要对其上级结点加IS 锁,表示它的后裔结点拟(意向)加 S锁;

意向排它锁(Intent Exclusive Lock,简称 IX 锁):如果要对一个数据库对象加X 锁,

首先要对其上级结点加 IX锁,表示它的后裔结点拟(意向)加X 锁。

另外,基本的锁类型(S、X)与意向锁类型(IS、IX)之间还可以组合出新的锁类型,

理论上可以组合出4种,即:S+IS,S+IX,X+IS,X+IX,但稍加分析不难看出,实际上只

有 S+IX 有新的意义,其它三种组合都没有使锁的强度得到提高(即:S+IS=S,X+IS=X,

X+IX=X,这里的“=”指锁的强度相同)。所谓锁的强度是指对其它锁的排斥程度。

 

 

这样我们又可以引入一种新的锁的类型

共享意向排它锁(Shared Intent Exclusive Lock,简称 SIX 锁) :如果对一个数据库对象

加 SIX 锁,表示对它加 S 锁,再加 IX 锁,即 SIX=S+IX。例如:事务对某个表加 SIX 锁,

则表示该事务要读整个表(所以要对该表加S 锁),同时会更新个别行(所以要对该表加 IX

锁)。

这样数据库对象上所加的锁类型就可能有5 种:即S、X、IS、IX、SIX。

具有意向锁的多粒度封锁方法中任意事务 T 要对一个数据库对象加锁,必须先对它的

上层结点加意向锁。申请封锁时应按自上而下的次序进行;释放封锁时则应按自下而上的次

序进行;具有意向锁的多粒度封锁方法提高了系统的并发度,减少了加锁和解锁的开销。

2.2.3 Oracle 的 TM 锁(表级锁)

Oracle的 DML锁(数据锁)正是采用了上面提到的多粒度封锁方法,其行级锁虽然只

有一种(即X锁),但其 TM锁(表级锁)类型共有5种,分别称为共享锁(S锁)、排它锁

(X 锁)、行级共享锁(RS 锁)、行级排它锁(RX 锁)、共享行级排它锁(SRX 锁),与上面提到的S、X、IS、IX、SIX 相对应。需要注意的是,由于Oracle在行级只提供X锁,所

以与RS锁(通过SELECT … FOR UPDATE语句获得)对应的行级锁也是X锁(但是该行

数据实际上还没有被修改),这与理论上的IS 锁是有区别的。

下表为Oracle数据库TM锁的相容矩阵(Y=Yes,表示相容的请求; N=No,表示不相

容的请求;-表示没有加锁请求):

T2

T1

S X RS RX SRX -

S Y N Y N N Y

X N N N N N Y

RS Y N Y Y Y Y

RX N N Y Y N Y

SRX N N Y N N Y

- Y Y Y Y Y Y

表一:Oracle 数据库 TM 锁的相容矩阵

 

一方面,当Oracle 执行SELECT…FOR UPDATE、 INSERT、 UPDATE、 DELETE等 DML

语句时,系统自动在所要操作的表上申请表级RS锁(SELECT…FOR UPDATE)或 RX锁

(INSERT、UPDATE、DELETE),当表级锁获得后,系统再自动申请 TX 锁,并将实际锁

定的数据行的锁标志位置位(指向该TX锁);另一方面,程序或操作人员也可以通过 LOCK

TABLE 语句来指定获得某种类型的TM锁。下表总结了 Oracle中各 SQL语句产生 TM锁的

情况:

SQL语句 表锁模式 允许的锁模式

Select * from table_name…… 无 RS、RX、S、SRX、X

Insert into table_name…… RX RS、RX

Update table_name…… RX RS、RX

Delete from table_name…… RX RS、RX

Select * from table_name for update RS RS、RX、S、SRX

lock table table_name in row share mode RS RS、RX、S、SRX

lock table table_name in row exclusive mode RX RS、RX

lock table table_name in share mode S RS、S

lock table table_name in share row exclusive mode SRX RS

lock table table_name in exclusive mode X 无

表二:Oracle 数据库 TM 锁小结

 

我们可以看到,通常的 DML 操作(SELECT…FOR UPDATE、INSERT、UPDATE、

DELETE),在表级获得的只是意向锁(RS或 RX),其真正的封锁粒度还是在行级;另外,

Oracle数据库的一个显著特点是,在缺省情况下,单纯地读数据(SELECT)并不加锁, Oracle

通过回滚段(Rollback segment)来保证用户不读“脏”数据。这些都极大地提高了系统的

并发程度。

由于意向锁及数据行上锁标志位的引入,极大地减小了 Oracle 维护行级锁的开销,这些技术的应用使Oracle 能够高效地处理高度并发的事务请求。 3 Oracle 多粒度封锁机制的监控。

分享到:
评论

相关推荐

    Oracle数据库学习指南

    Oracle2: 1. 《Oracle8 优化技术》摘录 (第一章 安装) 2. 《Oracle8 优化技术》摘录 (第二章 内存-CPU) 3. 《Oracle8 优化技术》摘录 (第三章 输入-输出) 4. EXP、IMP 命令详解 ...52. 自动备份Oracle数据库

    Oracle数据库管理员技术指南

    1.6.1 利用 Oracle 安装程序创建数据库 1.6.2 使用安装程序创建数据库的注意 事项 1.6.3 怎样建立自己的定制数据库创建 脚本 1.6.4 如何从已有数据库克隆数据库 1.6.5 怎样利用 Database Configuration ...

    Oracle数据库、SQL

    17.7 Oracle的锁机制 36 17.8事务不提交的后果 36 17.9回滚事务rollback 36 17.10保留点savepoint 36 十八、 数据库对象:视图view 37 18.1带子查询的create table 37 18.2带子查询的insert 37 18.3定义缺省值:...

    ORACLE数据库基础知识-华为维护资料

    第1章 ORACLE数据库基础知识 1 1.1 产品概述 1 1.1.1 产品简介 1 1.1.2 基本概念 1 1.2 ORACLE系统结构 2 1.2.1 ORACLE物理结构 2 1.2.2 系统全局区 4 1.2.3 进程 6 1.3 存储管理 7 1.3.1 逻辑结构 8 1.3.2 表...

    oracle 12c 数据库 教程

    (三)使用 DBCA 创建 Oracle 数据库 21 (四)验证 Oracle Database 12cR2 环境 25 (五)使用 oracle-database-server-12cR2-preinstall 包 25 三、管理数据库实例 27 (一)管理工具 27 (二)初始化参数 27 (三...

    Oracle锁表处理,Oracle表解锁

    数据库死锁的概念, 所谓死锁,是指两个会话,每个会话都持有另外一个会话想要的资源,因争夺资源而造成的一种互相等待的现象,此时就会出现死锁,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统...

    《oracle 教程》熟练使用主流数据库orcale

    查询和SQL函数 锁和表分区 数据库对象 Oracle 中的 OOP 概念

    Oracle11g从入门到精通

     Oracle数据库系统是数据库领域最优秀的数据库之一,《Oracle11g从入门到精通》以Oracle最新版本Oracle 11g为蓝本,系统地讲述了Oracle数据库的概念、管理和应用开发等内容。  全书结构合理、内容翔实、示例丰富...

    Oracle11g从入门到精通2

     Oracle数据库系统是数据库领域最优秀的数据库之一,《Oracle11g从入门到精通》以Oracle最新版本Oracle 11g为蓝本,系统地讲述了Oracle数据库的概念、管理和应用开发等内容。  全书结构合理、内容翔实、示例丰富...

    Oracle.11g.从入门到精通 (2/2)

    1.1 Oracle数据库产品结构及组成 1.1.1 企业版 1.1.2 标准版 1.1.3 标准版 1.1.4 个人版 1.2 数据库基本术语 1.2.1 数据库 1.2.2 数据库管理系统 1.2.3 数据库系统 1.2.4 数据库模式 1.2.5 数据模型 1.2.6 数据完整...

    Oracle.11g.从入门到精通 (1/2)

    1.1 Oracle数据库产品结构及组成 1.1.1 企业版 1.1.2 标准版 1.1.3 标准版 1.1.4 个人版 1.2 数据库基本术语 1.2.1 数据库 1.2.2 数据库管理系统 1.2.3 数据库系统 1.2.4 数据库模式 1.2.5 数据模型 1.2.6 数据完整...

    Oracle 从入门到精通视频教程(11G版本)(ppt)

    第1章-Oracle 11g数据库简介 认识Oracle 11g 回忆Oracle的产品版本 学习Oracle 11g的新特性 第2章-Oracle 11g的安装与测试 能够使用Oracle 11g的基本条件 在Windows 2003上安装Oracle 11g 移除Oracle 11g ...

    ORACLE9i_优化设计与系统调整

    §1.1 Oracle数据库结构 23 §1.1.1 Oracle数据字典 23 §1.1.2 表空间与数据文件 24 §1.1.3 Oracle实例(Instance) 24 §1.2 Oracle文件 26 §1.2.1 数据文件 26 §1.2.2 控制文件 26 §1.2.3 重做日志文件 26 §...

    Oracle从基础到熟练(太实用了)

    ③:oracle数据库的组成 三.SQL函数与SQL查询 ①:Oracle语言基础 ②:SQL 操作符和SQL函数 四.数据管理 ①:增/删/改 ②:约束 ③:一些查询 五.锁,表分区 ①:锁的概念 ②:并发问题 ③:锁机制 ④:锁的类型 ②:...

    Oracle PPT

    学习Oracle的入门课件 Oracle 安装与卸载 Oracle 中的 OOP 概念 Oracle 入门 SQL 查询和 SQL 函数 锁和表分区

    OCPOCA认证考试指南全册:Oracle Database 11g(1Z0-051,1Z0-052,1Z0-053)--详细书签版(第2/2部分)

     Bob Bryla是Oracle 9i和10g的认证专家,他在数据库设计、数据库应用程序开发、培训和Oracle数据库管理等方面拥有20多年的工作经验,他也足Dodgeville的Land'End公司的首席Internet数据库设计师和Oracle DBA. ...

Global site tag (gtag.js) - Google Analytics