ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 关于nolog和direct-path load的说明

关于nolog和direct-path load的说明

原创 Linux操作系统 作者:BTxigua 时间:2007-08-24 00:00:00 0 删除 编辑

把结论写在前面:

nologging选项在parallel提示下不能起到作用。

nologging选项只有在append提示下才能起到作用。

并且跟是否启用归档相关,具体如下

1)在归档模式下

只有将表设置为nologging,并且使用了append hints的语句才有nolog的作用。

2)在非归档模式下

将表设置为nologging+append hints,或者语句指定nologging+append hints,或者语句使用append hints,这3种情况都可以起到nolog的作用。


关于nologging和append的实验


首先我们在archivelog模式下来作这个实验。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 e:oracleora92RDBMS
最早的概要日志序列 12
下一个存档日志序列 14
当前日志序列 1

SQL> select count(*) from test;

COUNT(*)
----------
198

SQL> create table test1 as select * from test where 1=2 ;

表已创建。

SQL> create table test2 as select * from test where 1=2 ;

表已创建。

SQL> create table test3 as select * from test where 1=2 ;

表已创建。

SQL> create table test4 as select * from test where 1=2 ;

表已创建。

SQL> create table test5 nologging as select * from test where 1=2 ;

表已创建。

SQL> alter table test4 nologging;

表已更改。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statname.statistic# and v$statname.name = 'redo size';

VALUE
----------
441444

SQL> insert into test1 select * from test nologging ;

已创建198行。

SQL> commit;

提交完成。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statname.statistic# and v$statname.name = 'redo size';

VALUE
----------
495100 -- redo size : 53656

SQL> insert /*+ APPEND */ into test2 nologging select * from test;

已创建198行。

SQL> commit;

提交完成。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statname.statistic# and v$statname.name = 'redo size';

VALUE
----------
556112 --redo size: 61012

SQL> alter session enable parallel dml;

会话已更改。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
556112

SQL> insert /*+parallel(test3)*/ into test3 nologging select * from test ;

已创建198行。

SQL> commit;

提交完成。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
609784 -- redo size:53672


SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
609784

SQL> insert into test4 select * from test ;

已创建198行。

SQL> commit;

提交完成。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
663456 -- redo size:53672

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
708700

SQL> insert /*+append*/ into test5 select * from test;

已创建198行。

SQL> commit;

提交完成。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
711840 -- redo size:3140

这上面的实验是在archivelog模式下作的。从上面的实验,我们可以得出的结论是:
archivelog模式下,将表设置为logging模式,则同时指定nologging和append也起不到nolog的作用。
将表设置为nologging模式,在指定append的模式下,可以起到nolog的作用,在归档模式下,也只有这种情况下是nolog的。


再看一下noarchivelog模式下的情况
SQL> alter database noarchivelog ;

数据库已更改。

SQL>
SQL> alter database open ;

数据库已更改。

SQL>
SQL> conn xigua/xigua ;
已连接。
SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
1364
SQL> insert into test1 select * from test ;

已创建198行。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statn
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
55048 -- redo size:53684

SQL> insert /*+append */ into test1 select * from test;

已创建198行。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statn
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
57248 -- redo size:2200

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
108908

SQL> insert into test1 select * from test nologging ;

已创建198行。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statname.statistic# and v$statname.name = 'redo size';

VALUE
----------
162092 -- redo size:53184

SQL> alter table test2 nologging;

表已更改。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
165880

SQL> insert into test2 select * from test;

已创建198行。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
219564 --redo size :53684

SQL> insert /*+append*/ into test2 select * from test ;

已创建198行。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
221764 --redo size : 2200

SQL> commit;

提交完成。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
223052

SQL> insert into test2 select * from test nologging;

已创建198行。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
273364 -- redo size : 50312

SQL> commit;

提交完成。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
377288

SQL> insert /*+parallel(test2)*/ into test2 nologging select * from test ;

已创建198行。

SQL> select value from v$mystat, v$statname where v$mystat.statistic# = v$statna
me.statistic# and v$statname.name = 'redo size';

VALUE
----------
430500 redo size : 53212

总结:在非归档模式下,append都能起到nolog的作用。
但是parallel却不能起到nolog的作用。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10867315/viewspace-194836/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-31

  • 博文量
    101
  • 访问量
    313452