国产麻豆精品视频-国产麻豆精品免费视频-国产麻豆精品免费密入口-国产麻豆精品高清在线播放-国产麻豆精品hdvideoss-国产麻豆精品

始創(chuàng)于2000年 股票代碼:831685
咨詢熱線:0371-60135900 注冊有禮 登錄
  • 掛牌上市企業(yè)
  • 60秒人工響應(yīng)
  • 99.99%連通率
  • 7*24h人工
  • 故障100倍補償
全部產(chǎn)品
您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

Oracle悲觀鎖和樂觀鎖淺析

發(fā)布時間:  2012/8/21 16:32:33

為了得到最大的性能,一般數(shù)據(jù)庫都有并發(fā)機制,不過帶來的問題就是數(shù)據(jù)訪問的沖突。為了解決這個問題,大多數(shù)數(shù)據(jù)庫用的方法就是數(shù)據(jù)的鎖定。

數(shù)據(jù)的鎖定分為兩種方法,第一種叫做悲觀鎖,第二種叫做樂觀鎖。什么叫悲觀鎖呢,悲觀鎖顧名思義,就是對數(shù)據(jù)的沖突采取一種悲觀的態(tài)度,也就是說假設(shè)數(shù)據(jù)肯定會沖突,所以在數(shù)據(jù)開始讀取的時候就把數(shù)據(jù)鎖定住。而樂觀鎖就是認(rèn)為數(shù)據(jù)一般情況下不會造成沖突,所以在數(shù)據(jù)進行提交更新的時候,才會正式對數(shù)據(jù)的沖突與否進行檢測,如果發(fā)現(xiàn)沖突了,則讓用戶返回錯誤的信息,讓用戶決定如何去做。
-
 

先從悲觀鎖開始說。在SqlServer等其余很多數(shù)據(jù)庫中,數(shù)據(jù)的鎖定通常采用頁級鎖的方式,也就是說對一張表內(nèi)的數(shù)據(jù)是一種串行化的更新插入機制,在任何時間同一張表只會插1條數(shù)據(jù),別的想插入的數(shù)據(jù)要等到這一條數(shù)據(jù)插完以后才能依次插入。帶來的后果就是性能的降低,在多用戶并發(fā)訪問的時候,當(dāng)對一張表進行頻繁操作時,會發(fā)現(xiàn)響應(yīng)效率很低,數(shù)據(jù)庫經(jīng)常處于一種假死狀態(tài)。而Oracle用的是行級鎖,只是對想鎖定的數(shù)據(jù)才進行鎖定,其余的數(shù)據(jù)不相干,所以在對Oracle表中并發(fā)插數(shù)據(jù)的時候,基本上不會有任何影響。

注:對于悲觀鎖是針對并發(fā)的可能性比較大,而一般在我們的應(yīng)用中用樂觀鎖足以。


Oracle的悲觀鎖需要利用一條現(xiàn)有的連接,分成兩種方式,從SQL語句的區(qū)別來看,就是一種是for update,一種是for update nowait的形式。比如我們看一個例子。首先建立測試用的數(shù)據(jù)庫表。

CREATE TABLE TEST(ID,NAME,LOCATION,VALUE,CONSTRAINT test_pk PRIMARY KEY(ID))AS SELECT deptno, dname, loc, 1 FROM scott.dept


這里我們利用了Oracle的Sample的scott用戶的表,把數(shù)據(jù)copy到我們的test表中。首先我們看一下for update鎖定方式。首先我們執(zhí)行如下的select for update語句。

select * from test where id = 10 for update

通過這條檢索語句鎖定以后,再開另外一個sql*plus窗口進行操作,再把上面這條sql語句執(zhí)行一便,你會發(fā)現(xiàn)sqlplus好像死在那里了,好像檢索不到數(shù)據(jù)的樣子,但是也不返回任何結(jié)果,就屬于卡在那里的感覺。這個時候是什么原因呢,就是一開始的第一個Session中的select for update語句把數(shù)據(jù)鎖定住了。由于這里鎖定的機制是wait的狀態(tài)(只要不表示nowait那就是wait),所以第二個Session(也就是卡住的那個sql*plus)中當(dāng)前這個檢索就處于等待狀態(tài)。當(dāng)?shù)谝粋session最后commit或者rollback之后,第二個session中的檢索結(jié)果就是自動跳出來,并且也把數(shù)據(jù)鎖定住。不過如果你第二個session中你的檢索語句如下所示。

