首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle NOLOGGING 操作詳解:減少 Redo 產生,大幅提升大量資料載入效能

     編輯:Oracle 資料庫相關知識

Redo Log 是 Oracle 恢復機制的基石,但大量資料載入時,Redo 產生會成為效能瓶頸。Oracle 提供 NOLOGGING 選項,讓特定 DDL 與直接載入操作跳過 Redo 產生(僅記錄最少元資料),大幅提升速度。本文整理所有支援 NOLOGGING 的操作類型、使用限制與風險控制。

一、核心原理

  • 一般 DML (INSERT/UPDATE/DELETE) 無法 禁止 Redo,這是 ACID 基礎
  • 特定 DDL 與直接路徑載入可指定 NOLOGGING,新分配的 Extent 標記為 Invalid(無 Redo 保護)
  • 操作完成後,必須立即備份受影響資料檔,否則媒體故障將導致資料永久遺失

二、支援 NOLOGGING 的操作完整清單

操作類型語法範例說明
建表即查詢 (CTAS)CREATE TABLE t2 NOLOGGING AS SELECT * FROM t1;新表初始載入不產生 Redo
建立索引CREATE INDEX idx_t_col NOLOGGING ON t(col);索引建立過程不記 Redo
直接路徑載入 (SQL*Loader)sqlldr ... DIRECT=TRUE繞過 SQL 層直接寫入資料塊
直接路徑 INSERT (APPEND Hint)INSERT /*+ APPEND */ INTO t SELECT * FROM src;高水位線以上直接寫入,需表設 NOLOGGING
分區移動ALTER TABLE t MOVE PARTITION p1 NOLOGGING;分區重組
分區分割ALTER TABLE t SPLIT PARTITION p1 ... NOLOGGING;分區拆分
索引分割ALTER INDEX idx SPLIT PARTITION ... NOLOGGING;索引分區拆分
索引重建ALTER INDEX idx REBUILD NOLOGGING;整體或分區重建
索引分區重建ALTER INDEX idx REBUILD PARTITION p1 NOLOGGING;局部重建
LOB 操作 (NOCACHE NOLOGGING)INSERT/UPDATE/DELETE ON LOB ... STORE AS (NOCACHE NOLOGGING)行外儲存的 LOB 欄位

三、關鍵前置條件

-- 1. 表/索引/分區必須設定 NOLOGGING 屬性
ALTER TABLE t NOLOGGING;
ALTER INDEX idx NOLOGGING;

-- 2. 直接路徑 INSERT 需滿足條件:
--    - 表設定 NOLOGGING
--    - 使用 APPEND Hint (或 PARALLEL DML)
--    - 無觸發器、外鍵、檢查約束
--    - 非叢集表、非物化視圖

四、風險與最佳實踐

風險場景後果對策
NOLOGGING 操作後發生媒體故障受影響 Extent 無 Redo 可恢復,資料永久遺失操作緊接執行 資料檔層級備份 (RMAN BACKUP DATAFILE)
Data Guard 環境主庫 NOLOGGING 導致備庫對應區塊標記損壞啟用 FORCE LOGGING 模式,或備庫執行 RMAN RECOVER ... NONLOGGED BLOCK
閃回資料庫無法閃回 NOLOGGING 操作期間的變更評估是否接受該時間窗不可閃回

五、驗證 NOLOGGING 生效

-- 查看表/索引/分區的 LOGGING 屬性
SELECT table_name, logging FROM user_tables WHERE table_name = 'T';
SELECT index_name, logging FROM user_indexes WHERE index_name = 'IDX_T';
SELECT partition_name, logging FROM user_tab_partitions WHERE table_name = 'T';

-- 操作前後對比 Redo 產生量
SELECT name, value FROM v$sysstat WHERE name = 'redo size';

NOLOGGING 是大量資料初載、索引重建、分區維護的利器,但必須配合嚴格的備份策略與 Data Guard 保護模式。切記:無備份的 NOLOGGING 等於裸奔。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved