`

ORACLE数据库TM(表级)锁小结

 
阅读更多

SQL语句                       表锁模式

select * from A                     无

insert into A                       RX

update A                            RX

delete from A                       RX

select * from A for update          RS

lock table A in row share mode      RS

lock table A in row share exclusive mode RX

lock table A in share mode           S

lock table A in share row exclusive mode SRX

lock table A in exclusive mode        X

从以上可以看到,通常的DML操作(select ..for update,insert,update,delete),表级获得的只是意向锁(RS或RX).其真正封锁粒度还是在行级.另外,oracle数据库中单纯读数据不加锁,通过回滚段来保证用户不读"脏"数据.由于oracle在行级只提供X锁,所以与RS锁(通过select..for update语句获得)对应的行级锁也是X锁.当oracle执行select..for update,insert,update,delete等DML语句时,系统自动在所要操作的表上申请表级RS锁(select..for update)或RX锁(insert,update和delete),当表级锁获得后,系统再自动申请TX锁,并将实际锁定的数据行的锁标志位置位(指向该TX锁,更确切地说是指向该事务在该块中占用的ITL SLOT)

TX锁即事务锁,对应多个该事务锁定的数据行,若事务T对数据D加X锁,则其他任何事务都不能再对D加任何类型的锁,若加S锁,则其他事务只能对D加S锁,不能加X锁.

Oracle锁相关的视图

1)v$lock视图:此视图列出当前系统持有的或正在申请的所有锁的情况,字段说明如下:

sid:会话(session)标识

type:区分该锁保护对象的类型(只关心TX和TM)

id1:锁标识1

id2:锁标识2

lmode:锁模式:0(none),1(null),2(row share),3(row exclusive),4(share),5(share row exclusive)和6(exclusive)

request:申请的锁模式:具体值同上

ctime:已持有或等待锁的时间

block:是否阻塞其他锁申请

2)$locked_object视图:此视图列出当前系统中哪些对象正被锁定,字段说明如下:

xidusn:回滚段号

xidslot:槽号

xidsqn:序列号

object_id:被封锁对象标识

session_Id:持有锁的会话标识

oracle_username:持有该锁的用户的oracle用户名

os_user_name:持有该锁的用户的操作系统用户名

process:操作系统进程号

locked_mode:锁模式

ORACLE锁监控脚本:

1)显示哪些对象被哪些会话锁住

select rpad(oracle_username,10) o_name,session_id sid,decode(locked_mode,0,'None',1,'Null',2,'Rowshare',3,'Row Exclusive',4,'Share',5,'share row exclusive',6,'Exclusive') LOCK_TYPE,object_name,xidusn,xidslot,xidsqn from v$locked_object a,all_objects b where a.object_id=b.object_id;

2)观察获得与申请锁的顺序关系

select type||'_'||id1||'_'||id2 "resource",sid,lmode,request,ctime,block from v$lock where type in('TX','TM') order by "resource",ctime desc;

外键未加索引引发的锁阻塞

部分回滚对锁的影响

  如果一个事务进行部分回滚(rollback to savapoint),由于会撤销部分修改,oracle会根据情况释放或降低某些TM表级锁,而TX锁一般不会释放,而被TX锁阻塞的事务也不会继续执行(即使那些引发阻塞的行的修改已经被回滚) 

锁的排队机制

    一旦某一事务阻塞于某一资源,其后向资源新申请锁的事务都将被阻塞,而不论新申请的封锁类型是否相容于已获得的封锁类型

ITL slot不足引发的锁阻塞:

Bitmap索引引发的锁阻塞

分享到:
评论

相关推荐

    oracle数据库用户频繁被锁原因排查

    oracle数据库用户为何频繁被锁,oracle数据库用户频繁被锁原因排查oracle数据库用户为何频繁被锁

    ORACLE数据库锁表问题浅析.pdf

    ORACLE数据库锁表问题浅析 Oracle数据库锁机制是企业级数据库管理系统中一个非常重要的机制。锁机制的主要目的是为了保证数据的一致性和正确性,在多用户同时访问数据库时,避免数据的不一致和错误。Oracle数据库锁...

    oracle数据库、表空间及数据文件之间的关系

    ### Oracle数据库、表空间及数据文件之间的关系 在Oracle数据库管理系统的架构中,数据库、表空间与数据文件之间存在着紧密的联系。理解这些组件之间的相互作用对于有效地管理和维护Oracle数据库至关重要。 #### ...

    Oracle数据库的锁类型

    DML锁主要关注的是数据级别的锁控,包括TM锁(表级锁)和TX锁(事务锁或行级锁)。这些锁在执行DML(数据操纵语言)操作时自动触发,以确保数据在并发环境下的完整性和一致性。 ##### 1. TM锁:表级锁 TM锁是针对...

    oracle数据库创建表空间和用户

    oracle数据库导入、导出数据、创建表空间、创建用户、用户授权等操作

    oracle数据库_实例_用户_表空间之间的关系

    Oracle 数据库实例用户表空间之间的关系 Oracle 数据库实例用户表空间之间的关系是 Oracle 数据库管理系统的核心概念。了解它们之间的关系对于数据库的设计、管理和优化至关重要。 数据库 Oracle 数据库是一个...

    Oracle的锁表与解锁

    2. **TM锁(表级锁)**:这是一种更高层次的锁,通常用于锁定整个表,防止其他用户或事务访问该表。这种锁可以由DBA手动设置,例如在进行大表的备份或维护操作时,可以使用`ALTER TABLE`命令加上`SHARE`或`EXCLUSIVE...

    表级锁(TM锁) 表级锁(TM锁) 表级锁(TM锁) 表级锁(TM锁)

    表级锁(TM锁)是数据库管理系统中用于控制并发访问的一种锁定机制,它主要用于多用户环境下的数据库系统,以防止不同事务之间的数据冲突。在Oracle数据库中,TM锁是一种在表级别的锁定,它确保在事务处理过程中,...

    Oracle数据库表结构导出工具Excel

    总结来说,"Oracle数据库表结构导出工具Excel"通过DBExport软件实现,能够有效地帮助数据库管理员和开发人员快速获取和分享Oracle数据库的表结构信息。通过阅读DBExport的使用手册,用户可以学会如何利用这个工具...

    《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf

    《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle...

    oracle数据库导出表结构到WORD文档

    在开发、文档编写或分享数据库设计时,有时我们需要将Oracle表结构导出到更便于阅读和分享的格式,比如Microsoft Word文档。这个过程可以帮助团队成员更好地理解数据库结构,也可以作为备份或审计的参考。 "oracle...

    oracle导出数据库表结构到word文档中

    Oracle数据库表结构导出器是一套用来完成将Oracle数据库中的表结构导出成Word文档,并输出标准的打印报表格式的软件。亲测oracle绝对好使 ,另附有链接信息,请先看好说明再操作.不会的加我qq87611894

    Oracle数据库表生成C#实体类

    Oracle数据库是世界上最流行的数据库管理系统之一,它被广泛用于企业级数据存储和管理。在开发基于.NET框架的应用程序,特别是使用C#语言时,通常需要将数据库中的表结构映射到C#对象,这些对象被称为实体类。这有助...

    查看登录oracle数据库用户记录.docx

    要查看登录 Oracle 数据库的用户记录,可以创建一个临时日志表,并建立一个数据库表触发器来记录用户的登录行为。 创建临时日志表 首先,需要创建一个临时日志表来存储用户的登录记录。可以使用以下 SQL 语句来...

    Oracle数据库大作业

    【Oracle数据库大作业】是一个关于Oracle数据库在教务管理系统中的应用项目,可能涵盖了数据库设计、实施、优化等多个方面的内容。这个大作业包含了PPT演示文稿、Word文档以及可能的源代码,为学习者提供了全面了解...

    Oracle数据库体系结构( 中文详细版)

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其强大的功能和稳定性使其在企业级应用中占据了重要地位。本文将详细解析Oracle数据库的体系结构,帮助读者深入理解其内部工作原理。 Oracle数据库的...

    Java导出Oracle数据库数据

    Oracle 是一种关系数据库管理系统,广泛应用于企业级应用中。在实际项目中,数据备份和恢复是非常重要的工作。本文将介绍如何使用 Java 语言将 Oracle 数据库数据导出到文件中,并将其导入到 Oracle 数据库中。 从...

    Oracle数据库课程大作业.pdf

    Oracle数据库是一种广泛应用于企业和组织的大型关系型数据库管理系统,它提供了高效的数据存储、管理和查询功能。...通过完成这些大作业,学生可以深入理解Oracle数据库的工作原理及其在企业级应用中的重要性。

Global site tag (gtag.js) - Google Analytics