oracle笔记【direct load】

oracle在插入数据的时候有2种方式:
1.如果在hwm前面存在空余的空间,数据将会直接在hwm(高水位线)前面空余的空间插入
同时将会受到数据完整性约束的影响。

SQL> create table bt as select * from all_objects where 1=0;

Table created.

SQL> select count(*) from all_objects;

COUNT(*)
----------
30645

SQL> insert into bt select * from all_objects;

30645 rows created.

SQL> select count(*) from bt;

COUNT(*)
----------
30645


[color=red]注意:在这里我还没有commit,我用select语句查看可以执行[/color]
2.direct-path insert 也就是直接插入的方式。它不会考虑hwm前面是否有空余的空间,它会直接在hwm后面直接插入。如果commit后会直接通过buffer cache 写进数据文件,它不会等带checkpoint的时候才写数据到数据文件。
这种方式有2种模式:serially(串行),parallel(并行)
a serially direct load

SQL> commit;

Commit complete.

SQL> select count(*) from bt;

COUNT(*)
----------
30645

SQL> insert /*+append */ into bt select * from all_objects;

30645 rows created.

SQL> commit;

Commit complete.

SQL> select count(*) from bt;

COUNT(*)
----------
61290

[color=red]注意:在这里我还没有commit的时候它是不可以select的,一旦我commit后就可以用select查看了[/color]
b. parallel direct load

--创建分区表
SQL> create table emp (empno number,empname varchar2(20))
2 partition by hash(empno)
3 (partition part1,
4 partition part2)
5 /

Table created
SQL> col object_name format a40
SQL> select object_name,object_type from user_objects;

OBJECT_NAME OBJECT_TYPE
---------------------------------------- ------------------
EMP TABLE PARTITION
EMP TABLE PARTITION
EMP TABLE
T TABLE
--修改session打开并行
SQL> alter session enable parallel dml;

Session altered.
--parallel(u1.bt,2) 2表示打开2并行度
SQL> insert /*+parallel(u1.bt,2) */ into u1.bt nologging
2 select * from user_objects;

13925 rows created.
SQL> select count(*) from u1.bt;

COUNT(*)
----------
13925
SQL> commit;

Commit complete.

SQL> select count(*) from u1.bt;

COUNT(*)
----------
13925
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值