Oracle 向一个表中插入数据的两种方式:
Conventional Insert Operations:传统插入会优先使用高水位之下,会保证数据应用完整性:高水位之下是指:删除之后的剩余空间,高水位之上是指:从来没有用过的处女块。
Direct-path Insert Operations:数据插入会利用高水位之上,不用高水位之下。采用Appends追加方式、不经过Buffer Catch 这个过程会大大提高性能。
Dircet-Load 工作模式
1 Serial Direct-path Insert :Single proces Insert (用分区或没分区)一个进程。插入之前是不会用高水位之下的块。所以插入前要rebuild 表使高水下的块结束空状态
2 Parallel Direct-path Insert(用分区) :多进程并行插入分区表。一个分区上可用多个进程,但是一个进程不能进入多个区。和1种方式一样、
3 Parallel Direct-path Insert (非分区):多进程并行插入非分区表。每个需要干活的进程会分一个临时的segment。最后会有一个协调者进程把segment合并移动到primary table segment 上。
具体:
1 (串行) :insert /*+Append*/ into temp nologging select * from all_objects;
/*+Append*/ :(串行)块拷贝直接使用高水位。
需要commit 后在查询。
2 (并行含分区):默认就是/*+Append*/
Alter sesion enable parallel DML;
INSERT /*+Parallel (用户.表, 分区数)*/ into 表 nologging select * from 源表。
如果是分区表nologging模式和主表的nologging 一样
一个表的nologging 是和它所在表空间的所在表空间是一样的。
可以改变所在表空间的nologging改变其下的表的nologging模式
set autot :可以查看Statistics logging日志
不过这样nologging是没有用的。可以使用alter table xxx nologging;
在insert /*+Append*/ into temp nologging select * from all_objects; 是会产生redo size非常的少、