Oracle中的锁类型

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/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23850820/viewspace-2122302/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值