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

Oracle NOLOGGING 機制深度研究:哪些操作真正減少 Redo?

     編輯:Oracle 教學

Oracle NOLOGGING 機制深度研究:哪些操作真正減少 Redo?

設定 NOLOGGING 可大幅降低大量資料操作的 Redo 產生,但並非所有操作都受惠,且伴隨備份失效風險。本文整理實測結果。

支援 NOLOGGING 的操作清單

操作類型語法範例Redo 產生行為
索引建立/重建CREATE INDEX ... NOLOGGING
ALTER INDEX ... REBUILD NOLOGGING
極少 Redo (僅元數據)
直接路徑插入INSERT /*+ APPEND */ INTO ... SELECT ...
SQL*Loader DIRECT=TRUE
表資料極少 Redo,**但索引維護仍產生大量 Redo**
LOB 操作UPDATE ... SET lob_col = ... (SecureFiles)可選擇不產生 Redo
CTAS 建表CREATE TABLE t2 NOLOGGING AS SELECT * FROM t1極少 Redo
ALTER TABLE 移動/分割ALTER TABLE ... MOVE NOLOGGING
ALTER TABLE ... SPLIT PARTITION ... NOLOGGING
極少 Redo

不支援 NOLOGGING 的操作

  • 一般 DML (INSERT/UPDATE/DELETE 無 APPEND hint) → 永遠產生 Redo
  • 索引維護 (即使表 NOLOGGING,索引預設 LOGGING)
  • DDL 隱含操作 (如 TRUNCATE 仍產生少量 Redo)

實測對比:歸檔模式 vs 非歸檔模式

環境:Oracle 11.2.0.1,表 t1 約 7 萬列

-- 歸檔模式
SQL> @redo.sql  -- 查詢 session redo size
SQL> CREATE TABLE t2 AS SELECT * FROM t1;           -- redo +8.5M
SQL> CREATE TABLE t3 NOLOGGING AS SELECT * FROM t1; -- redo +0.15M (顯著減少)

-- 非歸檔模式
SQL> @redo.sql
SQL> CREATE TABLE t4 AS SELECT * FROM t1;           -- redo +0.19M
SQL> CREATE TABLE t5 NOLOGGING AS SELECT * FROM t1; -- redo +0.10M (差異微小)

結論

在 非歸檔模式 下,Oracle 已自動最小化上述操作的 Redo,NOLOGGING 關鍵字效果有限;歸檔模式 下效果顯著。

核心原理:為什麼這些操作能減少 Redo?

所有支援 NOLOGGING 的操作共同特徵:產生全新的資料區塊,或完整覆寫舊區塊。

  • INSERT APPEND:直接在 High Water Mark 以上寫入新區塊。
  • CTAS/MOVE:分配新區塊,寫入完整資料。
  • LOB 更新:永遠在新區塊寫入新版本。

反之,一般 DML 可能只修改區塊內部分位元組,必須記錄前後映像以支援恢復。

風險與最佳實踐

風險影響緩解措施
備份失效RMAN 備份包含 NOLOGGING 操作的資料檔,恢復時該段資料損壞操作後立即執行 Level 0 備份;或啟用 FORCE LOGGING (資料庫/表空間層級)
Data Guard 同步中斷備庫無法應用 NOLOGGING 變更,導致備庫資料不一致主庫操作後手動同步受影響資料檔;或使用 ALTER DATABASE FORCE LOGGING
索引 Redo 仍大表 NOLOGGING 但索引預設 LOGGING索引同步建立 NOLOGGING,或操作後 REBUILD NOLOGGING

建議策略

  1. 資料倉儲/ETL 窗口:啟用 NOLOGGING + APPEND,窗口結束後立即 Level 0 備份。
  2. 核心 OLTP 系統:禁用 NOLOGGING,啟用 FORCE LOGGING 保護備份恢復能力。
  3. 大表維護:ALTER TABLE ... MOVE NOLOGGING 後緊接 ALTER INDEX ... REBUILD NOLOGGING + 備份。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved