青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Prayer

在一般中尋求卓越
posts - 1256, comments - 190, trackbacks - 0, articles - 0
  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

Select For Update行級鎖定

Posted on 2010-03-17 23:42 Prayer 閱讀(318) 評論(0)  編輯 收藏 引用 所屬分類: 數(shù)據(jù)庫,SQL
OracleSelect For Update語句可以實現(xiàn)在讀取數(shù)據(jù)后馬上鎖定相關(guān)資源,防止被其他session修改數(shù)據(jù)的目的。也就是我們常常談到的“悲觀鎖定”(現(xiàn)實應(yīng)用開發(fā)中,使用悲觀鎖定的情況少之又少,也許是因為樂觀鎖定的實現(xiàn)更加靈活和便捷的緣故)。
這個小文兒做一個小小的實驗,來看看Select For Update語句實現(xiàn)的行級鎖定

1.創(chuàng)建實驗表table_sfu,并初始化三條數(shù)據(jù)
sec@ora10g> create table table_sfu (a number);

Table created.

sec@ora10g> insert into table_sfu values (1);

1 row created.

sec@ora10g> insert into table_sfu values (2);

1 row created.

sec@ora10g> insert into table_sfu values (3);

1 row created.

sec@ora10g> commit;

Commit complete.

sec@ora10g> select * from table_sfu;

         A
----------
         1
         2
         3

2.使用Select For Update語句得到第一條數(shù)據(jù)
sec@ora10g> select * from table_sfu where a = 1 for update;

         A
----------
         1

3.查看一下現(xiàn)在系統(tǒng)中的鎖定情況,152會話(即上面語句所在的會話)獲得了一個TX鎖和一個TM鎖了,鎖定的表就是TABLE_SFU
sec@ora10g> @lock

lock        lock
holder    holder         lock             lock request       blocked
username  sessid SERIAL# type    id1  id2 mode    mode BLOCK  sessid
-------- ------- ------- ---- ------ ---- ---- ------- ----- -------
SEC          152   14985 TM    15396    0    3       0     0
SEC          152   14985 TX   327722 1790    6       0     0
             164       1 TS        3    1    3       0     0
             165       1 CF        0    0    2       0     0
             165       1 RS       25    1    2       0     0
             165       1 XR        4    0    1       0     0
             166       1 RT        1    0    6       0     0

7 rows selected.

sec@ora10g> col OWNER for a6
sec@ora10g> col OBJECT_NAME for a10
sec@ora10g> select OWNER,OBJECT_NAME,OBJECT_ID,OBJECT_TYPE from dba_objects where object_id = '15396';

OWNER  OBJECT_NAM  OBJECT_ID OBJECT_TYPE
------ ---------- ---------- -------------------
SEC    TABLE_SFU       15396 TABLE

4.另外新打開一個session,執(zhí)行以下修改任務(wù)
sec@ora10g> update table_sfu set a = 100 where a = 1;
OK,效果出現(xiàn)了,這里出現(xiàn)了“鎖等待”現(xiàn)象,原因就是因為在第一個session中使用Select For Update語句鎖定了第一行數(shù)據(jù),不允許其他的session對它修改。

5.這時系統(tǒng)中鎖定情況如下,可以看到第一個session(session id是152)會話鎖定了第二個session(session id是145)會話的事務(wù)
sec@ora10g> @lock

lock        lock
holder    holder         lock             lock request       blocked
username  sessid SERIAL# type    id1  id2 mode    mode BLOCK  sessid
-------- ------- ------- ---- ------ ---- ---- ------- ----- -------
SEC          145   11388 TM    15396    0    3       0     0
SEC          152   14985 TM    15396    0    3       0     0
SEC          152   14985 TX   327722 1790    6       0     1     145
             164       1 TS        3    1    3       0     0
             165       1 CF        0    0    2       0     0
             165       1 RS       25    1    2       0     0
             165       1 XR        4    0    1       0     0
             166       1 RT        1    0    6       0     0

8 rows selected.

6.因為僅僅是鎖定了第一條數(shù)據(jù),所以其他記錄可以順利的進行修改,如下
sec@ora10g> update table_sfu set a = 200 where a = 2;

1 row updated.

sec@ora10g> commit;

Commit complete.

7.解鎖方式:commit或rollback后即完成鎖定的接觸

8.反過來思考一下,如果Select For Update與要鎖定的行已經(jīng)在其他session中完成了修改,再執(zhí)行回出現(xiàn)什么效果呢?這個很顯然,同樣的會出現(xiàn)“鎖等待”的現(xiàn)象,不過我想強調(diào)的是,這里可以使用nowait和wait選項來進行“探測”待鎖定行是否可被鎖定
實驗效果如下:
第一個session:
sec@ora10g> update table_sfu set a = 100 where a = 1;

1 row updated.

第二個session:
sec@ora10g> select * from table_sfu where a = 1 for update;
此處是“鎖等待”效果

sec@ora10g> select * from table_sfu where a = 1 for update nowait;
select * from table_sfu where a = 1 for update nowait
              *
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
這里提示了錯誤,原因就是已經(jīng)“探測”到該行已經(jīng)被別的事務(wù)鎖定,這里無法對其進行鎖定操作。

sec@ora10g> select * from table_sfu where a = 1 for update wait 3;
select * from table_sfu where a = 1 for update wait 3
              *
ERROR at line 1:
ORA-30006: resource busy; acquire with WAIT timeout expired
這里提示的錯誤內(nèi)容與上面的一樣,不過這里wait 3表示,我等你三秒的時間,如果三秒過后還無法鎖定資源,就報錯。

9.更進一步,請參考Oracle官方文檔中相關(guān)的描述
《for_update_clause ::=》
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm#i2126016
語法格式:
FOR UPDATE
[ OF [ [ schema. ]
       { table | view } . ]column
       [, [ [ schema. ]
            { table | view } . ]column
       ]...
]
[ NOWAIT | WAIT integer ]

同上述連接,搜索關(guān)鍵字“for_update_clause”可以得到每個選項的解釋信息

《Using the FOR UPDATE Clause: Examples 》
http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_10002.htm#i2130052

