对表update 数据,该表应该获得什么锁?

[复制链接]
查看11 | 回复8 | 2010-10-8 09:31:21 | 显示全部楼层 |阅读模式
AIX5.3
ora10gr2
对一个表进行update操作后,查了下v$lock,lmode为3(rx)和6(X);
书上不是说,对表更新操作会获得“行级独占锁”和“共享锁”吗?
v$locked_object中的locked_mode何以只有3?

概念混淆,请大侠指导下,究竟怎么回事?
谢谢
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
顶下
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
在select * from v$lock;表中就有两个锁了,一个是共享表锁,type=TM,lmode=3的,另一个是行排它锁,type=TX,LMODE=6,而V$locked_Object表中就只有表锁的信息了。
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
原来如此.
但对表更新操作不是获得“行级独占锁”和“共享锁”吗? 怎么lock_mode会是一个3和一个6呢?
谢谢
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
原帖由 fish523 于 2009-4-17 16:38 发表
原来如此.
但对表更新操作不是获得“行级独占锁”和“共享锁”吗? 怎么lock_mode会是一个3和一个6呢?
谢谢



表1 Oracle的TM锁类型

回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
原帖由 fish523 于 2009-4-17 16:38 发表
原来如此.
但对表更新操作不是获得“行级独占锁”和“共享锁”吗? 怎么lock_mode会是一个3和一个6呢?
谢谢

UPDATE时有两个DML锁:TX锁(行级锁或叫事务锁)和TM锁(表级锁)。
其中TX锁的MODE=6(排他),TM锁的mode=3(行排他)。
所以你的查询结果是正确的阿。
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
一个事务可以有多个TM锁,但只有一个TX锁。
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
行上的排他锁,表上的共享锁
回复

使用道具 举报

千问 | 2010-10-8 09:31:21 | 显示全部楼层
谢谢大家热心回复,明白了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行