<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-13  評論-28  文章-63  trackbacks-0
    DML會產生行鎖,只有該行的鎖解開后才可繼續對改行進行其他的DML,若新的DML和舊的DML操作的行相同,且舊DML以把行改變,則新DML不起作用

    準備工作:
    SQL>create table lck (a number, b number);
    SQL>insert into lck values (1,1);
    SQL>insert into lck values (2,2);
    SQL>insert into lck values (3,3);
    SQL>insert into lck values (4,4);
    SQL>insert into lck values (5,5);
    SQL>insert into lck values (6,6);
    SQL>insert into lck values (7,7);
    SQL>commit;

    實驗過程:

    步 驟Session 14Session 10說明
    1SQL> select sid from v$session
    where audsid=
    userenv('SESSIONID');

    SID
    ----------
    14
    SQL> select sid from v$session
    where audsid=
    userenv('SESSIONID');

    SID
    ----------
    10
    獲得當前session的SID
    2SQL> insert into lck values (1000,1001);

    1 row created.
     未提交
    3SQL> select sid,type,id1,lmode,request from v$lock
    where sid in (10,14);

    SID TY ID1 LMODE REQUEST
    ---------- -- ---------- ---------- ----------
    14 TX 262153 6 0
    14 TM 4145 3 0
     因為Session14的DML未提交,因此在v$lock里產生2個鎖,一個為:transaction lock(TX),另一個為:DML/table lock(TM).LMODE=3代表:行排它.LMODE=6代表:對象排它
    4SQL> insert into lck values (1001,1000);

    1 row created.
     未提交
    5SQL> select sid,type,id1,lmode,request from v$lock
    where sid in (10,14);

    SID TY ID1 LMODE REQUEST
    ---------- -- ---------- ---------- ----------
    14 TX 262153 6 0
    14 TM 4145 3 0
    SQL> select * from lck;

    A B
    ---------- ----------
    1 2
    2 4
    3 6
    4 8
    5 3
    6 5
    7 7

    7 rows selected.
    v$lock中并不會因為對該表的再一次DML且未提交而新生成鎖
    6 SQL>update lck set a=2000,b=2001
    where a=1;

    1 row updated.
    未提交
    7SQL> select * from lck;

    A B
    ---------- ----------
    1 2
    2 4
    3 6
    4 8
    5 3
    6 5
    7 7
    1000 1001
    1001 1000

    9 rows selected.
    SQL> select sid,type,id1,lmode,request from v$lock
    where sid in (10,14);

    SID TY ID1 LMODE REQUEST
    ---------- -- ---------- ---------- ----------
    10 TX 327698 6 0
    10 TM 4145 3 0
    14 TX 262153 6 0
    14 TM 4145 3 0
    v$lock中對另外session10的DML產生了鎖
    8SQL>update lck set a=4000,b=2001
    where a=1;
     session10發出更新a=1行的SQL后,session14也發出更新a=1行的SQL,則后者的SQL懸在那里,無法結束
    9SQL> select event, seconds_in_wait, sid from v$session_wait where sid in (10,14);

    EVENT SECONDS_IN_WAIT SID
    ---------------------------------------------------------------- --------------- ----------
    enq: TX - row lock contention 1593 14
    SQL*Net message from client 2862 10
    v$session_wait中可以看到哪個session在等待,等待原因和已經等待的時間
    100 rows updated.
     
    SQL>commit;

    Commit complete.
    只有在session10提交該DML后,session14才執行完,但更新為0行
    11SQL> select * from lck;

    A B
    ---------- ----------
    1 2
    2 4
    3 6
    4 8
    5 3
    6 5
    7 7
    1000 1001
    1001 1000

    9 rows selected.
    SQL> select * from lck;

    A B
    ---------- ----------
    1 2
    2 4
    3 6
    4 8
    5 3
    6 5
    7 7
    1000 1001
    1001 1000

    9 rows selected.
     

    筆記來源: http://www.adp-gmbh.ch/ora/concepts/lock.html

    posted on 2006-08-24 13:14 七匹狼 閱讀(1863) 評論(2)  編輯  收藏 所屬分類: oracle

    評論:
    # re: oracle 10g 解鎖的相關操作 2006-08-27 22:31 | 冰川
    支持  回復  更多評論
      
    # re: oracle 10g 解鎖的相關操作 2009-01-19 09:39 | w
    受教咯```  回復  更多評論
      
    主站蜘蛛池模板: 欧美男同gv免费网站观看| AAAAA级少妇高潮大片免费看| 在线观看免费av网站| 久久精品国产亚洲网站| 日韩在线观看免费| 亚洲VA综合VA国产产VA中| 国产99久久亚洲综合精品| 国产伦精品一区二区三区免费迷| 色噜噜噜噜亚洲第一| 日韩免费视频在线观看| 亚洲av无码一区二区三区在线播放| 成年女人色毛片免费看| 亚洲国产欧美国产综合一区| 妞干网免费观看视频| 亚洲6080yy久久无码产自国产| 国产在线观看免费视频播放器| 亚洲AV无码专区在线厂| 亚洲日韩国产一区二区三区| 国产黄色免费观看| 亚洲av无码乱码国产精品| 久久免费福利视频| 亚洲一级毛片免费观看| 永久在线毛片免费观看| 一级成人a做片免费| 久久久影院亚洲精品| 黄页网站在线观看免费高清| 亚洲丰满熟女一区二区哦| 亚洲精品高清在线| 免费人成毛片动漫在线播放| 亚洲国产亚洲片在线观看播放| 国产美女被遭强高潮免费网站| 一级一黄在线观看视频免费| 亚洲精品视频在线| 暖暖免费高清日本中文| 久香草视频在线观看免费| 亚洲免费视频在线观看| 永久久久免费浮力影院 | 亚洲人成77777在线播放网站不卡| 麻豆一区二区免费播放网站 | 成人性生交大片免费看好| 亚洲综合图片小说区热久久|