事務是又一系列語句構成的邏輯工作單元,通常是為了完成一定業務邏輯而將一條或者多條語句 “封裝” 起來,使它們與其他語句之間出現一個邏輯上的便捷,並形成相對獨立的一個工作單元。
一、事務概述
當使用事務修改多個數據表時,如果在處理的過程中出現了某種錯誤,例如系統死機或者出現其他等情況,則返回結果是全部數據均沒有被保存。
對事務處理的結果只有兩種:
一種是在事務處理的過程中,如果發生了某種錯誤則整個事務全部回滾,使所有對數據的修改全部撤銷,事務對數據庫的操作是單步執行的,當遇到錯誤時可以隨時地回滾;
另一種是如果沒有發生任何錯誤且每一步的執行都成功,則整個事務全部被提交。
從而可以看出,有效地使用事務不但可以提高數據的安全性,而且還可以增強數據的處理效率。
事務包含 4 種重要的屬性,被統稱為 ACID (原子性、一致性、隔離性和持久性),一個事務必須通過 ACID。
(1)原子性(Atomic): 事務是一個整體的工作單元,事務對數據庫所做的操作要么全部執行,要么全部取消。假如某條語句執行失敗,則所有語句全部回滾。
(2)一致性(ConDemoltent): 事務在完成時,必須使所有的數據都保持一致狀態。在相關的數據庫中,所有規則都必須應用於事務的修改,以保持所有數據的完整性。如果事務成功,則所有數 據將變成一個新的狀態;如果事務失敗,則所有數據將處於開始之前的狀態
(3)隔離性(Isolated): 由事務所作的修改必須與其他事務所作的修改隔離。事務查看數據時數據所處的狀態,要么是另一並發事務修改它之前的狀態,要么是另一事務修改它之后的狀態,事務 不會查看中間狀態的數據。
(4)持久性(Durability): 當事務提交后,對數據庫所做的修改就會永久保存下來。
二、操作事務
Oracle 11g 中的事務是隱式自動開始的,它不需要用戶顯示地執行開始事務語句。但對於事務的結束處理,則需要用戶進行指定的操作,通常在以下情況時, Oracle 認為一個事務結束了。
(1) 執行 commit 語句提交事務。
(2) 執行 rollback 語句撤銷事務。
(3) 執行一條數據定義語句,如果 create、drop 和 alter 等語句。如果該語句執行成功,那么 Oracle 系統會自動執行 commit 命令;否則, Oracle 系統會自動執行 rollback 命令。
(4) 執行一個數據控制語句,比如 grant、revoke 等控制命令,這種操作執行完畢, Oracle 系統會自動執行 commit 命令。
(5) 正常地斷開數據庫的連接、正常地退出 SQL*Plus 環境,則 Oracle 系統會自動執行 commit 命令;否則, Oracle 系統會自動執行 rollback 命令。
總結: Oracle 結束一個是事務歸根結底是那么執行 commit 命令,要么執行 rollback 命令。
1、提交事務(commit語句)
提交事務是指把堆數據庫進行的全部操作持久性地保存到數據庫中,這種操作使用 commit 語句來完成。在使用該語句提交事務時,Oracle 系統內部會安裝如下順序進行處理。
(1)在回滾段內記錄當前事務以提交,並且聲稱一個唯一的系統編號(SCN),並且聲稱一個唯一的系統編號(SCN),以唯一表示這個事務。
(2)啟動后台的日志文件寫入程序(LGWR),將 SGA 區的重做日志緩沖區中的數據和當前事務的 SCN寫入重做日志文件中。
(3) Oracle 服務器開始釋放事務處理所使用的系統資源。
(4) 顯示通知,告訴用戶事務以及成功提交。
2、回滾事務(Rollback語句)
回滾事務是指撤銷對數據庫進行的全部操作,Oracle 利用回滾段來存儲修改前的數據,通過重做日志來記錄對數據所做的修改。如果要回滾整個事務,Oracle 系統內部將會執行如下操作:
(1)使用回滾段中的數據撤銷對數據庫所做的修改。
(2)Oracle 后台服務進程釋放掉事務所使用的系統資源。
(3)顯示通知,告訴用戶事務成功回滾。
Oracle 不僅允許回滾整個未提交的事務,還允許回滾事務的一部分,可以通過設置“保存點” 來完成。在事務的執行過程中,用戶可以通過建立保存點講一個較長的失誤分隔為幾部分。這樣用戶就可以有選擇地回滾到某個保 存點,並且該保存點之后的操作都將被取消。