select * from test where id = 10


也就是沒有for update這種鎖定數(shù)據(jù)的語句的話,就不會造成阻塞了。另外一種情況,就是當(dāng)數(shù)據(jù)庫數(shù)據(jù)被鎖定的時候,也就是執(zhí)行剛才for update那條sql以后,我們在另外一個session中執(zhí)行for update nowait后又是什么樣呢。比如如下的sql語句。 由于這條語句中是制定采用nowait方式來進行檢索,所以當(dāng)發(fā)現(xiàn)數(shù)據(jù)被別的session鎖定中的時候,就會迅速返回ORA-00054錯誤,內(nèi)容是資源正忙, 但指定以 NOWAIT 方式獲取資源。所以在程序中我們可以采用nowait方式迅速判斷當(dāng)前數(shù)據(jù)是否被鎖定中,如果鎖定中的話,就要采取相應(yīng)的業(yè)務(wù)措施進行處理。

select * from test where id = 10 for update nowait


那這里另外一個問題,就是當(dāng)我們鎖定住數(shù)據(jù)的時候,我們對數(shù)據(jù)進行更新和刪除的話會是什么樣呢。比如同樣,我們讓第一個Session鎖定住id=10的那條數(shù)據(jù),我們在第二個session中執(zhí)行如下語句。

update test set value=2 where id = 10


這個時候我們發(fā)現(xiàn)update語句就好像select for update語句一樣也停住卡在這里,當(dāng)你第一個session放開鎖定以后update才能正常運行。當(dāng)你update運行后,數(shù)據(jù)又被你update語句鎖定住了,這個時候只要你update后還沒有commit,別的session照樣不能對數(shù)據(jù)進行鎖定更新等等。

總之,Oracle中的悲觀鎖就是利用Oracle的Connection對數(shù)據(jù)進行鎖定。在Oracle中,用這種行級鎖帶來的性能損失是很小的,只是要注意程序邏輯,不要給你一不小心搞成死鎖了就好。而且由于數(shù)據(jù)的及時鎖定,在數(shù)據(jù)提交時候就不呼出現(xiàn)沖突,可以省去很多惱人的數(shù)據(jù)沖突處理。缺點就是你必須要始終有一條數(shù)據(jù)庫連接,就是說在整個鎖定到最后放開鎖的過程中,你的數(shù)據(jù)庫聯(lián)接要始終保持住。與悲觀鎖相對的,我們有了樂觀鎖。樂觀鎖一開始也說了,就是一開始假設(shè)不會造成數(shù)據(jù)沖突,在最后提交的時候再進行數(shù)據(jù)沖突檢測。在樂觀鎖中,我們有3種

常用的做法來實現(xiàn)。

[1]第一種就是在數(shù)據(jù)取得的時候把整個數(shù)據(jù)都copy到應(yīng)用中,在進行提交的時候比對當(dāng)前數(shù)據(jù)庫中的數(shù)據(jù)和開始的時候更新前取得的數(shù)據(jù)。當(dāng)發(fā)現(xiàn)兩個數(shù)據(jù)一模一樣以后,就表示沒有沖突可以提交,否則則是并發(fā)沖突,需要去用業(yè)務(wù)邏輯進行解決。

[2]第二種樂觀鎖的做法就是采用版本戳,這個在Hibernate中得到了使用。采用版本戳的話,首先需要在你有樂觀鎖的數(shù)據(jù)庫table上建立一個新的column,比如為number型,當(dāng)你數(shù)據(jù)每更新一次的時候,版本數(shù)就會往上增加1。比如同樣有2個session同樣對某條數(shù)據(jù)進行操作。兩者都取到當(dāng)前的數(shù)據(jù)的版本號為1,當(dāng)?shù)谝粋session進行數(shù)據(jù)更新后,在提交的時候查看到當(dāng)前數(shù)據(jù)的版本還為1,和自己一開始取到的版本相同。就正式提交,然后把版本號增加1,這個時候當(dāng)前數(shù)據(jù)的版本為2。當(dāng)?shù)诙䝼session也更新了數(shù)據(jù)提交的時候,發(fā)現(xiàn)數(shù)據(jù)庫中版本為2,和一開始這個session取到的版本號不一致,就知道別人更新過此條數(shù)據(jù),這個時候再進行業(yè)務(wù)處理,比如整個Transaction都Rollback等等操作。在用版本戳的時候,可以在應(yīng)用程序側(cè)使用版本戳的驗證,也可以在數(shù)據(jù)庫側(cè)采用Trigger(觸發(fā)器)來進行驗證。不過數(shù)據(jù)庫的Trigger的性能開銷還是比較的大,所以能在應(yīng)用側(cè)進行驗證的話還是推薦不用Trigger。

