• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Oracle 数据库针对表主键列并发导致行级锁简单演示

    本文内容
    •软件环境
    •简单演示 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>

    因为,两个会话是同一台机器,所以名字一样。

    您可能感兴趣的文章:
    • 解决Android Studio 格式化快捷键和QQ 锁键盘快捷键冲突问题
    • 详解Java中synchronized关键字的死锁和内存占用问题
    • 深入浅出解析mssql在高频,高并发访问时键查找死锁问题
    • Oracle外键不加索引引起死锁示例
    • 使用钩子如何锁定键盘的方法分享
    • Linux中使用VS Code编译调试C++项目详解
    • 实战开发为单片机的按键加一个锁防止多次触发的细节
    上一篇:ORACLE 回收站当前状态查询整理
    下一篇:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 解决办法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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