zoukankan      html  css  js  c++  java
  • [每日一题] 11gOCP 1z0-052 :2013-09-25 Lock ――for update.................................C23

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/12021587

    正确答案:ABE

     

    这道题需要我们了解锁的知识点。

    TM锁的模式:

      0-None   --没有锁 select

      1-Null   --空锁

      2-SS(RS) --行级共享锁(Row Shared,简称RS锁)

                     通过lock table t10 in row sharemode;命令添加RS锁

      3-SX(RX) --行级排他锁(Row exclusive)RX锁

    进行DML时,会自动在被更新的表上添加RX锁,可以执行LOCK命令显式的在表上添加RX锁

           允许其他事务通过DML语句修改相同表里的其他数据行

           允许使用lock table t10 in row exclusive mode;命令对表添加RX锁定;

           不允许其他事务对表添加X锁

             通过select … from for update命令添加RX锁

    4-S --共享锁(Share,简称S锁)

             通过lock table t10 in share mode;命令添加该S锁(wait for ITL release)

    5-SSX(SRX) --共享行级排他锁(Share Row Exclusive,简称SRX锁)

           通过lock table t10 in share rowexclusive mode;命令添加SRX锁

    6-X --排他锁(Exclusive,简称X锁)

                    通过lock table t10 in exclusive mode命令添加X锁

    根据题意,我们开起一个会话执行以上的for update的语句会产生一个3号锁(在9i是号锁,10g及以上版本是3号锁)和6号锁。操作如下,观察锁。

    1、在125号会话下,执行select语句

    gyj@OCM> select sid from v$mystat where rownum=1;
    
           SID
    ----------
           125
    
    gyj@OCM> SELECT ename
      2  FROM emp
      3  WHERE job='CLERK'  FOR UPDATE OF empno;
    
    ENAME
    ----------
    SMITH
    ADAMS
    JAMES
    MILLER
    

    2、查125会话的锁信息

    gyj@OCM> select * from v$lock where sid=125;
    
    ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
    ---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
    00000000910D8F58 00000000910D8FB0        125 TO      68064          1          3          0        273          0
    00000000910D91F8 00000000910D9250        125 AE        100          0          4          0        993          0
    00002B18F6AFC2E0 00002B18F6AFC340        125 TM      77522          0          3          0        145          0
    000000008FB4E7E0 000000008FB4E858        125 TX     196640       1474          6          0        105          0
    

     

    发现TM的3号锁,TX的6号锁。

     

    OK,我们对答案一一解析:

    答案A正确,会被阻塞。开另一个会话:22号会话,执行如下:

    gyj@OCM> select sid from v$mystat where rownum=1;
    
           SID
    ----------
            22
    
    gyj@OCM> LOCK TABLE emp IN SHARE MODE;
    

    被阻塞了,LOCK TABLE emp IN SHARE MODE;会产生4号锁

    gyj@OCM> select * from v$lock where sid in(125,22);
    
    ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
    ---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
    00000000910D8F58 00000000910D8FB0        125 TO      68064          1          3          0        557          0
    00000000910D91F8 00000000910D9250        125 AE        100          0          4          0       1277          0
    00000000910DA0F0 00000000910DA148         22 AE        100          0          4          0        304          0
    00002B18F6AFD318 00002B18F6AFD378         22 TM      77522          0          0          4        107          0
    00002B18F6AFD318 00002B18F6AFD378        125 TM      77522          0          3          0        429          1
    000000008FB4E7E0 000000008FB4E858        125 TX     196640       1474          6          0        389          0
    

    答案B正确,会被阻塞。开另一个会话:17号会话,执行如下:

     

    gyj@OCM>  select sid from v$mystat where rownum=1;
    
           SID
    ----------
            17
    
    gyj@OCM> LOCK TABLE emp IN EXCLUSIVE MODE;
    

    被阻塞了,LOCK TABLE emp IN EXCLUSIVE MODE;会产生6号锁

    gyj@OCM> select * from v$lock where sid in(125,17);
    
    ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
    ---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
    00000000910D8F58 00000000910D8FB0        125 TO      68064          1          3          0        726          0
    00000000910D91F8 00000000910D9250        125 AE        100          0          4          0       1446          0
    00000000910D99F0 00000000910D9A48         17 AE        100          0          4          0         91          0
    00002B18F6AFC2E0 00002B18F6AFC340         17 TM      77522          0          0          6         70          0
    00002B18F6AFC2E0 00002B18F6AFC340        125 TM      77522          0          3          0        598          1
    000000008FB4E7E0 000000008FB4E858        125 TX     196640       1474          6          0        558          0
    

    答案C不正确,不会被阻塞。开一另会话148号会话,操作如下:

    gyj@OCM>  select sid from v$mystat where rownum=1;
    
           SID
    ----------
           148
    
    gyj@OCM> UPDATE emp SET sal=sal*1.2 WHERE job='MANAGER';
    
    3 rows updated.
    

    没有被阻塞,可以更新,在同一个表中更新不同的行,锁不会有冲突。

    gyj@OCM> select * from v$lock where sid in(125,148);
    
    ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
    ---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
    00000000910D8F58 00000000910D8FB0        125 TO      68064          1          3          0       1684          0
    00000000910D91F8 00000000910D9250        125 AE        100          0          4          0       2404          0
    00000000910D92D8 00000000910D9330        148 AE        100          0          4          0        265          0
    00002B18F6AFC2E0 00002B18F6AFC340        148 TM      77522          0          3          0        108          0
    00002B18F6AFC2E0 00002B18F6AFC340        125 TM      77522          0          3          0        121          0
    000000008FB01218 000000008FB01290        148 TX     327685       1488          6          0         65          0
    000000008FB4E7E0 000000008FB4E858        125 TX     131082       1475          6          0        121          0
    

    答案D不正确,不会被阻塞。与答案C一样的情况,这里就不再说了。

     

    答案E正确,会被阻塞。开另一会话 143号会话,执行如下

    gyj@OCM>  select sid from v$mystat where rownum=1;
    
           SID
    ----------
           143
    
    gyj@OCM> SELECT ename FROM emp WHERE job='CLERK' FOR UPDATE OF empno;
    

    被阻塞了,更新同一行,会有行锁的冲突。

    gyj@OCM> select * from v$lock where sid in(125,143);
    
    ADDR             KADDR                   SID TY        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
    ---------------- ---------------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
    00000000910D8F58 00000000910D8FB0        125 TO      68064          1          3          0       2019          0
    00000000910D91F8 00000000910D9250        125 AE        100          0          4          0       2739          0
    00000000910D98F8 00000000910D9950        143 TX     131082       1475          0          6         82          0
    00000000910D9D70 00000000910D9DC8        143 AE        100          0          4          0        114          0
    00002B18F6AFD318 00002B18F6AFD378        125 TM      77522          0          3          0        456          0
    00002B18F6AFD318 00002B18F6AFD378        143 TM      77522          0          3          0         82          0
    000000008FB4E7E0 000000008FB4E858        125 TX     131082       1475          6          0        456          1
    

    锁的机制中有一个非常重要的概念:锁的兼容性,看下面这幅图:

    QQ:252803295

    技术交流QQ群:
    DSI&Core Search  Ⅰ 群:127149411(2000人技术群:未满)
    DSI&Core Search  Ⅱ 群:177089463(1000人技术群:未满)
    DSI&Core Search  Ⅲ 群:284596437(500人技术群:未满)
    DSI&Core Search  Ⅳ 群:192136702(500人技术群:未满)
    DSI&Core Search  Ⅴ 群:285030382(500人闲聊群:未满)

    MAIL:dbathink@hotmail.com

    BLOG: http://blog.csdn.net/guoyjoe

    WEIBO:http://weibo.com/guoyJoe0218

    ITPUB: http://www.itpub.net/space-uid-28460966.html

    OCM:   http://education.oracle.com/education/otn/YGuo.HTM 


  • 相关阅读:
    简明Python3教程 12.问题解决
    简明Python3教程 11.数据结构
    【SPOJ 694】Distinct Substrings
    【codeforces Manthan, Codefest 17 C】Helga Hufflepuff's Cup
    【CF Manthan, Codefest 17 B】Marvolo Gaunt's Ring
    【CF Manthan, Codefest 17 A】Tom Riddle's Diary
    【SPOJ 220】 PHRASES
    【POJ 3261】Milk Patterns
    【POJ 3294】Life Forms
    【POJ 1226】Substrings
  • 原文地址:https://www.cnblogs.com/riskyer/p/3339537.html
Copyright © 2011-2022 走看看