Oracle中的锁类型主要分以下3种:

DML锁(DML lock):DML 代表数据操纵语言(Data Manipulation Language)。一般来讲,表示select,insert,update,merge和delete语句。DML锁机制允许兵法之行数据修改。例如,DML锁可能是特定数据行上的锁,或者是锁定表中所有行的表级锁。

DDL锁(DDL lock):DDL代表数据定义语言(Data Definition Language),如create和alter语句等。DDL锁可以保护对象结构定义。

内部锁和闩:Oracle使用这些锁来保护其内部数据结构。例如,Oracle解析一个查询并生成优化的查询计划时,它会把库缓存“临时闩”,将计划放在耐,以供其他绘画使用。闩(latch)是Oracle采用的一种轻量级的低级串行化设备,going 能上类似于锁。闩是数据库中导致竞争的一个常见原因。

下面我们主要看看DML锁和DDL锁。

DML锁中主要为TX锁和TM锁。TX锁为事务锁,事务发起第一个修改时会得到TX锁(事务锁),而且会一直持有这个锁,直至事务执行提交(commit)或回滚(rollback)。

TM(DML Enqueue)锁用于确保在修改表的内容时,表的结构不会改变。例如,如果更新了一个表,会得到这个表的一个TM锁。这会防止另一个用户在该表上执行DROP或ALTER命令。如果表上有TM锁,而另一个用户试图在这个表上执行DDL,就会得到一个ORA-00054的错误提示。

查看TM锁,可以直接查看v$locked_object视图,关于v$locked_object视图,Oracle官方文档的解释如下:

This view lists all locks acquired by every transaction on the system. It shows which sessions are holding DML locks (that is, TM-type enqueues) on what objects and in what mode.

TM锁的类型:0   none

1   NULL   Select

2   SS(Row-S) 行级共享锁,其他对象只能查询这些数据行  Select for update、Lock for update、Lock row share

3   SX(Row-X) 行级排它锁,在提交前不允许做DML操作 Insert、Update、Delete、Lock row share

4   S(Share)   共享锁   Create index、Lock share

5   SSX(S/Row-X)   共享行级排它锁   Lock share row exclusive

6   X(Exclusive)   排它锁   Alter table、Drop table、Drop index、Truncate table 、Lock exclusive

对于DDL锁,可以在v$lock视图中明显看到,v$lock.lock_type=DL

0000000090D8F1F8 0000000090D8F250         34 TO      79833          1          3          0       1951          0

0000000090D8F738 0000000090D8F790         35 AE        100          0          4          0       3351          0

000000008F637248 000000008F6372C0         37 TX     458782       1359          6          0          2          0

0000000090D8F118 0000000090D8F170         37 AE        100          0          4          0       3345          0

00007FA09E881C20 00007FA09E881C80         37 TM      88590          0          4          0          2          0

0000000090D8E680 0000000090D8E6D8         37 DL      88590          0          3          0          2          0

0000000090D8E5A0 0000000090D8E5F8         37 DL      88590          0          3          0          2          0

ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK

---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------

00007FA09E881C20 00007FA09E881C80         37 TM         18          0          3          0          2          0

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23850820/viewspace-2122302/,如需转载,请注明出处,否则将追究法律责任。

