UNDO_RETENTION(單位:秒)指定**已提交交易的 UNDO 資料在 UNDO 表空間中至少保留的時間**。主要服務三大場景:
SHOW PARAMETER undo_;
NAME TYPE VALUE
-----------------------------------------
undo_management string AUTO -- 啟用 AUM
undo_tablespace string UNDOTBS1 -- 指定 UNDO 表空間
undo_retention integer 900 -- 預設 900 秒 (15 分鐘)
| 表空間屬性 | UNDO_RETENTION 行為 | 空間不足時 |
|---|---|---|
| 固定大小 (無 AUTOEXTEND) | **參數被忽略**,視同「最佳努力」 | 覆寫未過期 UNDO(可能導致 ORA-01555) |
| 啟用 AUTOEXTEND | **嘗試滿足** 保留時間,空間不足自動擴展 | 達 MAXSIZE 後始覆寫未過期 UNDO |
| 固定大小 + RETENTION GUARANTEE | **強制保證** 保留時間 | DML 直接報錯 ORA-30036,不覆寫 UNDO |
CREATE UNDO TABLESPACE undotbs_guar
DATAFILE '/u01/app/oracle/oradata/undotbs_guar01.dbf'
SIZE 500M AUTOEXTEND ON MAXSIZE 10G
RETENTION GUARANTEE;
-- 或事後修改既有表空間
ALTER TABLESPACE undotbs1 RETENTION GUARANTEE;
-- 取消保證
ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;
| 系統類型 | 建議保留時間 | 依據 |
|---|---|---|
| OLTP (高併發短交易) | 15 分鐘 (900s) | 最長查詢通常 < 15 分鐘 |
| 混合負載 | 1 小時 (3600s) | 兼顧報表查詢 |
| DSS / Data Warehouse | 3 小時 (10800s) | 長跑 ETL/報表查詢 |
| 需支援 24h 閃回查詢 | 24 小時 (86400s) | 業務需求導向 |
精確校準法: 查詢 V$UNDOSTAT.MAXQUERYLEN(近期最長查詢秒數),設定值 ≥ 該值。
ORA-30036),DDL 仍可執行UNDO_RETENTION 非單純參數,而是「保留期望」與「空間資源」的博弈。生產環境**強烈建議**:UNDO 表空間啟用 AUTOEXTEND + 設定合理 MAXSIZE + 關鍵業務啟用 RETENTION GUARANTEE,並配合 Undo Advisor 定期覆核空間大小,才能在「讀取一致性」、「閃回功能」與「DML 可用性」三者間取得平衡。