• 售前

  • 售后

热门帖子
入门百科

Oracle 数据库针对表主键列并发导致行级锁简单演示

[复制链接]
123457567 显示全部楼层 发表于 2021-10-26 13:20:33 |阅读模式 打印 上一主题 下一主题
本文内容
•软件情况
•简单演示 Oracle 数据库并发导致行级锁
本文简单演示针对表主键并发导致的行级锁。并发是两个以上的用户对同样的数据举行修改(包罗插入、删除和修改)。锁的产生是因为并发。没有并发,就没有锁。并发的产生是因为系统需要,系统需要是因为用户需要。

软件情况
--------------------------------------------------------------------------------
•Windows 2003 Server
•Oracle 11g Release 1 (11.1)
简单演示 Oracle 数据库并发导致行级锁
起首,打开一个会话 session 1,实验如下操作:
复制代码 代码如下:
SQL> select distinct sid from V$mystat;

SID
----------
118
SQL> create table t (x int primary key);
表已创建。
SQL> insert into t values(1);
已创建 1 行。
SQL> update t set x=10 where x=1;
已更新 1 行。
SQL>

先查看本次会话的 SID,然后创建一个表 t,只有一个名为 x 的字段,且该字段为主键,插入一条数据,并更新该数据。

接下来,打开另一个会话 session 2:
复制代码 代码如下:
SQL> select distinct sid from V$mystat;

SID
----------
137
SQL> update t set x=10 where x=1;

此时,该会话被“卡”在这里不动。只是光标不停在闪……因为,session 2 被 session 1 阻塞。
如今,查看锁定视图 V$LOCK。
复制代码 代码如下:
SQL> select sid,type,id1,id2,lmode,request,block
2 from v$lock where sid in (118,137)
3 order by sid;


已选择6行。
SQL>
阐明:“TYPE”列体现锁的范例;“LMODE”列体现锁的模式;“ID1”和“ID2”列是锁的相干信息。“REQUEST”列是正在什么锁。

SID=118 是第一个会话,SID=137 是第二个会话。第三行,第一个会话 BLOCK=1 体现这个会话正在阻塞其他会话,LMODE=6 体现锁的模式,即行级排他锁。第六行,第二个会话 REQUEST=6 体现当前会话正在等待一个 LMODE=6 的锁。注意,第三行和第六行的 ID1 和 ID2 列完全相同。因为它们指向统一资源,只不外一个是资源的拥有者(SID=118),一个是资源的等待者(SID=137)。

通过这个视图,很轻易发现所在——故障定位(trouble shooting)。会话 2 之以是被“卡”住,是因为会话 1 还没提交,而在这张表上,又恰恰有要求列值唯一性束缚。
通过 SID 号,查看视图 V$SESSION 就可以确定用户信息。
复制代码 代码如下:
SQL> select machine from v$session where sid in (118,137);

MACHINE
----------------------------------------------------------------
NUODE\LN
NUODE\LN
SQL>

因为,两个会话是同一台呆板,以是名字一样。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作