在执行数据插入或数据加载时,可以通过append Hint的方式进行数据库直接加载,可以在insert的SQL语句里面使用append,比如:insert/*+append*/ into t select * from dba_objects;
Oracle执行直接加载时,数据直接追加到数据段的最后,不需要花费时间在段中寻找空闲,数据不经过Data Buffer直接写到数据文件中,效率自然比传统的加载方式要高。
首先看一个直接加载的例子,用来演示直接加载的机制:
sys@ORCL> create table t
2 as
3 select * from dba_objects where rownum<2000;
Table created.
sys@ORCL> select segment_name,extent_id,bytes
2 from user_extents
3 where segment_name='T';
SEGMENT_NA EXTENT_ID BYTES
---------- ---------- ----------
T 0 65536
T 1 65536
T 2 65536
T 3 65536
现在T表分配了4个extent,然后删除所有的行,再查看T表所分配的extent:
sys@ORCL> delete from t;
1999 rows deleted.
sys@ORCL> commit;
Commit complete.
sys@ORCL> select segment_name,extent_id,bytes
2 from user_extents
3 where segment_name='T';
SEGMENT_NA EXTENT_ID BYTES
---------- ---------- ----------
T 0 65536
T 1 65536
T 2 65536
T 3 65536
可以看到此时T表仍然占有4个extent,因为delete操作不会收缩表占用的空间。此时用传统的方式再往T表插入数据:
sys@ORCL> insert into t
2 select * from dba_objects where rownum<2000;
1999 rows created.
sys@ORCL> commit;
Commit complete.
sys@ORCL> select segment_name,extent_id,bytes
2 from user_extents
3 where segment_name='T';
SEGMENT_NA EXTENT_ID BYTES
---------- ---------- ----------
T 0 65536
T 1 65536
T 2 65536
T 3 65536
此时T表仍然分配了4个extent,数据被分到已有的空闲的空间里面。删掉数据:
sys@ORCL> delete from t;
1999 rows deleted.
sys@ORCL> commit;
Commit complete.
sys@ORCL> select segment_name,extent_id,bytes
2 from user_extents
3 where segment_name='T';
SEGMENT_NA EXTENT_ID BYTES
---------- ---------- ----------
T 0 65536
T 1 65536
T 2 65536
T 3 65536
此时T表里面已经没有数据,分配的4个extent都为空闲的区。接着使用直接加载方式即:append Hint,往T表插入数据:
sys@ORCL> insert/*+append*/ into t
2 select * from dba_objects where rownum<2000;
1999 rows created.
sys@ORCL> commit;
Commit complete.
sys@ORCL> select segment_name,extent_id,bytes
2 from user_extents
3 where segment_name='T';
SEGMENT_NA EXTENT_ID BYTES
---------- ---------- ----------
T 0 65536
T 1 65536
T 2 65536
T 3 65536
T 4 65536
T 5 65536
T 6 65536
我们看到使用直接加载方式后,T表分配的extent增加了。直接加载的数据放在表的高水位线(High Water Mark,HWM)以上,当直接加载完成后,Oracle将表的高水位线移到新加入的数据之后,这样新的数据就可以被用户使用了。
[@more@]来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26738398/viewspace-1058710/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26738398/viewspace-1058710/