什么是數據庫並發控制?數據庫並發控制的主要方法是?


 

數據庫是一個共享資源,可以提供多個用戶使用。這些用戶程序可以一個一個地串行執行,

每個時刻只有一個用戶程序運行,

執行對數據庫的存取,

其他用戶程序必須等到這個用戶程

序結束以后方能對數據庫存取。但是如果一個用戶程序涉及大量數據的輸入

/

輸出交換,則

數據庫系統的大部分時間處於閑置狀態。

因此,

為了充分利用數據庫資源,

發揮數據庫共享

資源的特點,

應該允許多個用戶並行地存取數據庫。

但這樣就會產生多個用戶程序並發存取

同一數據的情況,

若對並發操作不加控制就可能會存取和存儲不正確的數據,

破壞數據庫的

一致性,

所以數據庫管理系統必須提供並發控制機制。

並發控制機制的好壞是衡量一個數據

庫管理系統性能的重要標志之一。

 

 

DM

用封鎖機制來解決並發問題。它可以保證任何時候都可以有多個正在運行的用戶程序,

但是所有用戶程序都在彼此完全隔離的環境中運行。

 

 

一、

  

並發控制的預備知識

 

 

(

)  

並發控制概述

 

 

並發控制是以事務(

transaction

)為單位進行的。

 

 

1.  

並發控制的單位

――

事務

 

 

事務是數據庫的邏輯工作單位,它是用戶定義的一組操作序列。一個事務可以是一組

SQL

語句、一條

SQL

語句或整個程序。

 

 

事務的開始和結束都可以由用戶顯示的控制,

如果用戶沒有顯式地定義事務,

則由數據庫系

統按缺省規定自動划分事務。

 

 

事務應該具有

4

種屬性:原子性、一致性、隔離性和持久性。

 

 

1

)原子性

 

 

事務的原子性保證事務包含的一組更新操作是原子不可分的,也就是說這些操作是一個整

體,

對數據庫而言全做或者全不做,

不能部分的完成。

這一性質即使在系統崩潰之后仍能得

到保證,

在系統崩潰之后將進行數據庫恢復,

用來恢復和撤銷系統崩潰處於活動狀態的事務

對數據庫的影響,

從而保證事務的原子性。

系統對磁盤上的任何實際數據的修改之前都會將

修改操作信息本身的信息記錄到磁盤上。

當發生崩潰時,

系統能根據這些操作記錄當時該事

 

務處於何種狀態,

以此確定是撤銷該事務所做出的所有修改操作,

還是將修改的操作重新執

行。

 

 

2

)一致性

 

 

一致性要求事務執行完成后,

將數據庫從一個一致狀態轉變到另一個一致狀態。

它是一種以

一致性規則為基礎的邏輯屬性,

例如在轉賬的操作中,

各賬戶金額必須平衡,

這一條規則對

於程序員而言是一個強制的規定,

由此可見,

一致性與原子性是密切相關的。

事務的一致性

屬性要求事務在並發執行的情況下事務的一致性仍然滿足。

它在邏輯上不是獨立的,

它由事

務的隔離性來表示。

 

 

3

 

隔離性

 

 

隔離性意味着一個事務的執行不能被其他事務干擾。

即一個事務內部的操作及使用的數據對

並發的其他事務是隔離的,

並發執行的各個事務之間不能互相干擾。

它要求即使有多個事務

並發執行,看上去每個成功事務按串行調度執行一樣。這一性質的另一種稱法為可串行性,

也就是說系統允許的任何交錯操作調度等價於一個串行調度。

串行調度的意思是每次調度一

個事務,在一個事務的所有操作沒有結束之前,另外的事務操作不能開始。由於性能原因,

我們需要進行交錯操作的調度,

但我們也希望這些交錯操作的調度的效果和某一個串行調度

是一致的。

 

DM

實現該機制是通過對事務的數據訪問對象加適當的鎖,從而排斥其他的事

務對同一數據庫對象的並發操作。

 

 

4

)持久性

 

 

系統提供的持久性保證要求一旦事務提交,

那么對數據庫所做的修改將是持久的,

無論發生

何種機器和系統故障都不應該對其有任何影響。例如,自動櫃員機(

 

ATM

)在向客戶支付

一筆錢時,

就不用擔心丟失客戶的取款記錄。

事務的持久性保證事務對數據庫的影響是持久

的,即使系統崩潰。正如在講原子性時所提到的那樣,系統通過做記錄來提供這一保證。

 

 

DM

沒有提供顯式定義事務開始的語句,第一個可執行的

SQL

語句

(

CONNECT

語句外

)

隱含事務的開始,

但事務的結束可以由用戶顯式的控制。

DM

中以下幾種情況都結束

 

(

常,非正常

)

某一事務:

 

 

1

)當某一連接的屬性設置為自動提交,每執行一條語句都會提交;

 

 

 

2

)遇到

COMMIT/ROLLBACK

語句,便提交

/

回滾一事務;

 

 

3

)當系統的

 

DDL

自動提交開關打開時(缺省為打開),遇到

DDL

語句則自動提交該

DDL

語句和以前的

DML

DDL

操作;

 

 

4

)事務所在的程序正常結束和用戶退出;

 

 

5

)系統非正常終止時;

 

 

說明:

DM

在配置文件中提供了

DDL

語句的自動提交開關

DDL_AUTO_COMMIT

 

當此配

置項的值為

 

1

(缺省情況)時,所有

DDL

語句自動提交;當此配置項的值為

0

時,除

CREATEDATABASE

ALTERDATABASE

CREATESCHEMA

語句外的所有

DDL

語句

都不自動提交。

 

 

DM

中的一致性是以事務為基礎的。

DM

通過提交和回滾分別用於將對數據庫的修改永久化

和廢除,但是無論是提交和回滾,

DM

保證數據庫在每個事務開始前、結束后是一致的。為

了提高事務管理的靈活性,

DM

提供了設置保存點(

SAVEPOINT

)語句和回滾到保存點語

句。

保存點提供了一種靈活的回滾,

事務在執行中可以回滾到某個保存點,

在該保存點以前

的操作有效,而以后的操作被回滾掉。

 

 

DM

中的事務同樣具有上述

4

個屬性:原子性、一致性、隔離性和持久性。

 

 

2. 

並發操作與數據的不一致性

 

 

如果沒有鎖定且多個用戶同時訪問一個數據庫,

則當他們的事務同時使用相同的數據時可能

會發生問題,導致數據庫中的數據的不一致性。

 

 

一個最常見的並發操作的例子是火車

/

飛機訂票系統中的訂票操作。例如,在該系統中的一

個活動序列:

 

 

 

甲售票員讀出某航班的機票張數余額

A

,設

A=16

 

 

  

乙售票員讀出同一航班的機票張數余額

A

,也是

16

 

 

  

甲售票員賣出一張機票,修改機票張數余額

A=A-1=15,

A

寫回數據庫;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM