Oracle中可以nologging执行的操作

Posted 一个勤奋的胖子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中可以nologging执行的操作相关的知识,希望对你有一定的参考价值。

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),同时仅有少量的由数据字典变更引起的重做日志会产生。

以上是关于Oracle中可以nologging执行的操作的主要内容,如果未能解决你的问题,请参考以下文章

oracle常规操作

oracle dataguard 之nologing

oracle nologging用法(转)

Oracle NoLogging Append 方式减少批量insert的redo_size

oracle nologging 有啥用

Oracle中append与Nologging