oracle nologging什么场景才能减少redo日志的产生

原创 2013年12月05日 14:53:00

先说一下,经过自己的测试,发现oracle为了满足recover的要求,nologging实际上很少能够起作用,网上也有很多这方面的资料和测试,本文为亲身测试,发现在自己需要的场景中nologging完全失效,特做记录,并到官网上查询了一下什么操作在指定nologging的属性下会较少redo的产生。

表tlog

 

表tnolog

 

两个表的定义

create table tlog (id number,namevarchar2(1000));

create table tnolog (id number,namevarchar2(1000)) nologging;

 

生成归档量查询语句:

CREATE OR REPLACE VIEW redo_size

AS

SELECT VALUE

FROM v$mystat, v$statname

WHERE v$mystat.statistic# = v$statname.statistic#

AND v$statname.NAME = 'redo size';

 

执行如下过程查看归档量

begin

  fori in 1..100000 loop

 insert into tlogvalues(i,'sdljfalsdjflasjdflsajdflkjasdlfkjasld;kfj'||i||'asjdfljssjd;lfja;sd'||i);

 commit;

  endloop;

 end;

/

执行前:

SQL> select * from sys.redo_size;

 

    VALUE

----------

2063355264

执行后:

SQL> select * from sys.redo_size;

 

    VALUE

----------

2119850312

redo生成:2119850312-2063355264=56495048

 

 

执行如下过程查看归档量

begin

  fori in 1..100000 loop

 insert into tnologvalues(i,'sdljfalsdjflasjdflsajdflkjasdlfkjasld;kfj'||i||'asjdfljssjd;lfja;sd'||i);

 commit;

  endloop;

 end;

/

执行前:

SQL> select * from sys.redo_size;

 

    VALUE

----------

2119850312

执行后:

SQL> select * from sys.redo_size;

 

    VALUE

----------

2176210336

redo生成:2176210336-2119850312=56360024

 

结论:

归档模式生成:  56495048

非归档模式生成:56360024

没什么区别

 

select table_name,logging from dba_tableswhere table_name in ('TLOG','TNOLOG');

TABLE_NAME  LOGGING

TLOG    YES

TNOLOG  NO

 

 

那物化视图的刷新呢:

创建物化视图日志:

create materialized view log on tlog withsequence,rowid;

 

准备数据:

truncate table tlog;

truncate table tnolog;

 

begin

  fori in 1..100000 loop

 insert into tlogvalues(i,'sdljfalsdjflasjdflsajdflkjasdlfkjasld;kfj'||i||'asjdfljssjd;lfja;sd'||i);

 commit;

  endloop;

 end;

/

 

查看mv log中的行数:

SQL> select count(*) from MLOG$_TLOG;

 

 COUNT(*)

----------

   100000

 

 

创建物化视图:

create materialized view  mv_tlog

BUILD DEFERRED

refresh fast on demand with rowid

as

select * from tlog;

 

create materialized view  mv_tnolog nologging

BUILD DEFERRED

refresh fast on demand with rowid

as

select * from tlog;

 

刷新查看归档量

刷新mv_tlog

SQL> select * from sys.redo_size;

 

    VALUE

----------

2419178948

 

exec dbms_mview.refresh('MV_TLOG','C');

 

SQL> select * from sys.redo_size;

 

    VALUE

----------

2440166340

生成归档量:    2440166340-2419178948=20987392

 

刷新mv_tnolog

SQL> select * from sys.redo_size;

 

    VALUE

----------

2440166340

 

exec dbms_mview.refresh('MV_TNOLOG','C');

 

SQL> select * from sys.redo_size;

 

    VALUE

----------

2461706932

 

生成归档量:    2461706932-2440166340=21540592

 

结论:

刷新logging的物化视图生成归档量        20987392

刷新nologging的物化视图生成归档量  21540592   

 

nologging不少反多,真是奇怪。

 

终极结论:

像网上说的一样,nologging是在归档模式下的append下才会减少归档生成,这个属性有什么用途真是让人摸不到头脑。

/*+ append */

 

http://blog.csdn.net/linminqin/article/details/6602476

最后边有一个结论。

数据库模式

表模式

插入模式

REDO生成

ARCHIVELOG

LOGGING

APPEND

REDO

NO APPEND

REDO

NOLOGGING

APPEND

REDO

NO APPEND

REDO

NOARCHIVELOG

LOGGING

APPEND

REDO

NO APPEND

REDO

NOLOGGING

APPEND

REDO

NO APPEND

REDO

 

可惜物化视图的刷新不能使用append,一切幻想就成泡沫了。

 

哪些货语句可以减少redo,看mos上的说法:

                                                                     

9876

    

 

Doc ID

 

        

How to Avoid Generation of Redolog Entries (Doc ID    188691.1)

To Bottom

        

 
 

