首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 交易生命週期深度解析:從啟動到提交/回滾的內部運作

     編輯:Oracle 資料庫基礎

交易是資料庫一致性的基本單位。本文依 Oracle 官方文件與實務經驗,詳細拆解交易啟動條件、Undo 分配、提交/回滾觸發點、Commit 內部四階段動作與鎖釋放時機。

1. 交易何時開始?

第一條可執行 SQL(DML 或 DDL)隱式啟動交易。

2. 交易開始後 Oracle 做了什麼?

分配可用 Undo 表空間或回滾段,記錄回滾入口(新交易槽)。

3. 交易何時結束?

  • COMMIT 或 ROLLBACK(僅單字 ROLLBACK)。
  • DDL 語句隱式提交(CREATE/ALTER/DROP 等)。
  • 使用者斷開連線(依 AUTOCOMMIT 設定自動提交)。
  • 使用者程序異常終止(強制回滾)。

4. COMMIT 內部四階段動作

  1. 生成回滾資訊:在 SGA 回滾段緩衝區建立舊值快照。
  2. 生成 Redo 記錄:在 Redo Log Buffer 記錄資料塊與回滾塊變更。
  3. 寫入資料緩衝區:變更標記在 Dirty Buffer,由 DBWn 依 LRU 非同步寫入磁碟(Commit 前可能已落盤)。

Commit 瞬間:

  1. 回滾段標記提交、分配 SCN 並記錄。
  2. LGWR 將 Redo Log Buffer 同步寫入 線上重做日誌檔,並寫入 SCN(關鍵:LGWR 寫入完成前 Commit 不返回)。
  3. 釋放列級/表級鎖。
  4. 標記交易結束。

關鍵啟示

  • Commit 耗時主要取決於 LGWR 寫入重做日誌延遲(I/O 子系統效能)。
  • 長交易會佔用 Undo 空間、增加快照過舊風險、阻塞其他交易。
  • DDL 隱式提交會中斷當前交易,謹慎在交易中穿插 DDL。

理解交易內部流程,有助於設計適當的交易邊界、優化 Commit 頻率、排查鎖爭用與一致性問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved