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

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

数据库版本是9.0.2.1

原表是test,nologging属性. 然后运用create table..as select创建两个表。用logmnr分析日志,检查是否产生了日志.

一. 表创建操作:
SQL> create table test (f1 number(3), f2 number(3)) nologging;

表已创建。

SQL> insert into test select rownum,rownum from dba_objects where rownum<=999;

已创建999行。

SQL> commit;

提交完成。

SQL> create table test1 as select * from test;

表已创建。

SQL> create table test2 as select * from test nologging;

表已创建。

SQL> select table_name,logging from user_tables where table_name like 'TEST%';

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

二.Logmnr分析redo log日志
SQL> connect / as sysdba;
已连接。
SQL> exec dbms_logmnr_d.build(dictionary_filename=>'logminer_dict.dat',dictionar
y_location=>'e:/oracle/log');

PL/SQL 过程已成功完成。

SQL> execute dbms_logmnr.add_logfile(options=>dbms_logmnr.new,logfilename=>'c:/r
edo03.log');

PL/SQL 过程已成功完成。

SQL> execute dbms_logmnr.start_logmnr(dictfilename=>'e:/oracle/log/logminer_dict
.dat');

PL/SQL 过程已成功完成。

SQL> select substr(sql_redo,1,27),count(*) from v$logmnr_contents where timestam
p>=to_date('20071225224000','YYYYMMDDHH24MISS') and sql_redo like 'insert into%'
group by substr(sql_redo,1,27);

SUBSTR(SQL_REDO,1,27)                                    COUNT(*)
------------------------------------------------------ ----------
insert into "SCOTT"."TEST1"                                   999 --产生了999条insert redo
insert into "SCOTT"."TEST2"                                   999 --产生了999条insert redo
insert into "SYS"."OBJ$"("O                                     2

原表test是nologging的,为什么还会产生redo log呢?
将语句改为create table test2  nologging as select * from test之后就没有产生redo log.

你可能感兴趣的:(sql,数据库,table,insert,logging,Dictionary)