什麼是資料庫事務?
事務是資料庫操作的邏輯工作單元,必須滿足 ACID 四大特性:
- 原子性:要麼全做,要麼全不做
- 一致性:事務前後資料完整性約束保持一致
- 隔離性:並發事務互不干擾
- 持久性:提交後的修改永久生效
為什麼需要事務?
兩大核心場景:
- 保證一致性:如銀行轉賬(扣款+入賬必須同時成敗)、主從表同步更新
- 並發隔離:防止髒讀、不可重複讀、幻讀等併發異常
SQL Server 2008 三種事務模式
| 模式 | 啟動方式 | 提交/回滾 | 特點 |
| 自動提交 | 預設,單條語句即一事務 | 語句結束自動提交 | 無需手動控制,適合簡單操作 |
| 顯式事務 | BEGIN TRANSACTION | COMMIT/ROLLBACK | 完全手動控制,靈活性最高 |
| 隱式事務 | SET IMPLICIT_TRANSACTIONS ON | 需手動 COMMIT/ROLLBACK | 語句執行時自動開啟,下一條語句再開新事務 |
Oracle 事務模式與實現原理
事務模式
Oracle 採用隱式事務模式:首條可執行 SQL 自動開啟事務,必須顯式 COMMIT 或 ROLLBACK 結束。DDL 語句會自動提交當前事務。
邏輯實現:Undo Tablespace
- Undo Segment 儲存修改前的舊值(Undo Data)
- 支援:回滾、長時間查詢一致性讀、Flashback 查詢、失敗事務恢復
一致性讀範例:事務 A 長時間查詢表 T,事務 B 修改並提交某行,事務 A 仍讀到修改前的舊值(從 Undo 讀取快照),實現「讀不阻塞寫,寫不阻塞讀」。
物理實現:Redo Log Buffer + LGWR
- 修改操作在記憶體中記錄 Redo Entry(rowid、舊值、新值),寫入 Redo Log Buffer
- 提交時,LGWR 進程 將 Redo Log Buffer 線性寫入 Redo Log File,生成 SCN,通知提交完成
- 資料檔案的實際更新由 DBWR 在 Checkpoint 時批量異步寫入
優勢:順序寫入 Redo Log 遠快於隨機寫入資料檔,大幅提升提交性能;恢復時通過 Redo Log 重放即可。
初學者實戰建議
- 心態上:事務不是神秘黑盒,而是約束與同步機制;優先從業務設計角度解決問題(如避免超長查詢、縮小事務範圍)
- 技術上:熟記差異——SQL Server 預設自動提交,Oracle 預設隱式需手動提交
- 編碼上:事務嵌套必須一一對應,異常處理中務必確保事務正確結束
總結
理解兩大資料庫的事務模式差異與底層實現,能幫助開發者寫出更健壯、高效的資料訪問代碼。Oracle 的 Undo/Redo 機制是其高併發、高可用的基石;SQL Server 的多種事務模式則提供了靈活的控制粒度。