TABLE的logging属性(续)

前天在 “TABLE的logging属性” 文章中留下了一个问题:table的logging属性到底从哪里可以提现出来???

今天在网上找到这么一句话:NOLOGING选项只是在direct-load模式下才不写redo log,nomal DML无效

上篇文章已经验证了nologging属性对update动作是无效的,下面就用direct-load模式来验证下这句话对不对。


1. 删除结构相同的表test1,test2;

TRUNCATE TABLE TEST2;

TRUNCATE TABLE TEST1;


2. 看下表test1,test2的logging属性;

SELECT t.TABLE_NAME,t.LOGGING FROM dba_tables t
    WHERE t.TABLE_NAME IN ('TEST2','TEST1');

TABLE_NAME                     LOG
------------------------------ ---
TEST2                          YES
TEST1                          NO


3. 依然开两个session分别执行insert动作,并观察session的redo变化量;

session1:

SELECT a.VALUE
FROM v$mystat a,v$statname b
WHERE a.STATISTIC#=b.STATISTIC#
     AND b.NAME='redo size';

     VALUE
------------------
         0           ---------执行insert之前的redo size


SQL> INSERT/*+append*/  INTO TEST1  SELECT OBJECT_ID,OBJECT_NAME FROM DBA_OBJECTS;  ---------执行insert动作append即为直接加载模式

49804 rows created.

SQL> commit;

Commit complete.


SELECT a.VALUE
FROM v$mystat a,v$statname b
WHERE a.STATISTIC#=b.STATISTIC#
     AND b.NAME='redo size';

     VALUE
------------------
       48324           ---------执行insert之后的redo size


session2:

SELECT a.VALUE
FROM v$mystat a,v$statname b
WHERE a.STATISTIC#=b.STATISTIC#
     AND b.NAME='redo size';

     VALUE
------------------
         0           ---------执行insert之前的redo size


SQL> INSERT/*+append*/ INTO TEST1  SELECT OBJECT_ID,OBJECT_NAME FROM DBA_OBJECTS; ---------执行insert动作,append即为直接加载模式

49804 rows created.

SQL> commit;

Commit complete.


SELECT a.VALUE
FROM v$mystat a,v$statname b
WHERE a.STATISTIC#=b.STATISTIC#
     AND b.NAME='redo size';

     VALUE
------------------
      1989324           ---------执行insert之后的redo size


这里就可以明显看到nologging属性的差别,真的是有在直接加载的模式下才能看到区别!!!!对不要/*+append*/的insert我也做过测试,产生的redo量差不多。。。

所以/*+append*/一般与nologging搭配一起用,效果更加明显!!


你可能感兴趣的:(oracle体系结构)