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)

 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

 

 

 

 

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

相关文章推荐

Oracle备份恢复-redo文件损坏的各种场景恢复专题

接着上一篇《控制文件损坏的各种场景恢复专题》的文章之后继续跟大家分享备份恢复专题《redo文件损坏的各种场景恢复专题》的文章。这系列文章的内容都是尽量梳理每一种数据库文件 损坏时对应各种场景的恢复,...

oracle的redo log在各场景下的恢复

oracle的redo log非常重要,redo log损坏将导致数据库开法开启或数据丢失,针对redo log在各种场景下如何打开或恢复数据库,特别模拟测试说明: 各场景包括如下(共6个场景): ...

Oracle非归档模式下插入数据到nologging表和logging表产生的undo信息比较

一首先看我自己的实验环境是处于哪种归档模式: SQL> select t.LOG_MODE from v$database t; LOG_MODE ------------ NOA...

Oracle TDE与Redo日志的关系探索

TDE与Oracle redo日志相关的总结   1 与TDE相关的结论 10g与11g在这上安全方面的实现上还是有一定的差别的,尤其是在表上使用TDE时,11g与redo日志兼容得更好...

Oracle中临时表产生过量Redo的说明

作者:eygle |English Version 【转载时请以超链接形式标明文章出处和作者信息及本声明】 链接:http://www.eygle.com/archives/2004/07/temp...

Oracle中的nologging

http://blog.csdn.net/sdl_ok/article/details/5474774 Oracle数据库有联机重做日志,这个日志是记录对数据库所做的修改,比如插入,删除,更...

oracle的nologging

官方如是说: Controlling the Writing of Redo Records For some database operations, you can control whe...

ORACLE NOLOGGING研究

熟悉oracle的人都知道,通过设置oracle的nologging选项,可以使某些操作快速完成,风险是数据库备份可能失效。可以使用nologging的操作有很多,搜集资料整理如下: 1.索引的创建...
  • joeadai
  • joeadai
  • 2014年12月18日 12:11
  • 924

关于oracle的NOLOGGING

关于oracle的NOLOGGING OracleSQL 可以采用NOLOGGING模式执行以下操作: 1 索引的创建和ALTER(重建)。 2 表的批量INSERT(通过...
  • fick777
  • fick777
  • 2012年02月24日 17:22
  • 988

Know more about Oracle Nologging

Know more about Oracle Nologging 2010/01/13 BY MACLEAN LIU 暂无评论
  • loryliu
  • loryliu
  • 2014年06月29日 10:34
  • 326
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:oracle nologging什么场景才能减少redo日志的产生
举报原因:
原因补充:

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