oracle 中的事務

Davis_itpub發表於2018-06-27
一組SQL語句操作要成為事務,資料庫管理系統必須保證這組操作的原子性(Atomicity)、一致性(consistency)、隔離性(Isolation)和永續性(Durability),這就是ACDI特性

原子性:是指事物中包含的所有操作要麼全做,要麼全不做,也就是說事物的所有活動在資料庫中要麼全部反映,要麼全部不反映,一保證資料時一致的。

一致性:是指資料庫在事務操作前和操作處理,其中的資料必須都滿足業務規定的約束。

隔離性:是指資料庫允許多個併發事務同時對其中的資料進行讀寫好修改的能力,隔離性可以防止事務的併發執行時,由於他們的操作命令交叉執行而導致的資料不一致狀態。

永續性:是指當事務結束後,它對資料庫中的影響是永久的,即便系統遇到故障的情況下,資料也不會丟失。

資料庫事務由以下的部分組成:

一個或多個DML 語句

一個 DDL(Data Definition Language – 資料定義語言語句

一個 DCL(Data Control Language – 資料控制語言語句

事務的執行過程:

以第一個 DML 語句的執行作為開始

以下面的其中之一作為結束:

COMMIT 或 ROLLBACK 語句

DDL 或 DCL 語句(自動提交)

使用者會話正常結束

系統異常終了

備註:使用COMMIT 和 ROLLBACK語句,我們可以確保資料完整性;資料改變被提交之前預覽;將邏輯上相關的操作分組。

事務控制語句

Set transaction:設定事務的屬性

Set constrains:設定當前事務的約束模式,設定約束是修改資料的時候,立即起作用,還是當前事務結束後應用。

Savepoint :在事務中建立一個儲存點,回滾時,可以指定回滾到什麼地方,然後重新執行

Release savepoint:刪除一個儲存點

Rollback:回滾事務。級取消對資料庫所做的任何修改

Commit:提交事務,把事務中對資料庫的修改進行永久儲存

資料異常

因為Oracle中支援多個事務併發執行,所以會出現下面的資料異常。

錯讀|髒讀:當user1正在讀資料庫中的表A時,user2正在修改表Auser2修改完了,user1又讀一遍表Auser1讀出的是修改過的資料,而user2又撤消修改了,user1的讀取表A,稱為“錯讀”或者“髒讀”

非重複讀|不重複讀:是指一個事務讀取資料庫中的資料後,另一個事務則更新了資料,當第一個事務再次讀取其中的資料時,就會發現資料已經發生了改變,這就是非重複讀取。非重複讀取所導致的結果就是一個事務前後兩次讀取的資料不相同。

假讀|幻讀:如果一個事務基於某個條件讀取資料後,另一個事務則更新了同一個表中的資料,這時第一個事務再次讀取資料時,根據搜尋的條件返回了不同的行,這就是假讀。

事務中遇到的這些異常與事務的隔離性設定有關,事務的隔離性設定越多,異常就出現的越少,但併發效果就越低,事務的隔離性設定越少,異常出現的越多,併發效果越高。

選擇隔離層

 針對3中讀取的資料時產生的不一致現象,ANSI SQL標準92中定義了4個事務的隔離級別.如下圖所示:

隔離級別

錯讀|髒讀

非重複讀|不重複讀

假讀|幻讀

Read uncommitted(非提交讀)

Read committed(提交讀)

Repeatable read(可重複讀)


Serializable(序列讀)

Oracle預設的隔離級別是read committed

Oracle支援上述地址隔離層中的兩種read committedSerializable除此之外oracle中還設定了read onlyread write隔離層

Serializable:設定事務的隔離層為它時,

Read only :事務中不能有任何修改資料庫中的資料的操作語句,如insertupdatedeletecreate語句,read only Serializable的子集,區別是read only只讀,Serializable和執行DML語句。

Read write:是預設設定,改選項表示在事務中可以有訪問語句。修改語句。但不經常使用

設定事務的屬性

建立 set transaction的語句

如:

Set transaction read noly

或:

Set transaction read write

或:

Set transaction isolation level read commnitted

或:

Set transaction isolation level serializable

注意:這些語句是互斥的。不能同時設定兩個或兩個以上的選項

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31520497/viewspace-2156861/,如需轉載,請註明出處,否則將追究法律責任。

相關文章