[3]第三種做法和第二種做法有點類似,就是也新增一個Table的Column,不過這次這個column是采用timestamp型,存儲數(shù)據(jù)最后更新的時間。在Oracle9i以后可以采用新的數(shù)據(jù)類型,也就是timestamp with time zone類型來做時間戳。這種Timestamp的數(shù)據(jù)精度在Oracle的時間類型中是最高的,精確到微秒(還沒到納秒的級別),一般來說,加上數(shù)據(jù)庫處理時間和人的思考動作時間,微秒級別是非常非常夠了,其實只要精確到毫秒甚至秒都應(yīng)該沒有什么問題。和剛才的版本戳類似,也是在更新提交的時候檢查當(dāng)前數(shù)據(jù)庫中數(shù)據(jù)的時間戳和自己更新前取到的時間戳進行對比,如果一致則OK,否則就是版本沖突。如果不想把代碼寫在程序中或者由于別的原因無法把代碼寫在現(xiàn)有的程序中,也可以把這個時間戳樂觀鎖邏輯寫在Trigger或者存儲過程中。


本文出自:億恩科技【www.artduck.net】

服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

  • 您可能在找
  • 億恩北京公司:
  • 經(jīng)營性ICP/ISP證:京B2-20150015
  • 億恩鄭州公司:
  • 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
  • 億恩南昌公司:
  • 經(jīng)營性ICP/ISP證:贛B2-20080012
  • 服務(wù)器/云主機 24小時售后服務(wù)電話:0371-60135900
  • 虛擬主機/智能建站 24小時售后服務(wù)電話:0371-60135900
  • 專注服務(wù)器托管17年
    掃掃關(guān)注-微信公眾號
    0371-60135900
    Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號
      0
     
     
     
     

    0371-60135900
    7*24小時客服服務(wù)熱線

     
     
    99热热久久| 青草国产在线| 欧美日本韩国| 免费国产在线视频| 成人a级高清视频在线观看| 日韩欧美一二三区| 香蕉视频久久| 欧美a级成人淫片免费看| 国产精品自拍亚洲| 亚洲精品影院| 黄色短视屏| 久久国产一久久高清| 日韩在线观看免费| 精品视频在线看 | 成人在激情在线视频| 一本高清在线| 国产一区二区精品久| 精品视频在线看| 亚欧成人乱码一区二区| 亚欧成人乱码一区二区| 韩国毛片免费大片| 欧美大片a一级毛片视频| 一本高清在线| 台湾美女古装一级毛片| 久久久成人网| 中文字幕Aⅴ资源网| 亚洲第一视频在线播放| 精品国产一区二区三区久久久蜜臀 | 一级片片| 久久精品大片| 欧美激情中文字幕一区二区| 久久精品店| 99色精品| 成人av在线播放| 国产伦精品一区三区视频| 欧美1卡一卡二卡三新区| 午夜欧美成人香蕉剧场| 成人影视在线播放| 精品国产三级a| 韩国毛片免费大片| 国产成人精品综合| 午夜家庭影院| 九九国产| 黄色免费三级| 国产不卡福利| 成人a大片高清在线观看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 麻豆网站在线免费观看| 久草免费在线观看| 黄色免费三级| 国产不卡在线看| 亚欧成人毛片一区二区三区四区| 高清一级毛片一本到免费观看| 一级女性全黄久久生活片| 亚洲 国产精品 日韩| 国产一区二区精品久久| 成人影视在线播放| 国产91精品一区| 国产亚洲精品成人a在线| 国产成人精品影视| 成人影院一区二区三区| 亚洲精品影院| 一本高清在线| 一级女性全黄久久生活片| 可以免费看毛片的网站| 日韩欧美一二三区| 99热精品在线| 精品视频在线观看一区二区三区| 日韩免费在线视频| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 青青青草影院 | 午夜在线影院| 黄视频网站免费看| 日韩中文字幕在线观看视频| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 二级特黄绝大片免费视频大片| 四虎影视久久久免费| 九九免费高清在线观看视频| 亚洲www美色| 国产视频一区二区在线观看| 精品国产亚一区二区三区| 国产网站免费在线观看| 日本免费看视频| 国产不卡在线观看视频| 欧美a级成人淫片免费看| 99久久精品国产国产毛片 | 尤物视频网站在线观看| 九九干| 亚洲精品中文一区不卡 | 精品国产三级a| 成人a大片在线观看| 亚洲 男人 天堂| 四虎影视精品永久免费网站| 国产麻豆精品hdvideoss| 天天色色网| 九九免费高清在线观看视频| 国产麻豆精品免费视频| 国产高清在线精品一区a| 精品久久久久久影院免费| 国产网站免费观看| 国产一区二区精品久久| 亚洲天堂免费| 在线观看成人网| 日本免费看视频| 国产网站免费观看| 欧美爱爱动态| 久久99爰这里有精品国产| 国产综合成人观看在线| 欧美激情一区二区三区在线| 日韩中文字幕在线观看视频| 深夜做爰性大片中文| 99久久精品国产国产毛片 | 99久久精品国产高清一区二区 | 国产一区二区精品久久91| 91麻豆国产| 日韩女人做爰大片| 可以免费看毛片的网站| 麻豆午夜视频| 九九精品影院| 九九精品在线播放| 久久久久久久免费视频| 免费国产在线视频| 国产一区免费在线观看| 国产原创中文字幕| 色综合久久久久综合体桃花网| 国产韩国精品一区二区三区| 国产亚洲精品成人a在线| 国产成a人片在线观看视频| 九九干| 国产国语在线播放视频| 久久99中文字幕| 成人免费一级毛片在线播放视频| 亚洲 男人 天堂| 成人免费观看视频| 欧美a级成人淫片免费看| 国产不卡在线观看视频| 日本伦理网站| 日韩一级精品视频在线观看| 美国一区二区三区| 欧美a级v片不卡在线观看| 91麻豆国产福利精品| 欧美a级片免费看| 日韩中文字幕在线播放| 国产麻豆精品| 一级女性全黄生活片免费| 欧美激情影院| 99久久精品费精品国产一区二区| 国产精品免费久久| 日日日夜夜操| 青青久久精品| 久久精品大片| 久久国产精品只做精品| 天天做人人爱夜夜爽2020| 亚欧成人乱码一区二区| 日本免费区| 国产不卡福利| 999精品视频在线| 日韩一级精品视频在线观看| 国产亚洲免费观看| 黄视频网站免费看| 精品久久久久久中文字幕一区| 二级片在线观看| 精品久久久久久影院免费| 久久久久久久久综合影视网| 国产伦精品一区二区三区无广告| 免费一级片网站| 久久99爰这里有精品国产| 精品国产香蕉在线播出| 欧美国产日韩精品| 午夜欧美福利| 亚洲 男人 天堂| 一a一级片| 日本特黄特色aaa大片免费| 欧美另类videosbestsex视频 | 在线观看成人网| 久久国产精品只做精品| 午夜在线观看视频免费 成人| 亚洲第一页乱| 午夜欧美成人久久久久久| 国产极品白嫩美女在线观看看| 日韩avdvd| 午夜在线观看视频免费 成人| 欧美大片a一级毛片视频| 成人a级高清视频在线观看| 午夜激情视频在线观看| 国产a视频| 精品久久久久久综合网| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美激情一区二区三区中文字幕| 国产国语在线播放视频| 91麻豆精品国产片在线观看| 91麻豆精品国产自产在线 | 日韩一级黄色| 色综合久久手机在线| 欧美激情在线精品video| 亚欧乱色一区二区三区| 麻豆系列 在线视频| 九九免费高清在线观看视频| 欧美大片一区| 夜夜操网|