国产精品久久久久久久久久久新郎_91久久精品国产_国内精品久久久久久_欧美激情第一页在线观看_国产欧美日韩丝袜精品一区_日韩精品成人一区二区在线观看_国产精品v片在线观看不卡_91精品国产综合久久香蕉最新版 _国产精品亚洲激情_色综合男人天堂

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

Oracle悲觀鎖和樂觀鎖淺析

發布時間:  2012/8/21 16:32:33

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

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

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

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


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

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用戶的表,把數據copy到我們的test表中。首先我們看一下for update鎖定方式。首先我們執行如下的select for update語句。

select * from test where id = 10 for update

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

select * from test where id = 10


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

select * from test where id = 10 for update nowait


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

update test set value=2 where id = 10


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

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

常用的做法來實現。

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

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

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


本文出自:億恩科技【www.czbl888.cn】

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

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

    0371-60135900
    7*24小時客服服務熱線

     
     
    国产精品久久久久久久久久久新郎_91久久精品国产_国内精品久久久久久_欧美激情第一页在线观看_国产欧美日韩丝袜精品一区_日韩精品成人一区二区在线观看_国产精品v片在线观看不卡_91精品国产综合久久香蕉最新版 _国产精品亚洲激情_色综合男人天堂
    www.四虎成人| 欧美成人高潮一二区在线看| 麻豆一区二区三区在线观看| www.超碰com| 日韩网址在线观看| 噜噜噜久久亚洲精品国产品麻豆| gogogo高清免费观看在线视频| 免费无码毛片一区二三区| 性鲍视频在线观看| а 天堂 在线| 亚洲一二三av| 黄色a级在线观看| 亚洲国产精品女人| 亚洲av毛片在线观看| 99亚洲精品视频| 国产一二三四五| 妺妺窝人体色www看人体| www.男人天堂网| 亚洲精品天堂成人片av在线播放 | 99福利在线观看| 欧美牲交a欧美牲交aⅴ免费真| 日韩a∨精品日韩在线观看| 黄网站欧美内射| 国产精品99久久免费黑人人妻| 免费在线观看毛片网站| 国产wwwxx| 日本高清一区二区视频| 亚洲综合在线一区二区| 四虎精品欧美一区二区免费| a级黄色片免费| 国产精品无码av在线播放| 精品一卡二卡三卡| 成人综合久久网| 欧美xxxx吸乳| 国产v片免费观看| 免费午夜视频在线观看| 国产成人在线综合| 黄色一级片网址| 免费成人进口网站| 一本久道高清无码视频| 免费高清在线观看免费| 在线观看亚洲色图| 欧美日韩午夜爽爽| 久久成人免费观看| 青青草原国产在线视频| 无码人妻精品一区二区蜜桃百度| 国产毛片视频网站| 搡女人真爽免费午夜网站| 色网站在线视频| 国产玉足脚交久久欧美| 国产成人手机视频| 亚洲天堂av一区二区三区| av免费观看大全| 日本黄大片一区二区三区| 国产乱人伦精品一区二区三区| 四虎永久在线精品无码视频| 奇米777在线| 久久久一本二本三本| 黄色永久免费网站| 人妻少妇精品无码专区二区| 国产探花在线看| 夜夜夜夜夜夜操| 午夜免费福利小电影| 午夜精品久久久久久久99热影院| 无码人妻精品一区二区蜜桃百度| 免费在线激情视频| 国产xxxxhd| 色诱视频在线观看| 4444亚洲人成无码网在线观看| www.色偷偷.com| 亚洲人成无码网站久久99热国产 | 一区二区三区一级片| a级黄色一级片| 色噜噜狠狠一区二区| 国产v片免费观看| 成人一对一视频| 香蕉精品视频在线| 黄www在线观看| 蜜臀av.com| 香蕉视频网站入口| 国产精品专区在线| 三级网在线观看| 向日葵污视频在线观看| 午夜精品久久久久久久无码| 国产一区一区三区| 日日干夜夜操s8| 成年人黄色片视频| www.xxx麻豆| 亚洲国产精品女人| 亚洲精品免费一区亚洲精品免费精品一区| ww国产内射精品后入国产| www.国产亚洲| 奇米777在线视频| 岛国av在线免费| 哪个网站能看毛片| 日本国产中文字幕| 爱爱爱视频网站| 爱爱爱爱免费视频| 天天操,天天操| 天天操天天摸天天爽| 黄色影院一级片| 国产精品成人久久电影| 国产91porn| 一区中文字幕在线观看| 午夜剧场在线免费观看| 一区二区三区 欧美| 91视频免费版污| 久久久久狠狠高潮亚洲精品| www在线观看免费| 天堂…中文在线最新版在线| 久艹在线免费观看| 久艹在线免费观看| 国产一区二区网| 日本欧美黄色片| 国产不卡一区二区视频| cao在线观看| 一二三四视频社区在线| 欧美一区二区三区爽大粗免费| 国产精品裸体瑜伽视频| 久久国产成人精品国产成人亚洲| 免费国产黄色网址| 漂亮人妻被中出中文字幕| 国产裸体舞一区二区三区| 国产情侣av自拍| 波多结衣在线观看| 中文av一区二区三区| 日韩不卡一二三| 亚洲黄色av片| 一本二本三本亚洲码 | 情侣黄网站免费看| 欧美成人黑人猛交| 性chinese极品按摩| 五月天激情播播| 永久免费看av| 日韩av综合在线观看| 国产一区视频免费观看| 另类小说第一页| 色黄视频免费看| 欧美交换配乱吟粗大25p| 国产美女永久无遮挡| 北条麻妃在线观看| 久久国产精品国产精品| 成人高清在线观看视频| 男人添女荫道口喷水视频| 国产最新免费视频| 亚洲免费999| 日本久久久网站| 欧美日韩中文在线视频| 国产三级精品三级在线| 岛国大片在线播放| 欧美亚洲另类色图| 久久久久久蜜桃一区二区| 亚洲精品天堂成人片av在线播放| 男人操女人逼免费视频| 国产又黄又猛又粗| 超碰超碰超碰超碰超碰| 黄色a级片免费| 午夜啪啪免费视频| 国精产品一区一区三区视频| 亚洲国产精品三区| 欧美少妇一区二区三区| 熟女少妇精品一区二区| 影音先锋男人的网站| 日本精品免费在线观看| 亚洲妇熟xx妇色黄蜜桃| 国产精品成人久久电影| 国产精品久久久毛片| 青青草视频在线视频| www欧美激情| 国内精品在线观看视频| 福利视频999| 国产精品97在线| 成年在线观看视频| 欧美少妇性生活视频| 免费国产成人看片在线| 欧美精品成人网| 99久久久无码国产精品性色戒| 热99这里只有精品| 天天干天天操天天干天天操| 动漫av网站免费观看| 中文 日韩 欧美| 免费观看日韩毛片| 熟女熟妇伦久久影院毛片一区二区| 国产精品丝袜久久久久久消防器材| 日本成人xxx| www.国产区| 我的公把我弄高潮了视频| 九一精品久久久| 国产xxxxx视频| 国产一二三在线视频| 97人人模人人爽人人澡| 欧美日韩亚洲自拍| 能在线观看的av| 久久综合亚洲精品| 一级黄色片在线免费观看| 国产高潮免费视频| 成人三级视频在线播放| 黄页网站在线观看视频| 中文字幕一区二区三区四区五区人 | www.久久久精品|