ITPub博客

首页 > Linux操作系统 > Linux操作系统 > oracle数据库数据加载---Direct*load

oracle数据库数据加载---Direct*load

原创 Linux操作系统 作者:JumFlow 时间:2011-06-08 14:11:58 0 删除 编辑

oracle数据库数据加载(Direct Load)

一.

    对oracle数据库来说有很多数据加载方式,如 imp,sql*loader,directLoad。这些都是为了方便对oracle数据库进行快速的数据加载。 imp,sql*loader这两种工具的数据来源都依赖于外部文件。而directLoad却是一种不依赖外部文件,在不同数据库之间和数据库内部进行数据加载的方式。 现在就主要对directLoad进行说明。

二.

    其实DirectLoad的功能就是一个表到一表的数据copy, 这过程中 oracle 允许有一些特殊的选项来加快数据的加载, 比如 并行DML , nologging 的方式。 正是有了这些加快数据加载的选项,才对此加载方式多了几分考虑(其实也算得上是忧虑)

    下面来看忧虑何来,首先来看看下面这个加载操作:

    insert /*+ append */ into target_tab   nologging

    select  *  from source_tab ;

    这个操作绕过数据redo,undo机制,sql引擎的方式直接将数据插入到target_tab表中。 如果你作为一数据管理者来说的话,你看这个这个操作之后第一反应就马上备份这个target_tab。 因为 append 和 nologging 这两个选项完全背离数据的基本机制,在数据恢复中会造成失败。 同时这个操作产生的新数据,是在来高水位之上的,这就会对部分空间的浪费,也会造成全表扫描减慢

   再来看一操作,

   alter session enable parallel  dml ;

   insert  /*+ paralle(target_tab , 2) */  into target_tab  nologging

   select  * from source_tab ;

   注意:这个操作必需在一个事物中完成。 如果还需此操作,还得另起事物。

   这个操作是让DirectLoad并行加载,paralle(target_tab , 2)表示以两个并行会话对target_tab并行加载数据。 在oracle数据中,并行操作本质就是一种以牺牲物理资源,来换取时间(相当于空间换时间) 。 在这种情况下,做这种操作要仔细考虑你的硬件资源是否允许,盲目并行操作,有时适得其反。

 

 

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

请登录后发表评论 登录
全部评论

注册时间:2011-03-03

  • 博文量
    72
  • 访问量
    185757