CTAS、Nologging以及数据库运行模式的详细介绍
iputb讨论链接:
http://www.itpub.net/showthread.php?threadid=242761
我们看以下测试:
SQL> archive log list
Database log mode No Archive Mode Automatic archival Enabled Archive destination /opt/oracle/oradata/hsjf/archive Oldest online log sequence 156 Current log sequence 158 SQL> @redo SQL> select * from redo_size;VALUE
---------- 80892SQL> create table test nologging as select * from dba_objects;
Table created.
SQL> select * from redo_size;
VALUE
---------- 118024SQL> drop table test;
Table dropped.
SQL> select * from redo_size;
VALUE
---------- 139732SQL> create table test as select * from dba_objects;
Table created.
SQL> select * from redo_size;
VALUE
---------- 176864SQL> select (176864 -139732) redo2,(118024 -80892) redo1 from dual;
REDO2 REDO1
---------- ---------- 37132 37132SQL> drop table test;
Table dropped.
SQL> shutdown immediate
Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount; ORACLE instance started.Total System Global Area 235999908 bytes
Fixed Size 451236 bytes Variable Size 201326592 bytes Database Buffers 33554432 bytes Redo Buffers 667648 bytes Database mounted. SQL> alter database archivelog;Database altered.
SQL> alter database open;
Database altered.
SQL> @redo
SQL> select * from redo_size;VALUE
---------- 35768SQL> create table test nologging as select * from dba_objects;
Table created.
SQL> select * from redo_size;
VALUE
---------- 73860SQL> drop table test;
Table dropped.
SQL> select * from redo_size;
VALUE
---------- 95596SQL> create table test as select * from dba_objects;
Table created.
SQL> select * from redo_size;
VALUE
---------- 1215092SQL> select (1215092 -95596) redo2,(73860 -35768) from dual;
REDO2 (73860-35768)
---------- ------------- 1119496 38092 .结论:
显然ctas的Nologging在archivelog模式下才会不记录redo,而在Noarchivelog模式下会产生同样多的redo 在归档模式下的CTAS nologging应该等价于非归档模式下ctas + insert append