Oracle TM锁和TX锁

本文主要介绍Oracle中的TM锁,了解当我们通过sql语句访问数据库中的同一表对象时,此时如果多个用户对同一表对象进行操作的话,可能会产生数据不一致,关于数据不一致,请参考数据库事务的一致性和原子性浅析,oracle解决事务在多线程情况下的数据不一致问题,主要是通过两种锁,一种是悲观锁,也就是我接下来要说的,另一种是乐观锁,关于这两种锁的介绍同样也请参考数据库事务的一致性和原子性浅析

TM锁和TX锁就是悲观锁的一部分,那么oracle是怎么通过TM锁TX锁来解决多用户访问同一对象,保证数据一致的问题的。

下面通过表格和文字来介绍所有的oracle TM锁


表1 Oracle的TM锁类型


锁模式


锁描述


解释


SQL操作


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 able、Drop index、Truncate table 、Lock exclusive

1、SQL操作为:Select

当多用户进行Select 操作时,oracle不会进行任何加锁的,也就意味这,当有其他的用户在访问或者修改当前Select正在操作的结果集中的一行或多行数据时,是不会有任何影响的,Oracle会返回当前时刻的结果集。所以Select操作,不会进行任何加锁操作。

2、SQL操作为:Select for update

请参考select for update和select for update wait和select for update nowait的区别,使用了select for update会给结果集加上一个行级共享锁,其他的会话只能进行查询操作(上面说了Select操作,不会对数据集进行加锁)。

3、SQL操作为:

时间: 2024-10-26 18:10:39

Oracle TM锁和TX锁的相关文章

ORACLE的TM锁和TX锁

根据保护的数据不同,ORACLE的数据库锁分为以下几大类: 1.DML锁(data locks数据锁),用于保护数据的完整性: 2.DDL锁(dictionary locks字典锁),用于保护数据库对象的结构,例如表.索引的结构定义: 3.内部锁或闩(internal locks or latches),用于保护内部结构 在Oracle数据库中,DML锁主要包括TM锁和TX锁,其中TM锁称为表级锁,TX锁称为事务锁或行级锁. 当Oracle执行DML语句时,系统自动在所要操作的表上申请TM类型的

理解Oracle TM和TX锁

在Oracle中有很多锁,通过v$lock_type视图可以查看Oracle中所有类型的锁,在本篇文章中我们熟悉一下TM和TX锁的类型 SQL> select * from v$lock_type where type in ('TM','TX'); TYPE NAME ID1_TAG ID2_TAG IS_USER DESCRIPTION -------- --------------- ------------------ ------------------- ------- ------

ORACLE【2】:锁机制及解锁

1. 锁的基本知识 根据要保护的对象不同,oracle的数据锁可以分成以下几类:DML锁,(data locks)数据锁,用于保护数据的完整性:DDL锁(dictionary locks),用于保护数据库内部结构,如表,索引等结构定义:内部锁和闩(internal locks and latcheds),保护数据库内部结构. 我们通常遇到的都是DML锁,DML锁在通常状态下都是用于保证并发情况下的数据完整性.在oracle中,主要包含有TM锁和TX锁,其中TM锁称为表级锁,TX锁称行级锁或事物锁

Oracle数据库悲观锁与乐观锁详解

数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁.什么叫悲观锁呢,悲观锁顾名思义,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住.而乐观锁就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误的信息,让用户决定如何去做. 先从悲观锁开始说.在SqlServer等其余很多数据库中,数据的锁定通常采用页级锁的方式,也就是说对一张表内的数据是一种串行化的更新插

Oracle数据库锁管理及锁分析_超越OCP精通Oracle视频课程培训10

Oracle视频教程目标 Oracle视频教程,风哥本套oracle教程培训学习熟悉锁的概念,介绍导致阻塞的原因,数据库死锁的检查方法,死锁模拟与死锁问题处理操作命令 适用人群 IT相关从业人员.Oracle数据库技术人员.想加工资的.想升职的都可以. 视频在线学习地址: http://edu.51cto.com/course/course_id-6545.html Oracle视频教程简介 Oracle视频教程,风哥本套oracle教程培训学习熟悉锁的概念,介绍导致阻塞的原因,数据库死锁的检查

查看oracle是否有表被锁

查看oracle是否有表被锁=================================== select sid,serial#,program,terminal,username,b.object_id,c.object_name  from v$session a, v$locked_object b, dba_objects c where a.sid = b.session_id   and b.object_id = c.object_id;

Oracle锁表 行级锁 表级锁 行级锁

Oracle锁表  行级锁  表级锁 ---- 行被排他锁定 ----在某行的锁被释放之前,其他用户不能修改此行          ----使用 commit 或 rollback 命令释放锁 ----Oracle 通过使用 INSERT.UPDATE 和 SELECT-FOR UPDATE 语句自动获取行级锁 SELECT-FOR UPDATE 子句  ―在表的一行或多行上放置排他锁  ―用于防止其他用户更新该行 ―可以执行除更新之外的其他操作 ―select * from goods whe

oracle的乐观锁和悲观锁

一.问题引出 ① 假设当当网上用户下单买了本书,这时数据库中有条订单号为001的订单,其中有个status字段是'有效',表示该订单是有效的: ② 后台管理人员查询到这条001的订单,并且看到状态是有效的: ③ 用户发现下单的时候下错了,于是撤销订单,假设运行这样一条SQL: update order_table set status = '取消' where order_id = 001: ④ 后台管理人员由于在②这步看到状态有效的,这时,虽然用户在③这步已经撤销了订单,可是管理人员并未刷新界

Oracle的悲观锁和乐观锁

为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突.为了解决这个问题,大多数数据库用的方法就是数据的锁定. 数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁.什么叫悲观锁呢,悲观锁顾名思义,就是对数据的冲突采取一种悲观的态度,也就是说假设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住.而乐观锁就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让用户返回错误的信息,让用户决定如何去做.