Oracle 同步機制分兩層:Latch (閂鎖) 保護記憶體結構、**無佇列、瞬間得失**;Lock (鎖) 保護資料、**有佇列、可等待**。
SHARED POOL、LIBRARY CACHE、CACHE BUFFERS LRU CHAIN、CACHE BUFFERS CHAINS、REDO ALLOCATION、REDO COPY。latch free 等待事件。COMMIT/ROLLBACK 釋放。MAXTRANS 決定單塊最大並發交易數 (1~255)。ORA-00060。核心原則:**查詢啟動瞬間 (Query SCN) 看到的資料快照,不受後續變更影響**。Undo 段提供「時光機」。
| 場景 | 時序 | 讀取來源 | 關鍵判斷 |
|---|---|---|---|
| 大 SELECT、小 UPDATE | SELECT (SCN=101) 先啟動 UPDATE (SCN=102) 後提交 | Undo (Before Image) | SELECT 讀塊發現 SCN > 101 或有 ITL → 遞歸重構 Undo 至 SCN=101 |
| 大 UPDATE、小 SELECT | UPDATE (SCN=101) 先啟動 SELECT (SCN=102) 後啟動 | 當前塊 (若未被鎖) / Undo (若已被鎖) | SELECT 啟動時 UPDATE 未鎖定該塊 → 直接讀當前塊 |
| 大 UPDATE、小 UPDATE、SELECT | U1(101) → U2(102) 鎖行 A U1 等 U2 釋放 A S1(103) 讀行 B → Undo (U1 已鎖 B) U3(104) 改行 B → 死鎖 (U1 等 A、U3 等 B) | Undo / 死錯 | 證明 U1 已鎖行 B;死鎖自動解除 |
ORA-01555 Snapshot Too Old = Undo 被覆寫、無法重構 → 增加 Undo 保留時間/空間。