About me:Oracle ACE pro,optimistic,passionate and harmonious.
Focus on ORACLE,MySQL and other database programming,peformance tuning,db design, j2ee,Linux/AIX,Architecture tech,etc
create table t nologging as select .......... 这个有效,因为这个是建立一个nologging table ,为t
归档模式下测试,非归档模式,append hint可以减少redo的
--case 1:测试结果 ctas中对源表nolgging有效果,减少redo dingjun123@ORADB> select * from redo_size;
VALUE
----------
1552
已选择 1 行。
已用时间: 00: 00: 00.01
dingjun123@ORADB> create table t as select * from all_objects;
表已创建。
已用时间: 00: 00: 05.90
dingjun123@ORADB> select * from redo_size;
VALUE
---------- 8759612
已选择 1 行。
已用时间: 00: 00: 00.01
dingjun123@ORADB> drop table t;
表已删除。
已用时间: 00: 00: 00.18
dingjun123@ORADB> create table t nologging as select * from all_objects;
表已创建。
已用时间: 00: 00: 08.30
dingjun123@ORADB> select * from redo_size;
VALUE
---------- 8884200
已选择 1 行。
已用时间: 00: 00: 00.00
--case2:insert append hint +nologging???????无效果,不知道这语法从哪蹦出来的,到处引用 --下面的报错,但是把那别名换成nologging,放在源表位置和目标表位置竟然正确,这语法哪来的?在文档上没有找到,文档上的nologging不是这么在insert 里用的
dingjun123@ORADB> drop table t;
表已删除。
已用时间: 00: 00: 00.26
dingjun123@ORADB> insert into t m as select * from dual;
insert into t m as select * from dual
*
第 1 行出现错误:
ORA-00926: 缺失 VALUES 关键字
已用时间: 00: 00: 00.01
dingjun123@ORADB> insert into t as select * from dual x;
insert into t as select * from dual x
*
第 1 行出现错误:
ORA-00926: 缺失 VALUES 关键字
dingjun123@ORADB> create table t as select * from all_objects where 1=0;
表已创建。
已用时间: 00: 00: 00.81
dingjun123@ORADB> select * from redo_size;
VALUE ----------
8946112
已选择 1 行。
已用时间: 00: 00: 00.01
dingjun123@ORADB> insert /*+ append */ into t select * from all_objects nologging;
已创建73940行。
已用时间: 00: 00: 10.48
dingjun123@ORADB> select * from redo_size;
VALUE
---------- 17661336
已选择 1 行。
已用时间: 00: 00: 00.01
dingjun123@ORADB> rollback;
回退已完成。
已用时间: 00: 00: 00.00
dingjun123@ORADB> select * from redo_size;
VALUE
---------- 17661460
已选择 1 行。
已用时间: 00: 00: 00.01
dingjun123@ORADB> insert /*+ append */ into t nologging select * from all_objects;
已创建73940行。
已用时间: 00: 00: 09.40
dingjun123@ORADB> select * from redo_size;
VALUE
---------- 26318524
已选择 1 行。
已用时间: 00: 00: 00.01
--见Apress pro oracle sql beyond the select,开头就引入了这种用法,要注意,这不对 Direct Path Inserts
Direct path inserts can be invoked by using the APPEND hint (parallel inserts do this by default, by the
way). In Oracle Database 11g Release 2, there is a new APPEND_VALUES hint that can be used for
inserts that specify a values clause as opposed to using a SELECT to provide the values for inserting.
Listing 13-1 shows a simple example of both forms.
Listing 13-1. Simple Insert APPEND and APPEND_VALUES insert /*+ append */ into kso.big_emp select * from hr.employees nologging; insert /*+ append_values */ into dual (dummy) values ('Y');