10.小結(jié)
上面的小實驗展示了一下Select For Update行級鎖定的效果,Oracle的鎖定機制還是非常的靈活的,基于這個鎖定可以實現(xiàn)“悲觀鎖定”。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久精品欧美丰满| 国产精品九色蝌蚪自拍| 亚洲伊人久久综合| 亚洲成人在线视频网站| 在线观看国产一区二区| 激情久久中文字幕| 亚洲激情视频网站| 一区二区三区四区五区精品| 亚洲特级片在线| 午夜一级久久| 久久久久一区二区| 久久综合九色九九| 麻豆成人在线播放| 最新热久久免费视频| 美女国内精品自产拍在线播放| 模特精品在线| 一区二区三区精品久久久| 亚洲每日更新| 欧美一级在线视频| 久久亚洲精品欧美| 欧美激情中文字幕在线| 国产精品毛片a∨一区二区三区| 国产伦精品一区二区| 亚洲高清免费视频| 久久精品免费看| 亚洲欧美国产精品桃花| 亚洲在线日韩| 亚洲午夜精品17c| 国模精品一区二区三区| 欧美在线观看一区| 麻豆av一区二区三区久久| 国内精品国产成人| 久久综合九色综合欧美就去吻| 亚洲男人的天堂在线aⅴ视频| 欧美四级剧情无删版影片| av成人福利| 欧美精品一区在线播放| 极品少妇一区二区| 蜜桃精品一区二区三区| 亚洲尤物影院| 亚洲国产欧美一区二区三区同亚洲 | 亚洲电影在线播放| 亚洲综合第一页| 欧美理论电影在线观看| 在线成人中文字幕| 久久精品国产久精国产爱| 99在线精品观看| 欧美r片在线| 在线成人h网| 欧美在线视频二区| 亚洲图色在线| 国产精品wwwwww| 中日韩美女免费视频网址在线观看 | 午夜精彩国产免费不卡不顿大片| 欧美精品导航| 亚洲国产一区二区精品专区| 久久午夜视频| 欧美在线免费看| 国产精品免费区二区三区观看| 亚洲精品乱码久久久久久蜜桃91| 美国十次了思思久久精品导航| 亚洲综合精品| 欧美日韩另类综合| 在线综合视频| 亚洲视频999| 国产精品日韩二区| 欧美中文字幕在线播放| 亚洲欧美区自拍先锋| 国产精品国产三级国产| 亚洲午夜久久久| 一本久久综合亚洲鲁鲁| 国产精品久久久久天堂| 午夜精品www| 亚洲免费视频网站| 国产美女高潮久久白浆| 久久久91精品国产一区二区三区| 亚洲午夜久久久| 国产日韩欧美综合| 久久综合色天天久久综合图片| 久久九九久精品国产免费直播| 国产久一道中文一区| 欧美一区二区三区免费看| 久久黄色影院| 亚洲精品视频在线观看网站 | 久久黄色级2电影| 在线观看日韩精品| 亚洲欧美日韩中文视频| 久久九九国产精品怡红院| 校园激情久久| 亚洲黄一区二区三区| 亚洲欧洲一区二区三区| 国产精品久久夜| 久久综合久久综合这里只有精品| 母乳一区在线观看| 亚洲欧美中文日韩在线| 久久全球大尺度高清视频| 一区二区日韩免费看| 性欧美长视频| 亚洲人成网站色ww在线| 99riav国产精品| 国产一区二区三区久久悠悠色av| 欧美激情一二区| 国产伦精品一区二区三区免费迷| 欧美顶级少妇做爰| 国产女优一区| 亚洲国产精品久久久久| 国产精品影片在线观看| 最新国产成人在线观看| 激情文学综合丁香| 亚洲毛片视频| 亚洲精品在线看| 亚洲欧美日韩另类精品一区二区三区| 在线看国产一区| 亚洲欧美国产精品va在线观看| 亚洲国产精品久久久久秋霞蜜臀| 亚洲少妇在线| 在线一区二区三区做爰视频网站 | 国产精品99久久久久久有的能看| 国内成人精品2018免费看| 99re国产精品| 亚洲欧洲日产国码二区| 久久精品国产成人| 欧美在线日韩| 国产精品成人一区二区| 最新69国产成人精品视频免费| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲影院在线观看| 亚洲影音一区| 欧美日韩精选| 一本不卡影院| 亚洲一区二区欧美日韩| 欧美日韩亚洲天堂| 日韩亚洲国产精品| 在线一区二区视频| 欧美三级不卡| 一本在线高清不卡dvd| 中文亚洲字幕| 国产精品v欧美精品v日本精品动漫| 91久久午夜| 99国产一区| 欧美日韩中文字幕在线视频| 亚洲裸体俱乐部裸体舞表演av| 日韩视频在线观看免费| 欧美激情在线观看| 一本高清dvd不卡在线观看| 亚洲小少妇裸体bbw| 亚洲国产另类精品专区| 136国产福利精品导航网址| 久久久www成人免费无遮挡大片| 久久久精品网| 有坂深雪在线一区| 蜜桃av一区二区| 亚洲看片网站| 午夜精品美女自拍福到在线| 国产精品视频不卡| 久久精品91久久香蕉加勒比| 欧美成人激情在线| 洋洋av久久久久久久一区| 欧美色大人视频| 午夜免费在线观看精品视频| 久久视频在线看| 亚洲欧洲一区二区三区在线观看| 欧美精品成人91久久久久久久| 国产精品99久久久久久久女警| 久久www成人_看片免费不卡| 在线不卡a资源高清| 欧美激情一区二区三区成人| 亚洲性色视频| 欧美v国产在线一区二区三区| 一本一本久久| 国内精品美女在线观看| 欧美久久久久久久久| 午夜欧美精品久久久久久久| 欧美成人免费网| 亚洲男人第一av网站| 黄色资源网久久资源365| 欧美伦理影院| 久久久久一区二区三区| 一本久久综合| 欧美14一18处毛片| 午夜精品久久久久久久99黑人| 亚洲第一搞黄网站| 国产精品影视天天线| 欧美精品精品一区| 久久国产一区二区| 一区二区高清| 亚洲第一在线综合在线| 欧美在线观看视频一区二区| 日韩一级黄色av| 在线观看一区二区视频| 国产欧美精品日韩区二区麻豆天美| 欧美+亚洲+精品+三区| 欧美伊人久久久久久午夜久久久久| 91久久久亚洲精品| 欧美成人午夜影院| 久久免费的精品国产v∧| 午夜欧美大片免费观看| 一区二区三区高清视频在线观看| 伊人久久大香线| 国产欧美精品一区二区三区介绍|