redo重做日志是Oracle數據庫恢復(recovery)的基礎;但在很多情況下可以通過禁用重做日志的產生來加速SQL語句的完成,也就是我們所說的可nologging化的操作,這些操作大多是或串行的或並行的數據載入。
那么哪些操作是允許被nologging化的呢?首先需要注意的是普通的DML操作,即:常規insert,update,和delete(以及merge)總是不能被nologging執行的。但以下SQL語句則可以以nologging選項執行:
- direct load (SQL*Loader)
- direct load INSERT (using APPEND hint)
- CREATE TABLE … AS SELECT
- CREATE INDEX
- ALTER TABLE … MOVE PARTITION
- ALTER TABLE … SPLIT PARTITION
- ALTER INDEX … SPLIT PARTITION
- ALTER INDEX … REBUILD
- ALTER INDEX … REBUILD PARTITION
- INSERT, UPDATE, and DELETE on LOBs in NOCACHE NOLOGGING mode stored out of line
以上列出的語句,其產生undo和redo重做日志幾乎可以完全禁絕。因為都是數據載入語句(或者裝載索引)其所產生的新的區間(new extent)在執行過程中被標記為無效的(invalid),同時僅有少量的由數據字典變更引起的重做日志會產生。