事務是又一系列語句構成的邏輯工做單元,一般是爲了完成必定業務邏輯而將一條或者多條語句 「封裝」 起來,使它們與其餘語句之間出現一個邏輯上的便捷,並造成相對獨立的一個工做單元。數據庫
當使用事務修改多個數據表時,若是在處理的過程當中出現了某種錯誤,例如系統死機或者出現其餘等狀況,則返回結果是所有數據均沒有被保存。安全
對事務處理的結果只有兩種:服務器
一種是在事務處理的過程當中,若是發生了某種錯誤則整個事務所有回滾,使全部對數據的修改所有撤銷,事務對數據庫的操做是單步執行的,當遇到錯誤時能夠隨時地回滾;併發
另外一種是若是沒有發生任何錯誤且每一步的執行都成功,則整個事務所有被提交。spa
從而能夠看出,有效地使用事務不但能夠提升數據的安全性,並且還能夠加強數據的處理效率。日誌
事務包含 4 種重要的屬性,被統稱爲 ACID (原子性、一致性、隔離性和持久性),一個事務必須經過 ACID。進程
(1)原子性(Atomic): 事務是一個總體的工做單元,事務對數據庫所作的操做要麼所有執行,要麼所有取消。假如某條語句執行失敗,則全部語句所有回滾。事務
(2)一致性(ConDemoltent): 事務在完成時,必須使全部的數據都保持一致狀態。在相關的數據庫中,全部規則都必須應用於事務的修改,以保持全部數據的完整性。若是事務成功,則全部數 據將變成一個新的狀態;若是事務失敗,則全部數據將處於開始以前的狀態
資源
(3)隔離性(Isolated): 由事務所做的修改必須與其餘事務所做的修改隔離。事務查看數據時數據所處的狀態,要麼是另外一併發事務修改它以前的狀態,要麼是另外一事務修改它以後的狀態,事務 不會查看中間狀態的數據。it
(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 命令。
一、提交事務(commit語句)
提交事務是指把堆數據庫進行的所有操做持久性地保存到數據庫中,這種操做使用 commit 語句來完成。在使用該語句提交事務時,Oracle 系統內部會安裝以下順序進行處理。
(1)在回滾段內記錄當前事務以提交,而且聲稱一個惟一的系統編號(SCN),而且聲稱一個惟一的系統編號(SCN),以惟一表示這個事務。
(2)啓動後臺的日誌文件寫入程序(LGWR),將 SGA 區的重作日誌緩衝區中的數據和當前事務的 SCN寫入重作日誌文件中。
(3) Oracle 服務器開始釋放事務處理所使用的系統資源。
(4) 顯示通知,告訴用戶事務以及成功提交。
二、回滾事務(Rollback語句)
回滾事務是指撤銷對數據庫進行的所有操做,Oracle 利用回滾段來存儲修改前的數據,經過重作日誌來記錄對數據所作的修改。若是要回滾整個事務,Oracle 系統內部將會執行以下操做:
(1)使用回滾段中的數據撤銷對數據庫所作的修改。
(2)Oracle 後臺服務進程釋放掉事務所使用的系統資源。
(3)顯示通知,告訴用戶事務成功回滾。
Oracle 不只容許回滾整個未提交的事務,還容許回滾事務的一部分,能夠經過設置「保存點」 來完成。在事務的執行過程當中,用戶能夠經過創建保存點講一個較長的失誤分隔爲幾部分。這樣用戶就能夠有選擇地回滾到某個保 存點,而且該保存點以後的操做都將被取消。