博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
oracle锁
阅读量:6955 次
发布时间:2019-06-27

本文共 1743 字,大约阅读时间需要 5 分钟。

1.概念

数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。

当数据对象被加上排它锁时,其他的事务不能对它读取和修改;加了共享锁的数据对象可以被其他事务读取,但不能修改。

 

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

1) DML lock(data locks,数据锁):用于保护数据的完整性,主要包括TM锁(表级锁)和TX锁(事务锁或行级锁);

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

3) Internal locks 和latches(内部锁与闩):保护内部数据库结构;

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

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

 

我们只关注数据锁

DML语句修改行时,对该行产生行级锁;
同时,DML语句所在的事务,产生一个事务锁TX;
同时,行级锁会对所在表产生一个TM(Table Manager)表级锁RX(Row exclusive);
 

2. TX锁(事务锁或行级锁)

TX的本义是Transaction(事务),当一个事务第一次执行数据更改(Insert、Update、Delete)或使用SELECT… FOR UPDATE语句进行查询时,它即获得一个TX(事务)锁,直至该事务结束(执行COMMIT或ROLLBACK操作)时,该锁才被释放。所以,一个TX锁,可以对应多个被该事务锁定的数据行。当两个或多个会话在表的同一条记录上执行 DML语句时,第一个会话在该条记录上加锁,其他的会话处于等待状态。当第一个会话提交后,TX锁被释放,其他会话才可以加锁

在Oracle的每行数据上,都有一个标志位来表示该行数据是否被锁定。数据行上的锁标志一旦被置位,就表明该行数据被加X锁,Oracle在数据行上没有S锁

3. TM锁(表级锁)类型共有5种,分别称为共享锁(S锁)、排它锁(X锁)、行级共享锁(RS锁)、行级排它锁(RX锁)、共享行级排它锁(SRX锁)

当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。当TM锁获得后,系统再自动申请TX类型的锁,并将实际锁定的数据行的锁标志位进行置位。这样在事务加锁前检查TX锁相容性时就不用再逐行检查锁标志,而只需检查TM锁模式的相容性即可,大大提高了系统的效率。TM锁包括了SS、SX、S、X等多种模式,在数据库中用0-6来表示。不同的SQL操作产生不同类型的TM锁。如表1所示。

表1 Oracle的TM锁类型

锁模式

锁描述

解释

SQL操作

0

none

 

 

1

NULL

Select

2

SS(Row-S)

行级共享锁,其他对象只能查询这些数据行

Select for update、

Lock table *  in row share mode

3

SX(Row-X)

行级排它锁,在提交前不允许做DML操作

Insert、Update、Delete、

Lock table *  in row exclusive mode

4

S(Share)

共享锁

Create index、

Lock table * in share mode

5

SSX(S/Row-X)

共享行级排它锁

Lock table * in share row exclusive mode

6

X(Exclusive)

排它锁

Alter table、Drop table、Drop index、Truncate table 、

lock table * in exclusive mode

 

锁的兼容性

 

SS/RS和SX/RX才是我们的重点,总结起来就一句话:

如果事务A已经有了RS锁,事务B的DML基本不受影响(除非它们在操作同一记录)

如果事务A已经有了RX锁,事务B的DML基本不受影响(除非它们在操作同一记录)

 

 

参考文章:

1. 

2. 

 

转载于:https://www.cnblogs.com/yhzh/p/5262432.html

你可能感兴趣的文章
JavaScript数组去重总结
查看>>
MVVM_Android-CleanArchitecture
查看>>
iOS开发-协议Protocol&代理delegate
查看>>
【系统架构师修炼之道】(4):绪论——Zachman 框架
查看>>
Foxify v0.10.7 发布,基于 TypeScript 的 Node 框架
查看>>
Python数据结构——双端队列
查看>>
GitHub 项目推荐:用深度学习让你的照片变得美丽 ...
查看>>
另类文件加密 图片当密码给文本加密
查看>>
MySQL数据库如何解决大数据量存储问题
查看>>
CENTOS6.5 yum配置
查看>>
《自顶向下网络设计(第3版)》——1.6 复习题
查看>>
【转】微信小程序给程序员带来的可能是一个赚钱的机遇
查看>>
《Programming Ruby中文版:第2版》终于正式出版了
查看>>
使用Observium来监控你的网络和服务器
查看>>
蚂蚁区块链团队资讯简报20170514
查看>>
线性空间(向量空间)
查看>>
多媒体之录音
查看>>
mysql 分区类型详解
查看>>
ORACLE同义词总结
查看>>
ios字体设置
查看>>