Oracle併發處理技術

2021-10-03 11:22:34 字數 2208 閱讀 7505

一 併發處理

資料庫的特點就是資料的集中管理和共享。在通常情況下總是有若干個事務併發地執行,這些並行的事務可能併發地訪問相同的資料。因此,資料庫管理系統的乙個重要任務就是要有一種機制去保證這種併發的訪問和修改不破壞資料的完整性,確保這些事務能正確地執行並取得正確的結果。我們知道,事務併發執行時若不加控制的話將導致不正確的結果和資料庫的不一致狀態。為保證資料庫資料正確地反映所有事務的更新以及在一事務修改資料時其它事務不同時修改這個資料,資料庫系統用鎖來控制對資料的併發訪問。

二 oracle的併發處理機制

無需任何說明,oracle自動提供行級鎖,它允許使用者在沒有衝突的情況下更新表中不同的行。行級鎖對聯機事務處理非常有用。

1 oracle鎖的型別

在正常情況下,oracle會自動鎖住需要加鎖的資源以保護資料,這種鎖是隱含的,叫隱含鎖。然而,在一些條件下,這些自動的鎖在實際應用時並不能滿足需要,必須人工加一些鎖。這些人工加的鎖叫顯示鎖。

下面指明了會產生隱含鎖的sql語句:

insert;

update;

delete;

ddl/dcl語句。

下面指明了會產生顯示鎖的sql語句:

select for update;

lock table in *** mode。

解決讀的不可重複性可以用下面的方法。在oracle中,用select for update對預期要修改的記錄加行排它鎖(x),對錶加行共享鎖(rs)。它常用於要鎖住一行,但不去真的修改這一行。鎖之間是有相互作用的。例如,更新時會對錶加rx鎖,對行加x鎖,而只有rs鎖和rx鎖允許再加rx鎖。因此,當存在rs和rx鎖時,表允許更新。再比如,當執行ddl和dcl語句時,會對錶加排它鎖x,而在存在x、rs、srx、rx和s鎖的前提下,都不能再加x鎖。因此,當存在x,rs,srx,rs或s鎖時,不能對錶做dcl和ddl操作。這樣,資料庫會自動防止乙個使用者更新表中的資料,而其他使用者在同時修改表的結構。

2 oracle唯讀事務

oracle支援唯讀事務。唯讀事務有以下特點:

* 在事務中只允許查詢

* 其它事務可修改和查詢資料

* 在事務中,其它使用者的任何修改都看不見

唯讀事務的寫法為:

set transaction read only

sql 語句

commit,rollback,ddl結束唯讀事務

3 事務一致性的級別

事務是定義和維護一致性的單位,封鎖就是要保證這種一致性。如果對封鎖的要求高會增加開銷,降低併發性和效率;有的事務並不嚴格要求結果的質量(如用於統計的事務),如果加上嚴格的封鎖則是不必要和不經濟的。因此有必要進行進一步的分析,考察不同級別的一致性對資料庫資料的質量及並行能力的影響。

一致性級別定義為如下的幾個條件:

(1) 事務不修改其它任何事務的髒資料。髒資料是被其它事務修改過,但尚未提交的資料。

(2) 在事務結束前不對被修改的資源解鎖。

(3) 事務不讀其它任何事務的髒資料。

(4) 在讀前對資料加共享鎖(rs)和行排它鎖,直至事務結束。

* 滿足條件1的事務叫第0級事務。

* 滿足條件1和2的事務叫第1級一致性事務。

* 滿足條件1、2和3的事務為2級一致性事務。oracle的讀一致性保

證了事務不讀其它事務的髒資料。

* 滿足條件1、2、3和4的事務叫第3級一致性事務。

由oracle的三個性質:自動加隱式鎖、在事務結束時釋放鎖和讀一致性,使oracle成為自動滿足以上的0、1和2級一致性事務。因此,oracle自動防止了髒讀(寫-讀依賴)。但是,oracle不能自動防止丟失修改(寫-寫依賴),讀的不可重複性(讀-寫依賴),徹底解決併發性中的問題還需滿足第4個條件(3級一致性事務),這需要程式設計師根據實際情況程式設計。

方法如下:

* 如果想在一段時間內使一些資料不被其它事務改變,且在本事務內僅僅查詢資料,則可用set transaction read only 語句達到這一目的。

* 如果想在一事務內修改一資料,且避免丟失修改,則應在讀這一資料前用select for update對該資料加鎖。

* 如果想在一事務內讀一資料,且想基於這一資料對其它資料修改,則應在讀資料前對此資料用select for update加鎖。對此種型別的應用,用這條sql語句加鎖最恰當。

* 如果想避免不可重複讀現象,可在讀前用select for update對資料加鎖,或用set transaction read only設定唯讀事務。

Oracle併發處理技術 轉貼

oracle併發處理技術 一 併發處理 資料庫的特點就是資料的集中管理和共享。在通常情況下總是有 若干個事務併發地執行,這些並行的事務可能併發地訪問相同的資料。因此,資料庫管理系統的乙個重要任務就是要有一種機制去保證這種 併發的訪問和修改不破壞資料的完整性,確保這些事務能正確地執行 並取得正確的結果...

php併發技術 php處理併發有哪些技術

對於商品搶購等併發場景下,可能會出現超賣的現象,這時就需要解決併發所帶來的這些問題了 在php語言中並沒有原生的提供併發的解決方案,因此就需要借助其他方式來實現併發控制。flock函式用於獲取檔案的鎖,這個鎖同時只能被乙個執行緒獲取到,其它沒有獲取到鎖的執行緒要麼阻塞,要麼獲取失敗 在獲取到鎖的時候...

Hibernate 處理併發

一 事務 指運算元據庫的乙個程式執行單無,這些操作要麼全部成功,要麼全部失敗以保證資料的完成性和統一性.二 多事務併發引起的問題 a 第一類丟失更新 撤銷乙個事務時把其它事務更新的資料也覆蓋了。for example 事務a 和b 同時訪問數 據data 如果事務b 更新了資料,但事務a執行了回滾操...