oracle锁类型tx,Oracle中的锁类型相关推荐

  1. 常见oracle数据类型及其在java中的对应类型

    SQL数据类型 JDBC类型代码 标准的Java类型 Oracle扩展的Java类型 1.0标准的JDBC类型: CHAR java.sql.Types.CHAR java.lang.String o ...

  2. mysql中的锁的指令_mysql中的锁

    MYSQL不同的存储引擎支持不同的锁的机制 MyISAM 支持表锁,InnoDB支持表锁和行锁 表锁,行锁比较 表锁:开销小,加锁快:不会出现死锁:锁定力度大,发生锁冲突概率高,并发度最低 行锁:开销 ...

  3. Redis实现分布式锁全局锁—Redis客户端Redisson中分布式锁RLock实现

    2019独角兽企业重金招聘Python工程师标准>>> 1. 前因 以前实现过一个Redis实现的全局锁, 虽然能用, 但是感觉很不完善, 不可重入, 参数太多等等. 最近看到了一个 ...

  4. 同步锁 php,python线程中同步锁详解

    这篇文章主要为大家详细介绍了python线程中同步锁的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在使用多线程的应用下,如何保证线程安全,以及线程之间的同步,或者访问共享变量等问题是十 ...

  5. 常见的锁策略、synchronized中的锁优化机制

    一.常见的锁策略 锁策略,和普通程序猿基本没啥关系,和 "实现锁" 的人才有关系的 这里所提到的锁策略,和 Java 本身没关系,适用于所有和 "锁" 相关的情 ...

  6. 随机数在java 自旋锁的运用_Java 中自旋锁的实现

    Java中初始是使用mutex互斥锁,因为互斥锁是会线程等待挂起,而对获取锁后的操作时间比较短暂的应用场景来说,这样的锁会让竞争锁的线程不停的park,unpark 的操作,这样的系统的调用性能是非常 ...

  7. 如何将cv::Mat类型转换为imgui中的ImTextureID类型

    背景: 我原来的工程是使用opencv的,所以程序中的图像都是表示为cv::Mat类型,为了能够在imgui窗口中显示我的cv::Mat的图像,我找到了下面这个函数: void ImGui::Imag ...

  8. c语言 地址类型,C语言中的地址类型

    第!!卷!第"期 #$%&!!!'$&" ! ! ! ! ! 平!原!大!学!学!报 ()*+',-)./0'12*,'*'0#3+4052 ! ! ! ! !66 ...

  9. mysql数据库中常用的类型_MySQL数据库中常用字段类型

    MySQL数据库中常用字段类型 整数型:TINYINT,SMALLINT,INT,BIGINT 小数型:FLOAT,DOUBLE,DECIMAL(M,D) 字符型:CHAR,VARCHAR 日期型:D ...

最新文章

  1. mysql 切换数据库方案
  2. 致Oracle DBA 的一封信 (网上流传)
  3. java 如何让HashMap变成线程安全的
  4. 【NLP】 深入浅出解析BERT原理及其表征的内容
  5. Java中字符串和数字间转换
  6. 前端开发 —— BOM
  7. Microsoft Visual Studio Tools for AI
  8. 微课|玩转Python轻松过二级:第1章课后习题解答
  9. C++中继承和派生详解(公有、私有、保护继承的区别)
  10. php中is upload,PHP中,文件上传
  11. oracle安装失败 主机名_PeopleTool 8.58.04 安装
  12. roseha linux,RoseHA 9.0 for Linux快速安装说明_v2.0-2015-04.pdf
  13. 瞅瞅Levels.fyi发布的2020年度程序员收入报告
  14. JS eval json unexpected token :
  15. 各种音视频编解码学习详解之 编解码学习笔记(九):QuickTime系列
  16. 洛谷 P1653 猴子 解题报告
  17. 40个经典的社交心理学现象
  18. 转载 注解@PostConstruct与@PreDestroy讲解及实例 - 云淡风轻、仅此一抹 - 博客频道 - CSDN.NET http://blog.csdn.net/yaerfeng/art
  19. 阿里聚安全 博客 ------安卓动态调试七种武器之长生剑
  20. 80后十大烦恼的特征

热门文章

  1. 对研发团队稳定性的思考
  2. 《智能数据时代:企业大数据战略与实战》一2.3 自我评估、完善度、信息架构...
  3. 数据库表关联关系的基础知识
  4. 在着手开发一款移动应用之前,我们需要考虑哪些因素?
  5. 在XCode工程中创建bundle文件
  6. 揭秘:导致局域网网速变慢的五大真凶
  7. 剑指 Offer II 117. 相似的字符串
  8. 哈工大-基于内核栈切换的进程切换
  9. 《Linux内核分析》(二)——从一个简单Linux内核分析进程切换原理
  10. 20.案例实战:为@Async实现一个自定义线程池