程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle數據庫基礎 >> ORACLE事務管理概述

ORACLE事務管理概述

編輯:Oracle數據庫基礎

在 Oracle 中一個事務(transaction)開始於首個可執行的 SQL 語句
(executable SQL statement)。可執行的 SQL 語句指產生了對實例(instance)
的調用(call)的 SQL 語句,包括 DML 和 DDL 語句。

當一個事務(transaction)開始時,Oracle 為此事務分配一個可用的撤銷表空
間(undo tablespace)來記錄其產生的回滾條目(rollback entry)。

一個事務(transaction)在滿足以下條件之一時結束:
用戶提交了 COMMIT 語句,或不包含 SAVEPOINT 子句的
   ROLLBACK 語句。
用戶執行了 CREATE,DROP,RENAME,或 ALTER 等 DDL 語句。
   果當前事務中包含 DML 語句,那麼 Oracle 首先提交(commit)此事
  務,然後將 DLL 語句作為一個只包含一條 SQL 語句的新事務運行並提
  交。
用戶斷開了與 Oracle 的連接。當前事務將被提交。
用戶進程異常結束。則當前事務被回滾(roll back)。

當一個事務(transaction)結束後,下一個可執行的 SQL 語句(executable
SQL statement)將會自動地開始一個新事務。

提示:
應用程序在退出時應該顯示地進行提交(commit)或回滾(roll
back)操作。

事務提交

提交(commit)一個事務(transaction)意味著將此事務中 SQL 語句對數據的修改永久地記錄到數據庫中。

在一個修改了數據的事務(transaction)被提交之前,Oracle進行了以下操
作:
● Oracle生成了撤銷信息(undo information)。撤銷信息包含了事務中
   各個 SQL 語句所修改的數據的原始值。
● Oracle在 SGA 的重做日志緩沖區(redo log buffer)中生成了重做日志
   條目(redo log entry)。重做日志記錄(redo log record)中包含了對數
  據塊(data block)和回滾塊(rollback block)所進行的修改操作。這些
  記錄可能在事務提交之前被寫入磁盤。
● 對數據的修改已經被寫入 SGA 中的數據庫緩沖區(database buffer)。
  這些修改可能在事務提交之前被寫入磁盤。

提示:
已提交事務(committed transaction)中對數據的修改被存儲在
SGA 的數據庫緩沖區(database buffer)中,她們不一定立即被
後台進程 DBWn 寫入數據文件(datafile)內。Oracle將選擇適當
的時機進行寫操作以保證系統的效率。因此寫操作既可能發生
在事務提交之前,也可能在提交之後。

事務回滾

回滾(rolling back)的含義是撤銷一個未提交事務(uncommitted transaction)
中已執行的 SQL 語句對數據的修改。Oracle使用撤銷表空間(undo
tablespace)(或回滾段(rollback segment))來存儲被修改的數據的原始
值。而重做日志(redo log)內則保存了對數據修改操作的記錄。

用戶可以回滾(roll back)整個未提交事務(uncommitted transaction)。除此
之外,用戶還可以部分回滾未提交事務,即從事務的最末端回滾到事務中任
意一個被稱為保存點(savepoint)的標記處。

以下各種類型回滾操作(rollback)的過程基本相同:
● 語句級回滾(tatement-level rollback)(由於語句執行錯誤或死鎖
(deadlock)造成)
● 回滾到一個保存點(savepoint)
● 依據用戶請求回滾一個事務(transaction)
● 由於進程異常終止而回滾一個事務
● 由於實例(instance)異常終止而回滾所有正在執行的事務
● 在數據庫恢復(recovery)過程中回滾不完整的事務

不考慮保存點(savepoint)而回滾(rolling back)整個事務(transaction)的過程如下:
1. Oracle使用相關撤銷表空間(undo tablespace)內的信息來撤銷事務內
所有 SQL 語句對數據的修改
2. Oracle釋放事務中使用的所有鎖
3. 事務結束

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved