2011年5月6日金曜日

Oracle中可以nologging执行的操作

Oracle中可以nologging执行的操作

redo重做日志是Oracle数据库恢复(recovery)的基础;但在很多情况下可以通过禁用重做日志的产生来加速SQL语句的完成,也就是我们所说的可nologging化的操作,这些操作大多是或串行的或并行的数据载入。

普通的DML操作总是不能被nologging执行的,即:常规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),同时仅有少量的由数据字典变更引起的重做日志会产生。

0 件のコメント:

コメントを投稿