-
互斥鎖定(Exclusive
Lock):它禁止相關資源共享。如果一異動交易以互斥鎖定方式封鎖某資源,則僅有該異動交易被允許更新該資源的資料,直到該異動交易釋放對該資源的鎖定。
-
共享鎖定(Share
Lock):它允許相關資源可以被共享(Share),例如:多個使用者可以讀取(Read) 相同的資料。多個異動交易可以對同一資源獲得共享鎖定。
|
|
一般而言,共享鎖定(Share
Lock) 比互斥鎖定(Exclusive Lock) 具有更高的資料並行性(Data Concurrency)。在多使用者資料庫系統使用鎖定法(Locks),有時會產生死結(Dead
Lock),使得異動交易無法繼續。死結例子如下: |
|
|
|
|
在時間點t1時,異動交易T1成功地更新了SCOTT的Emp表格中empno為7844的列(Row),並且加以互斥鎖定;在時間點t2時,異動交易T2也成功地更新了SCOTT的EMP表格empno為7839的列,並且加以互斥鎖定;在時間點t3,異動交易T1嘗試更新目前異動交易T2所互斥鎖定的列,但因為該列已被鎖定,因此T1必須等待T2釋放該列;在時間點t4,異動交易T2嘗試更新目前異動交易T1所互斥鎖定的列,但因該列已被鎖定,因此T2必須等待T1釋放該列。此時已造成死結。ORACLE系統一旦偵測到死結,會送出錯誤訊息給其中一個異動交易。 |
|
雖然ORACLE系統並不提升鎖定的層次,但是在某些資料庫系統,一旦異動交易有許多同一層次的鎖定,那麼資料庫系統會自動地改變鎖定的程度到更高層次的鎖定。例如,若某一使用者同時對同一個表格中的不同列做鎖定,資料庫系統可能會自動地提升鎖定層次,由原本的列鎖定(Row
Lock)提升為表格鎖定(Table Lock)。利用這種提升鎖定層次的方式,使得鎖定的數目可以減少,但是也因為鎖定層次提高而增加了限制。鎖定的提升(Lock
Escalation),一般而言會增加死結的發生率。 |
|
ORACLE系統利用不同層次的鎖定、異動交易與多層次一致性模式(Multi-version
Consistency Model) 來維持系統的並行性(Concurrency)、整合性(Integrity)
與一致性(Consistency),在一個異動交易A中,SQL指令所做的更新資料部分,只有在該異動交易A被委付確認之後才啟動的異動交易才能看見。而在異動交易中,所獲得的全部鎖定,會在該異動交易被委付確認或撤回時被釋放(UnLock)。 |
|
異動交易執行的過程中,所用到的資料或所產生的中間結果,都不能透露給其它異動交易讀取或更改,稱之為異動交易的「隔離性」。因為任何異動交易在委付確認前都有可被撤回,為了避免其他異動交易B,會因使用異動交易A所產生的中間結果。但因事後該異動交易A撤回而導致「連鎖撤回效應」(Cascading
Rollback)。因此異動交易間彼此是隔離的。也就是說,正常性況下通常會有許多異動交易是並行執行,但是每個異動交易的更新對其他異動交易而言都是隱藏的,直到該異動交易被委付確認為止。換句話說,對於任意兩個不同的異動交易T1與T2的更新,T1可能可以看到T2的更新在T2被委付確認後;或者T2可能可以看到T1的更新,在T1被委付確認後,但是絕對不可能T1與T2同時都可看到對方的更新。 |
|
|
多層次一致性模式(Multi-version
Consistency Model),所提供的兩種讀取一致性層次: |
|
- 敘述層級讀取一致性(Statement-level
Read Consistency)
- 異動交易層級讀取一致性(Transaction-level
Read Consistency)
|