oracle锁

摘要:
当第一个会话提交后,TX锁被释放,其他会话才可以加锁在Oracle的每行数据上,都有一个标志位来表示该行数据是否被锁定。数据行上的锁标志一旦被置位,就表明该行数据被加X锁,Oracle在数据行上没有S锁3.TM锁(表级锁)类型共有5种,分别称为共享锁(S锁)、排它锁(X锁)、行级共享锁(RS锁)、行级排它锁(RX锁)、共享行级排它锁当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的锁。

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 exclusivemode

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

锁的兼容性

oracle锁第1张

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

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

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

参考文章:

1.数据库锁

2.Oracle数据库锁的种类及研究

免责声明:文章转载自《oracle锁》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C# 互操作性入门系列(四):在C# 中调用COM组件DBCP连接池参数解释下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL Server的链接服务器(MySQL、Oracle、Ms_sql、Access、SYBASE)

一、使用 Microsoft OLE DB Provider For ODBC 链接MySQL安装MySQL的ODBC驱动MyODBC1、为MySQL建立一个ODBC系统数据源,例如:选择数据库为test ,数据源名称为myDSN 2、建立链接数据库EXEC sp_addlinkedserver @server = 'MySQLTest', @srvpro...

数据库6.高级

1.视图:什么是视图:视图是有一张或多张表的查询结果构成的一张虚拟表create view dept_view as select *from dept;为什么使用视图:使用权限控制 只能开放某一列的数据访问 对于目前的查看工资而言是没有意义的我们使用虎能够查看整条语句1.多次使用时,可以简化书写2.隔离数据,可以修改原表中的数据;但是我们一般不会这么做。总...

mdb数据库文件如何导入Microsoft SQL Server 2008中

  1.在‘开始’菜单打开‘Microsoft SQL Server 2005→SQL Server Management Studio’。   2.新建一个数据库(名称自定义),选择新建的数据库点击右键选择‘任务→导入数据’。   3.在弹出的页面点击下一步,‘数据源’选择‘Microsoft Access’,然后选择Access数据库所在的路径,如果A...

MongoDB数据创建与使用

MongoDB数据创建与使用 创建数据库代码功能:读取本地文本文件,并保存到数据库中 import pymongo #连接mongo数据库 client = pymongo.MongoClient('localhost',27017) #创建数据库 walden = client['walden'] #创建表 sheet_tab = walden['s...

性能测试指标

1. 测试环境指标折算: 测试环境平均并发数=(最大在线人数*10%)/n n是生产环境和测试环境服务器配置折算比,例如n=公倍数((生产web服务器数/测试web服务器数),(生产app服务器数/测试app服务器数))*(生产服务器内存/测试服务器内存),一般算下来n=4。 2. B/S架构。一般关注的web服务器性能指标 Avg Rps:平均每秒钟的响...

如何搭建本地WordPress

今天就来介绍一下如何在Windows下搭建本地WordPress。 安装前准备 1、正常的电脑 2、PHPNow http://www.phpnow.org 这里面的PHPNow环境包其实包含了常见服务器上的环境:Apache + PHP + MySQL,目前PHPNow所包含的Apache等环境版本过低,想要安装最新版本的同学可以百度一下安装方法。教程不...