直接路径插入

直接加载操作为直接加载大量数据提供了一个高效的机制。其通过绕过标准的空闲列表或者assm识别可用来插入的空间。直接加载操作直接到hwm以上的未格式化块,直接将数据加载到这些块上并写入磁盘,绕过缓冲。通过这么做,跳过空闲列表或assm机制快速的找到完全为空的块。另外这些操作不会产生撤销,因此不需要写undo。产生的重做也因此减少,因为undo也会产生重做。

直接路径DML的例子

最主要的包括:

INSERT /*+ APPEND */,仅适用于堆表,并且如果包含索引,索引不会使用直接路径加载;

CREATE TABLE AS SELECT

CREATE INDEX

ALTER INDEX REBUILD

ALTER TABLE MOVE

这些操作都使用直接路径加载,需要注意的是单行插入不会使用直接路径加载。

直接路径加载的锁问题

传统的DMLTM enqueue上使用模式3row exclusive),其允许其他DML在相同的模式上获得TM enqueue。但是直接路径加载在TM enqueue使用模式6exclusive),这使其他DML在直接路径加载期间将被阻塞。这意味着在一个段上的并行直接路径加载将会在TM enqueue上串行化。

通俗的说,如果使用传统的方法插入一条记录到EMP表中,这不会阻止其他会话更新,插入,删除EMP表中其他的纪录;但是如果使用直接路径加载,在执行加载期间,整个EMP表都会被锁住,除了SELECT没有任何DML能够执行。

直接路径加载的恢复问题

NOLOGGING子句是段的一个属性,通常被忽略。如果创建表时声明了NOLOGGING,普通的操作,如插入,更新,删除将仍然产生redo'nolog'的指示被完全忽略。

但是直接路径加载,执行预期的NOLOGGING,几乎不产生redo。也因为这个原因,如果发生介质恢复将需要重新进程加载,而无法依赖于redo进行恢复。

从技术上来说,如果在一个包含了直接路径加载的数据文件上进行恢复,并且在直接路径加载以后数据文件没有备份过,那么在应用重做日志到文件上时这些块会被标记为'block invalidation markers'。因此这些块被标记为中断,如果尝试读取这些块将会得到ORA-26040 Data block was loaded using the NOLOGGING option错误信息。如果段是一个索引,可以通过删除这个段并重建解决,但是如果为表,可以truncate表然后进行重新加载。如果是表分区,可以truncate那个表分区,然后重新进行加载。

Force Logging

对于任何段来说,绕过重做机制都能够达到高性能,但是会带来严重的恢复问题。同时还可能会中断某些操作,如DG配置,如果没有产生重做,数据库将会被认为是不同步的。

Oracle 9i开始,DBA可以在建库时声明FORCE LOGGING选项,确保对于所有操作总是会产生重做,即使是直接路径加载。

[@more@]

Oracle插入数据有两种模式:常规路径和直接路径。


常规路径插入:Oracle会使用表中的空闲空间,并同时维护完整性约束。

直接路径插入:Oracle直接在高水位线以外分配空间,直接对数据文件进行写操作,绕过了数据缓冲区,而且不维护完整性约束。

直接路径插入不写回滚只写少量的重做日志,因此具有最高的插入效率。

在并行DML模式中,直接路径插入是模式模式,要设置并行DML

数据库必须是企业版;

并行在sessionenable并行DML

目标表必须设置了并行属性,或者在执行插入时指定并行提示。

直接路径插入的其他考虑因素:

索引维护:Oracle在直接插入结束的时候维护索引,为了避免维护索引的性能影响,可以先删除索引,等插入完成会在重新建立。

空间占用:由于并行插入不使用表中现有空间,而在高水位线以外直接分配空间,所以直接路径插入会比常规路径插入占用更多的空间,在并行插入的情况下更加明显。

锁机制:在直接路径插入过程中,Oracle在表上放置独占锁。因此,用户在直接路径插入操作的同时对表的插入、更新、删除以及索引的创建和重建操作都是被禁止的。用户可以执行查询操作,查询会返回插入以前的数据。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9533994/viewspace-1020469/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/9533994/viewspace-1020469/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值