• [oracle]TX行锁发生的常见场景(转贴)


    TX行锁发生的常见场景:

    1、当前会话要更新或删除的记录,已经被其他会话更新或删除。

    2、对于表上有唯一索引的情况,多个会话插入或更新为相同的键值。

    3、对于表上有位图索引的情况,多个会话即使更新不同记录,只要这些记录在位图索引上的键值相同,也会产生行锁。

    1、当前会话要更新或删除的记录,已经被其他会话更新或删除。

    2、对于表上有唯一索引的情况,多个会话插入或更新为相同的键值。

    3、对于表上有位图索引的情况,多个会话即使更新不同记录,只要这些记录在位图索引上的键值相同,也会产生行锁。

    一般我们可能认为在发生行锁的时候,几个SQL的语句是一样的,事实上这种理解是错误的。我举一个简单的例子:

    首先在表上找到job为manager的记录,有三条:

    select empno from emp where job='MANAGER';

    --显示7566/7698/ 7782 三条记录。

    之后在会话1 将部门ID为10的员工的记录删除掉

    sess1:delete from emp where deptno=10;

    -- 7782/7839/ 7934 三条记录被删除,但并未提交。其中7782的记录刚好是job为manager的。

    接下来在session2做一个delete的操作,此时就会被hang住。

    sess2:delete from empwherejob='MANAGER';

    那么hang的情况说明时候会结束呢?

    --if sess 1 rollback, 7566/ 7698/7782将被删除

    --if sess 1 commit, 7566/ 7698将被删除

    也就是说只有资源被释放,系统才会解除TX行锁。

    转贴自:http://www.sohu.com/a/207720182_505827

  • 相关阅读:
    令Django 视图有默认 login_required
    令Django 视图有默认 login_required
    Python 资源
    Python 资源
    小米3 日历 同步google日历
    小米3 日历 同步google日历
    sql语句 case
    DDOSIM安装
    DDos工具tfn2k的编译
    RPM和YUM
  • 原文地址:https://www.cnblogs.com/heyang78/p/11774943.html
Copyright © 2020-2023  润新知