遇到第一條可執行 SQL 陳述式 (DML: INSERT/UPDATE/DELETE/MERGE; DDL: CREATE/ALTER/DROP) 時隱式啟動。隱式交易無需 BEGIN。
-- 交易層級 (僅影響當前交易)
SET TRANSACTION ISOLATION LEVEL READ COMMITTED; -- 預設
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION READ ONLY;
SET TRANSACTION READ WRITE;
-- Session 層級 (影響後續所有交易)
ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLE;
ALTER SESSION SET ISOLATION_LEVEL = READ COMMITTED;
| 等級 | 髒讀 | 不可重複讀 | 幻讀 | Oracle 實作 |
|---|---|---|---|---|
| READ COMMITTED | ❌ | ✅ | ✅ | Statement-level 讀一致性 (預設) |
| SERIALIZABLE | ❌ | ❌ | ❌ | Transaction-level 讀一致性 |
| READ ONLY | ❌ | ❌ | ❌ | 僅查詢,SCN 固定於交易開始 |
READ COMMITTED:每個 SQL 陳述式執行時刻取得當前 SCNSERIALIZABLE / READ ONLY:交易第一條 SQL 執行時刻取得 SCN,全交易共用查詢 SCN = 10023
FOR 每個需求資料塊:
IF 資料塊.SCN <= 10023:
直接讀取 (版本足夠舊)
ELSE:
從 Undo Segment 取得該塊 SCN <= 10023 的前像版本
(若 Undo 已被覆寫 → ORA-01555 Snapshot too old)
END
結果:查詢**只看見**在其 SCN 前已提交的修改;**不看見**未提交修改 (髒讀)、**不看見** SCN 後提交的修改 (不可重複讀/幻讀)。
-- 指定當前交易使用特定回滾段
SET TRANSACTION USE ROLLBACK SEGMENT rbs_01;
適用場景:大量載入作業獨享大型回滾段,避免影響線上交易。
V$TRANSACTION、V$ROLLSTAT 追蹤交易活躍度與 Undo 壓力。UNDO_RETENTION 保障長查詢一致性。