oracle中path语句的用法,Oracle Direct-Path Insert学习笔记

(1)、Oracle插入数据有两种方式:

a、常规插入:重新使用table中的自由空间,在已有数据中插入新数据;维护引用完整性约束。

b、Direct-Path插入:在表中已有数据之后插入新数据;数据直接插入数据文件,绕过buffer cache;已有数据中的自由空间没有被重新利用;忽略了引用完整性约束。

(2)、连续模式:一个进程执行sql语句;

并行模式:多个进程同时执行一个sql语句,即并行执行。

(3)Direct-Path插入的优点:

1、可以disable redo log和undo log;而常规插入却不可以如此,并且重用自由空间和维护引用完整性。

2、通过CREATE TABLE...AS SELECT 语句可以从现有表中创建新表,使用Direct-Path插入可以在插入时更新定义在目标表上的任意索引。

3、Direct-Path插入能保证事务的原子性,即使在并行模式下。使用SQL*Loader在并行模式加载中不能保证原子性。

4、当并行Direct-Path加载发生错误时,索引被标志成UNUSABLE。

5、如果想使用表压缩的压缩格式存储数据,必须使用Direct-Path插入。

(4)使用Direct-Path插入:

在连续模式中,在Insert语句中指定“APPEND”提示,在INSERT关键字之后,或者在INSERT子查询中的SELECT关键字之后。

在并行DML模式中,默认的就是DIRECT-PATH插入,为了运行并行DML模式,必须满足以下条件:

a、必须是Oracle企业版;

b、必须在session中使并行DML生效,执行以下sql语句:

ALTER SESSION { ENABLE | FORCE } PARALLEL DML;

c、必须指定table的并行属性,在创建的时候或者其他时候,或者在insert操作时使用“PARALLEL”提示。

为了使Direct-Path Insert模式失效,在INSERT语句中指定“NOAPPEND”提示,覆盖并行DML模式。

(5)、Direct-Path INSERT 是如何工作的

在分区表和非分区表都可以使用Direct-Path INSERT

连续Direct-Path INSERT到分区和非分区表

单个进程插入数据到高水位标志之上,当执行完commit之后,高水位标志得到更新。

并行Direct-Path INSERT到分区表

类似于serial Direct-Path INSERT,每个并行操作分配给一个或者多个分区,每个并行操作插入数据到各自的分区段的高水位标志之上,commit之后,用户就能看到更新的数据。

并行Direct-Path INSERT到非分区表

每个并行执行分配一个新的临时段,并插入数据到临时段。当commit运行后,并行执行协调者合并新的临时段到主表段,用户就能看到更新的数据。

为Direct-Path INSERT指定的Log模式

Direct-Path INSERT可以使用Log或者不使用Log。

(6)、其他需要注意的地方:

索引维护:Oracle在Direct-Path INSERT 操作末尾,对具有索引的表执行索引维护,这样就避免了在drop掉索引后,再rebuild。

使用的空间:Direct-Path INSERT比常规的插入需要更多的空间。因为它将数据插入在高水位之上。并行插入非分区表需要更多的空间,因为它需要为每一个并行创建临时段。

锁:在插入期间,数据库在表上获得排他锁,用户不能在表上执行并行插入、更新或者删除操作,并行的索引创建和build也不被允许。但却可以并行查询,但查询返回的是插入之前的结果集。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值