加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长百科 > 正文

Oracle SQL – SELECT查询锁定索引并阻止DML会话

发布时间:2021-03-06 08:49:45 所属栏目:站长百科 来源:网络整理
导读:我们在出产中产生了一些很是稀疏的锁定.我们配置了一个PL / SQL剧本,用于查找已锁定高出5秒的工具并向我们发送警报电子邮件. 下面是该剧本的光标: select l.sid,trunc(l.id1 / power(2,16)) rbs,bitand(l.id1,to_number('ffff','xxxx')) + 0 slot,l.id2,l.l

我们在出产中产生了一些很是稀疏的锁定.我们配置了一个PL / SQL剧本,用于查找已锁定高出5秒的工具并向我们发送警报电子邮件.

下面是该剧本的光标:

select l.sid,trunc(l.id1 / power(2,16)) rbs,bitand(l.id1,to_number('ffff','xxxx')) + 0 slot,l.id2,l.lmode,l.request,l.ctime,l.block,substr(v.osuser,1,12) osuser,substr(v.machine,15) machine,substr(v.module,12) module,decode(v.blocking_session_status||l.block,'VALID0',dbms_rowid.rowid_create(1,v.row_wait_obj#,v.row_wait_file#,v.row_wait_block#,v.row_wait_row#),'.') lrow,o.object_name,decode(v.sql_id,null,v.prev_sql_id,v.sql_id) sql_id,o.owner
from v$lock l,v$session v,all_objects o
where l.sid = v.sid
  and v.row_wait_obj# = o.object_id(+)
  and l.ctime > 5 and l.type = 'TX' and (l.request = 6 or l.block = 1)
order by 2,3,4,8 desc,7 desc;

我们本日获得了锁定警报:

SID  TRANS-ID        L-TYPE  CTIME  BLOCK OSUSER     MACHINE         MODULE        SQLID            ROWID            OBJECT
---- --------------- ------- ------ ----- ---------- --------------- ------------ ------------- ------------------ --------------------
669  132,11,40475    6/0     70     1     userpr1     serv1023       userpr1-00002 fbnhs4gd9a7yn .                  IDX_005
1133 132,40475    0/6     62     0     userpr1     serv1023       userpr1-00000 f0gm2rx85qjja AAAgOuAAFAAD04TAAW ITEMST
924  132,40475    0/6     53     0     userpr1     serv1023       userpr1-00002 f0gm2rx85qjja AAAgOuAAFAAD04TAAW ITEMST
927  132,40475    0/6     27     0     userpr1     serv1023       userpr1-00001 f0gm2rx85qjja AAAgOuAAFAAD04TAAW ITEMST

因此,从上面我们可以看到,会话669的sqlid fbnhs4gd9a7yn锁定了索引IDX_005并阻塞了剩余的别的会话.

此刻最稀疏的部门:

> SQLID fbnhs4gd9a7yn只是一个SELECT查询(乃至不是SELECT FOR
UPDATE)
>索引IDX_005与表ITEMST没有毗连,但它会阻止剩余的3个会话,无论怎样更新ITEMST

以是我的题目是:
[1]是怎样产生的,为什么它会阻止对表ITEMST的更新?

这也许是Oracle中的一个错误吗?
我们正在行使Oracle 11.2.0.4企业版,趁便说一句.

办理要领

查询返回的sql_id也许与现实获取锁的查询相干,也也许与之无关.

譬喻,在SID 669中,假如我更新ITEMST然后运行查询但我没有提交更新,您会看到669正在运行SELECT语句而且它保持锁定.这是会话现实上得到锁定的早期UPDATE(或INSERT或其他).只是没有一种简朴的要领可以看到会话已经完成的早期查询得到了其他会话正在守候的锁定.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读