nologging 不起作用!【解決】

楊奇龍發表於2010-07-18
SQL> conn system/yang as sysdba
已連線。
SQL> create  or replace  view redo_size
  2  as
  3  select value
  4  from v$mystat m,v$statname s
  5  where m.statistic#=s.statistic#
  6* and s.name='redo size'

SQL> select * from redo_size;
     VALUE                                                                     
----------                                                                     
         0      
----------------建立表----------------------------                                                                  
SQL> create table test tablespace test as select * from dba_objects;
表已建立。
SQL> select * from redo_size;
     VALUE                                                                     
----------                                                                     
   8432324                                                                     

SQL> select table_name ,logging,owner from dba_tables where table_name='TEST';
TABLE_NAME                     LOG OWNER                                       
------------------------------ --- ------------------------------               
TEST                           YES SCOTT                                       
TEST                           YES SYS                                          
SQL> show user
USER 為 "SYS"
SQL> insert into test select * from dba_objects;
已建立68982行。
SQL> select * from redo_size;
     VALUE                                                                     
----------                                                                     
  16686608                                                                     
SQL> select (16686608-8432324) redo from dual;
      REDO                                                                     
----------                                                                     
   8254284                                                                     
SQL> insert /*+ append*/ into test select * from dba_objects;
已建立68982行。
SQL> select * from redo_size;
     VALUE                                                                     
----------                                                                     
  25066556                                                                     
SQL> select (25066556-16686608) redo from dual;
      REDO                                                                     
----------                                                                     
   8379948                                                                     
SQL> select (25066556-16686608) redo_append,(16686608-8432324) redo from dual;
REDO_APPEND       REDO                                                         
-----------                ----------                                                         
    8379948
    >     8254284
                                                         
SQL> truncate table test ;
表被截斷。
SQL> drop table test ;
表已刪除。
----------------建立nologging表----------------------------                                                              

SQL> select * from redo_size;
     VALUE                                                                     
----------                                                                     
  33635864                                                                     
SQL> create table testnolog nologging as select * from dba_objects where 1=0;
表已建立。
SQL> select count(*) from testnolog;
  COUNT(*)                                                                     
----------                                                                     
         0                                                                     
SQL> select * from redo_size;
     VALUE                                                                     
----------                                                                     
  33657684                                                                     
SQL> select table_name,logging,owner
  2  from dba_tables where table_name='TESTNOLOG';
TABLE_NAME                     LOG OWNER                                       
------------------------------ --- ------------------------------               
TESTNOLOG                      NO  SYS                                          
SQL> select * from redo_size;
     VALUE                                                                     
----------                                                                     
  33657684                                                                     
SQL> insert into testnolog select * from dba_objects;
已建立68982行。
SQL> select * from redo_size;
     VALUE                                                                     
----------                                                                     
  41941584                                                                     
SQL> insert [b]/*+append*/ into testnolog select * from dba_objects;
已建立68982行。
SQL> select * from redo_size;
     VALUE                                                                     
----------                                                                     
  50298684                                                                     
SQL> select (50298684-41941584) redo_append,(41941584-33657684) redo from dual;
REDO_APPEND       REDO                                                         
-----------              ----------                                                         
    8357100           8283900          
 
原因:
   以前在測試機上做了dataguard 的實驗,資料庫為Force Logging模式。
    指定資料庫為Force Logging模式後,資料庫將會記錄除臨時表空間或臨時回滾段外所有的操作,而忽略類似NOLOGGING之類的指定引數。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-668345/,如需轉載,請註明出處,否則將追究法律責任。

相關文章