山西 郭如菊
在IT技術(shù)高速發(fā)展的今天,數(shù)據(jù)庫(kù)技術(shù)的地位越來越重要。任何大型信息系統(tǒng),都需要有數(shù)據(jù)管理系統(tǒng)作為支撐。其中,Oracle以其卓越的性能獲得了廣泛的應(yīng)用。保持?jǐn)?shù)據(jù)一致性和完整性,是每一款成功商業(yè)數(shù)據(jù)庫(kù)都必須做到的基本要求。Oracle的事務(wù)正是保證數(shù)據(jù)庫(kù)一致性和完整性的機(jī)制。了解和掌握事務(wù)的特點(diǎn)和使用技巧,可有效保證數(shù)據(jù)庫(kù)的安全性和完整性。
(一)事務(wù)
事務(wù)是用戶定義的由一條或多條SQL語(yǔ)句組成的邏輯操作單位,是數(shù)據(jù)庫(kù)應(yīng)用程序的基本邏輯單位。事務(wù)是保證數(shù)據(jù)庫(kù)一致性和完整性的機(jī)制。一個(gè)事務(wù)中的SQL語(yǔ)句,全部執(zhí)行時(shí),就是提交事務(wù),對(duì)數(shù)據(jù)庫(kù)的修改會(huì)永久的保存到數(shù)據(jù)庫(kù);全部取消執(zhí)行時(shí),即撤銷事務(wù),回到執(zhí)行前的數(shù)據(jù)庫(kù)狀態(tài)。
(二)事務(wù)的ACID特性
對(duì)一組SQL語(yǔ)句操作構(gòu)成事務(wù),數(shù)據(jù)庫(kù)操作系統(tǒng)必須確保這些操作的原子性、一致性、隔離性、持久性。
1.原子性(Atomicity)
事務(wù)的原子性是指事務(wù)中包含的所有操作要么全做,要么不做,也就是說所有的活動(dòng)在數(shù)據(jù)庫(kù)中要么全部反映,要么全部不反映,以保證數(shù)據(jù)庫(kù)的一致性。
2.一致性(Consistency)
事務(wù)的一致性是指數(shù)據(jù)庫(kù)在事務(wù)操作前和事務(wù)處理后,其中數(shù)據(jù)必須滿足業(yè)務(wù)的規(guī)則約束。事務(wù)執(zhí)行的結(jié)果必須是使數(shù)據(jù)庫(kù)從一個(gè)一致性狀態(tài)變到另一個(gè)一致性狀態(tài)。
3.隔離性(Isolation)
隔離性是指數(shù)據(jù)庫(kù)允許多個(gè)并發(fā)的事務(wù)同時(shí)對(duì)其中的數(shù)據(jù)進(jìn)行讀寫或修改的能力,隔離性可以防止多個(gè)事務(wù)的并發(fā)執(zhí)行時(shí),由于它們的操作命令交叉執(zhí)行而導(dǎo)致數(shù)據(jù)的不一致性。
4.持久性(durability)
事務(wù)的持久性也稱永久性,是指一個(gè)事務(wù)一旦提交,它對(duì)數(shù)據(jù)庫(kù)中數(shù)據(jù)的改變就應(yīng)該是永久性的。接下來的其他操作不應(yīng)該對(duì)其執(zhí)行結(jié)果有任何影響。即便是系統(tǒng)在遇到故障的情況下也不會(huì)丟失,這是數(shù)據(jù)的重要性決定的。
在Oracle數(shù)據(jù)庫(kù)中,沒有提供開始事務(wù)處理語(yǔ)句,所有的事務(wù)都是隱式開始的,也就是在Oracle中,用戶不可以顯示使用命令來開始一個(gè)事務(wù)。oracle任務(wù)第一條修改數(shù)據(jù)庫(kù)的語(yǔ)句,或者一些要求事務(wù)處理的場(chǎng)合都是事務(wù)的隱式開始。但是當(dāng)用戶想要終止一個(gè)事務(wù)處理時(shí),必須顯示使用commit和rollback語(yǔ)句結(jié)束。
根據(jù)事務(wù)ACID屬性,Oracle提供了如下的事務(wù)控制語(yǔ)句:
(一)Set transaction設(shè)置事物屬性
set transaction語(yǔ)句可用來設(shè)置事物的各種屬性。該語(yǔ)句必須放在事務(wù)處理的第一個(gè)語(yǔ)句。也就是說,必須在任何insert、update、delete語(yǔ)句以及其他的事務(wù)處理。
Set transaction的語(yǔ)句可以讓用戶對(duì)事務(wù)的以下屬性進(jìn)行設(shè)置:
1.指定事務(wù)的隔離層
2.規(guī)定回滾事務(wù)所使用的存儲(chǔ)空間
3.命名事務(wù)
值得注意的一點(diǎn)是:set transaction只對(duì)當(dāng)前事務(wù)有效;事務(wù)終止,事務(wù)當(dāng)前的設(shè)置將會(huì)失效。
(二)Set constrains設(shè)置事物的約束模式
約束模式是指:在事務(wù)中修改數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)中的約束立即應(yīng)用于數(shù)據(jù),還是將約束推遲到當(dāng)前事務(wù)結(jié)束后應(yīng)用。
(三)Comm it提交事務(wù)對(duì)數(shù)據(jù)庫(kù)的操作做持久的保存
(四)Ro llback回滾事務(wù)取消對(duì)數(shù)據(jù)庫(kù)所作的任何操作
(五)Savepoint在事務(wù)中建立一個(gè)存儲(chǔ)的點(diǎn)。當(dāng)事務(wù)處理發(fā)生異常而回滾事務(wù)時(shí),可指定事務(wù)回滾到某存儲(chǔ)點(diǎn),然后從該存儲(chǔ)點(diǎn)重新執(zhí)行。
(六)Release savepoint刪除存儲(chǔ)點(diǎn)
回滾的含義是撤銷一個(gè)未提交事務(wù)中已執(zhí)行的SQL語(yǔ)句對(duì)數(shù)據(jù)的修改。Oracle使用undo tablespace(或rollback segment)來存儲(chǔ)被修改的數(shù)據(jù)的原始值。而redo log內(nèi)則保存了對(duì)數(shù)據(jù)修改操作的記錄。
用戶可以回滾整個(gè)未提交事務(wù)。除此之外,用戶還可以部分回滾未提交事務(wù),即從事務(wù)的最末端回滾到事務(wù)中任意一個(gè)被稱為保存點(diǎn)的標(biāo)記處。
通過本文的分析,可以看到事務(wù)從開始到結(jié)束的完整過程,事務(wù)處理技術(shù)是數(shù)據(jù)管理系統(tǒng)的重要組成部分,如何正確合理的應(yīng)用以保證數(shù)據(jù)庫(kù)的安全性和完整性還需要每個(gè)使用者認(rèn)真的研究。
[1]王珊,薩師煊.數(shù)據(jù)庫(kù)系統(tǒng)概論(第四版).北京:高等教育出版社,2006.
[2]《國(guó)家人力資源和社會(huì)保障部、國(guó)家工業(yè)和信息化部信息專業(yè)技術(shù)人才知識(shí)更新工程(“653工程”)指定教材》叢書編委會(huì).Oracle數(shù)據(jù)庫(kù)管理與應(yīng)用教程.北京:中國(guó)電力出版社,2009.
[3]鄭阿奇.Oracle實(shí)用教程.北京:電子工業(yè)出版社,2007.