Modified:02-Mar-2013Type:HOWTO        

            

            

            

            

    

***Checked for relevance on 25-Jul-2010***
 
·         goal: How to Avoid Generation of Redolog Entries
·          
·         fact: Oracle Server - Enterprise Edition 8.1
·          
·         fact: Oracle Server - Enterprise Edition 9.0.1
·          
·         fact: Oracle Server - Enterprise Edition 9.2
·          
·         fact: Oracle Server - Enterprise Edition 10.1
·          
·         fact: Oracle Server - Enterprise Edition 10.2
·          
·         fact: Oracle Server - Enterprise Edition 11.1
·          
·         fact: Oracle Server - Enterprise Edition 11.2
·          
 
fix:
 
The option NOLOGGING valid since Oracle8 can be used to avoid 
the redolog entries generation for a certain operation, 
that can be easily recovered without using the database 
recovery mechanism.

The following operations can make use of nologging mode: 
 
- direct load (SQL*Loader) 
- direct-load INSERT 
- 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 /*+APPEND*/ INTO 

AS    SELECT ... - INSERT, UPDATE, and DELETE on LOBs in NOCACHE NOLOGGING mode    stored out of line References: Oracle8i Concepts Manual Oracle8i SQL    Reference Oracle9i Concepts Manual Oracle9i SQL Reference Current version:    Oracle® Database SQL Language Reference 11g Release 2 (11.2)

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

 

 

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

原表是nologging,为什么create table.. as select还是有redo log产生?

原表是nologging,为什么create table.. as select还是有redo log产生?数据库版本是9.0.2.1原表是test,nologging属性. 然后运用create t...
  • outget1
  • outget1
  • 2009年09月11日 10:29
  • 4414

ORACLE 10g append跟nologging插入对REDO的影响

/*+append*/  1.  append 属于direct insert,归档模式下append+table nologging会大量减少日志,    非归档模式append会大量减少日志,ap...
  • cnham
  • cnham
  • 2010年04月14日 20:13
  • 5209

在线更改undo和redo的路径,以便减少io的争用

author:skatetime:2009/08/27 在线更改undo和redo的路径,以便减少io的争用  为了降低系统的io,在线最好,最直接,最简单就是把一部分io分担到其他的磁盘,由于是在线...
  • wyzxg
  • wyzxg
  • 2009年08月27日 14:41
  • 3553

Oracle抑制日志(NOLOGGING)

从新学习数据库, 先从Oracle开始了,今天看到了日志文件的这块。参考了众多的书记和网上资料。从Oracle 7开始,支持对某些操作抑制其日志的生成。用于抑制日志的关键字尾UNRECOVERABL...
  • u010773808
  • u010773808
  • 2013年09月03日 20:38
  • 717

临时表真的不生成redo日志吗?

澄清大家一个常见的错误:临时表是否产生redo 临时表本身的操作并不产生redo,但是在临时表中处理数据时,是要产生undo的,而undo是要产生redo的,但相比较普通表要少很多。 [oracl...
  • zhuxiaoliao
  • zhuxiaoliao
  • 2014年11月07日 14:29
  • 418

【优化批量插入】nologging和append使用解析

Nologging 更改表的日志记录方式 Alter table table_name nologging; Alter table table_name logging; 数据库和表空间也可...
  • wang1016612067
  • wang1016612067
  • 2016年10月08日 22:18
  • 548

实验: Oracle中表shrink与move产生redo日志比较

1 move时实验 SQL> create table my_objects_move tablespace ASSM as select * from all_objects where rown...
  • huang_xw
  • huang_xw
  • 2011年11月27日 11:50
  • 3050

Oracle物化视图定时全量刷新导致归档日志骤增

转载自 http://www.th7.cn/db/Oracle/201210/22707.shtml 可以发现:   1、全量刷新时,将产生较多的REDO,以上面的情况为例,如果该物化视图每5分钟刷新...
  • u010395242
  • u010395242
  • 2015年05月08日 10:37
  • 243

Corrupt block 常见处理方法--之NOLOGGING 操作引起的坏块解决方法

【本文目的】 介绍当将某些数据段设置成NOLOGGING模式后,常见的坏块发生后的处理方法及相关解释 【适用版本】 适用于 Oracle Database - Enterprise Edition...
  • wengtf
  • wengtf
  • 2014年02月20日 10:38
  • 1841

理解redo(11)truncate和select的redo

很多系统,在作删除操作时,都只是做一个标志位,并不会去做磁盘置0那样昂贵的操作。truncate也如是,更改的只是segment header和i-node表。truncate 会产生redo,是修改...
  • linwaterbin
  • linwaterbin
  • 2012年09月06日 14:43
  • 2147
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle nologging什么场景才能减少redo日志的产生
举报原因:
原因补充:

(最多只允许输入30个字)