IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類(lèi)|軟件專(zhuān)題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁(yè)數(shù)據(jù)庫(kù)Oracle → oracle丟失更新與樂(lè)觀鎖定

oracle丟失更新與樂(lè)觀鎖定

時(shí)間:2015/6/28來(lái)源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)

  樂(lè)觀鎖定,即把所有鎖定都延遲到即將執(zhí)行更新之前才做。換句話說(shuō),我們會(huì)修改屏幕上的信息而不要鎖。我們很樂(lè)觀,認(rèn)為數(shù)據(jù)不會(huì)被其他用戶修改;因此,會(huì)等到最后一刻才去看我們的想法對(duì)不對(duì)?傊褪钱(dāng)用戶已經(jīng)填好修改內(nèi)容,點(diǎn)擊修改按鈕的時(shí)候,我們才去給要修改的記錄加鎖。

  這種鎖定方法在所有環(huán)境下都行得通,但是采用這種方法的話,執(zhí)行更新的用戶"失敗"的可能性會(huì)加大。這說(shuō)明,這個(gè)用戶要更新他的數(shù)據(jù)行時(shí),發(fā)現(xiàn)數(shù)據(jù)已經(jīng)修改過(guò),所以他必須從頭再來(lái)。

  實(shí)現(xiàn)樂(lè)觀并發(fā)控制的方法有很多種。我們將介紹三種方法,分別是:

  1. 使用一個(gè)特殊的列,這個(gè)列由一個(gè)數(shù)據(jù)庫(kù)觸發(fā)器或應(yīng)用程序代碼維護(hù),可以告訴我們記錄的"版本".

  2. 使用一個(gè)校驗(yàn)和或散列值,這是使用原來(lái)的數(shù)據(jù)計(jì)算得出的.

  3. 使用新增的oracle 10g 特性O(shè)RA_ROWSCN.

  下面介紹第一種方法:

  這是一個(gè)簡(jiǎn)單的實(shí)現(xiàn),如果你想保護(hù)數(shù)據(jù)庫(kù)表不出現(xiàn)丟失更新問(wèn)題,應(yīng)對(duì)每個(gè)要保護(hù)的表增加一列。這一列一般是NUMBER或DATE/TIMESTAMP列,通常通過(guò)表上的一個(gè)行觸發(fā)器來(lái)維護(hù)。每次修改行時(shí),這個(gè)觸發(fā)器要負(fù)責(zé)遞增NUMBER列中的值,或者更新DATE/TIMESTAMP列。用戶每次進(jìn)行修改的時(shí)候,會(huì)拿自己取出的這一列的值與數(shù)據(jù)庫(kù)中的進(jìn)行比較,如果相同,說(shuō)明還沒(méi)有人修改過(guò),反之,則已經(jīng)修改過(guò)了!

  其實(shí),,對(duì)于這么簡(jiǎn)單的工作,建議還是避免使用觸發(fā)器,而讓DML來(lái)負(fù)責(zé)。觸發(fā)器會(huì)引入大量開(kāi)銷(xiāo),而且在這種情況下沒(méi)有必要使用它們。

  但是,也不能總是依賴各個(gè)應(yīng)用來(lái)維護(hù)這個(gè)字段,原因是多方面的。例如,這樣會(huì)增加應(yīng)用程序代碼,而且只要是表中需要修改的地方,都必須重復(fù)這些代碼,并正確地實(shí)現(xiàn)。 在一個(gè)大型應(yīng)用中,這樣的地方可能很多。另外,將來(lái)開(kāi)發(fā)的每個(gè)應(yīng)用也必須遵循這些規(guī)則。應(yīng)用程序代碼中很可能會(huì)"遺漏"某一處,未能適當(dāng)?shù)厥褂眠@個(gè)字段。 因此,如果應(yīng)用程序代碼本身不負(fù)責(zé)維護(hù)這個(gè)LAST_MOD字段,我相信應(yīng)用也不應(yīng)負(fù)責(zé)檢查這個(gè)LAST_MOD字 段(如果它確實(shí)能執(zhí)行檢查,當(dāng)然也能執(zhí)行更新。K栽谶@種情況下,我建議把更新邏輯封裝到一個(gè)存儲(chǔ)過(guò)程中,而不要讓?xiě)?yīng)用直接更新表。如果無(wú)法相信應(yīng)用 能維護(hù)這個(gè)字段的值,那么也無(wú)法相信它能正確地檢查這個(gè)字段。存儲(chǔ)過(guò)程可以取以上更新中使用的綁定變量作為輸入,執(zhí)行同樣的更新。當(dāng)檢測(cè)到更新了0行時(shí),存儲(chǔ)過(guò)程會(huì)向客戶返回一個(gè)異常,讓客戶知道更新實(shí)際上失敗了。

  個(gè)人感覺(jué)還是太麻煩,且看下面還有兩個(gè)方法!

關(guān)鍵詞標(biāo)簽:oracle

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門(mén)文章 Oracle中使用alter table來(lái)增加,刪除,修改列Oracle中使用alter table來(lái)增加,刪除,修改列oracle中使用SQL語(yǔ)句修改字段類(lèi)型-oracle修oracle中使用SQL語(yǔ)句修改字段類(lèi)型-oracle修使用低權(quán)限Oracle數(shù)據(jù)庫(kù)賬戶得到管理員權(quán)限使用低權(quán)限Oracle數(shù)據(jù)庫(kù)賬戶得到管理員權(quán)限Oracle對(duì)user的訪問(wèn)控制Oracle對(duì)user的訪問(wèn)控制

相關(guān)下載

人氣排行 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法ORACLE和SQL語(yǔ)法區(qū)別歸納(1)oracle grant 授權(quán)語(yǔ)句如何加速Oracle大批量數(shù)據(jù)處理Oracle刪除表的幾種方法ORACLE修改IP地址后如何能夠使用Oracle 10g創(chuàng)建表空間和用戶并指定權(quán)限