当前位置:  数据库>oracle

Oracle DML NOLOGGING

    来源: 互联网  发布时间:2017-04-05

    本文导语:  在对大表插入数据的时候,经常会用到nologging 选项。Nologging 并不是不产生redo,nologging  +  direct 只是不会对数据产生 redo(但依然有其他的redo)。 同理 logging +  direct 下 undo 也是大大地减少, 减少的是 数据的undo ...

在对大表插入数据的时候,经常会用到nologging 选项。Nologging 并不是不产生redo,nologging  +  direct 只是不会对数据产生 redo(但依然有其他的redo)。

同理 logging +  direct 下 undo 也是大大地减少, 减少的是 数据的undo , ,就如同 redo的减少也一样,是  ,这和数据库是否产生  redo 和 undo 是不同的概念,比如空间分配的 redo and undo ,这就不是数据本身的变化。

 

对于nologging 和 logging模式,只有使用 append,才不会对数据生成redo。 

只有将表置于nologging 模式,并且使用append 才不会对数据生成redo. 



column OLD_VALUE new_value OLD_VALUE
select value OLD_VALUE
from v$mystat, v$statname
where v$mystat.statistic# = v$statname.statistic#
and v$statname.name = ''redo size'';


select (value - &OLD_VALUE) OLD_VALUE
from v$mystat, v$statname
where v$mystat.statistic# = v$statname.statistic#
and v$statname.name = ''redo size'';

 


SQL> archive log list

数据库日志模式            存档模式

自动存档             启用

存档终点            d:/archivelog

最早的联机日志序列     125

下一个存档日志序列   127

当前日志序列           127




SQL> @?/new.sql

 OLD_VALUE

----------

   8535492
SQL> create table T_NOLOG  as select * from all_objects;

表已创建。
SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -    8535492) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

     83496


SQL> @?/new.sql

 OLD_VALUE

----------

   8618988

SQL> create table T_LOGas select * from all_objects;

表已创建。
SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -    8618988) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

   8491836


通过上面的2个例子,可以看出用nologging 创建表,不会对数据生成redo,仅对数据字典生成redo. 






SQL> @?/new.sql

 OLD_VALUE

----------

  17110824
SQL> DELETE FROM T_NOLOG;

已删除71711行。
SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -   17110824) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

  26592364




SQL> @?/new.sql

 OLD_VALUE

----------

  43703188

SQL> DELETE FROM T_LOG;

 

已删除71712行。

SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -   43703188) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

  26592560







SQL> @?/new.sql

 OLD_VALUE

----------

  70295748

SQL> INSERT INTO T_NOLOG SELECT * FROM ALL_OBJECTS;

已创建71712行。

SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -   70295748) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

   8169900





SQL> @?/new.sql

 OLD_VALUE

----------

  78465648

SQL> INSERT INTO T_LOG SELECT * FROM ALL_OBJECTS;

已创建71712行。

SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -   78465648) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

   8169796







SQL> @?/new.sql

 OLD_VALUE

----------

  86635444

SQL> UPDATE T_NOLOG  SET OBJECT_ID=1;

已更新71712行。

SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -   86635444) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

  24323896





SQL> @?/new.sql

 OLD_VALUE

----------

 110959340

SQL> UPDATE T_LOG SET OBJECT_ID=1;

已更新71712行。

SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -  110959340) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

  36490988




 insert/update/delete 的DML 操作,在logging和nologging上没有区别
   






SQL> @?/new.sql

 OLD_VALUE

----------

 147450328

SQL> INSERT INTO T_NOLOG SELECT * FROM ALL_OBJECTS;

已创建71712行。

SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -  147450328) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

   8325816



SQL> @?/new.sql

 OLD_VALUE

----------

 155776144

SQL>  INSERT /*+ APPEND */ INTO T_NOLOG  SELECT * FROM ALL_OBJECTS;

已创建71712行。

SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -  155776144) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

     14852








SQL> @?/new.sql

 OLD_VALUE

----------

 155790996

SQL>  INSERT /*+ APPEND */ INTO T_LOG SELECT * FROM ALL_OBJECTS;

已创建71712行。

SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -  155790996) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

   8406068




将表改为nologging 模式,在查看 


SQL> @?/new.sql

 OLD_VALUE

----------

 164200200

SQL>  INSERT /*+ APPEND */ INTO T_LOG SELECT * FROM ALL_OBJECTS;

已创建71712行。

SQL> @?/diff

原值    1: select (value - &OLD_VALUE) OLD_VALUE from v$mystat, v$statname where

新值    1: select (value -  164200200) OLD_VALUE from v$mystat, v$statname where

 OLD_VALUE

----------

     15012

注:REDO SIZE=27956

通过实验看出,

对于logging 模式, 使用append hint 在生成redo 上没有什么变化

对于nologging模式,使用append hint 对数据没有生成redo,仅对数据字典生成了redo.


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3