2007-01-05

对比Oracle数据库中多种导入数据方法

来源: 本站收集整理 作者:佚名 评论 0 条
 

这种方法为导入数据打开了新的一扇门。你可以很轻易的将外部文件与数据库相关联,并且在数据库中创建对应的 External Table,然后就可以立即查询数据,就象外部数据已经导入到数据库表中一样。唯一的不足需要明确,数据并未真正导入到数据库中,当外部文件被删除或覆盖时,数据库将不能访问 External Table 里的数据,而且索引没有被创建,访问数据速度将有所缓慢。创建 CALLS_EXTERNAL(External Table表)如下,使之与外部数据文件关联:

CREATE TABLE calls_external 

(call_id NUMBER,

call_date DATE,

emp_id NUMBER,

call_type VARCHAR2(12),

details VARCHAR2(25))

ORGANIZATION EXTERNAL

( TYPE oracle_loader

DEFAULT DIRECTORY extract_files_dir

ACCESS PARAMETERS

(

RECORDS DELIMITED BY NEWLINE

FIELDS TERMINATED BY ’,’

MISSING FIELD VALUES ARE NULL

(

call_id, call_date CHAR DATE_FORMAT DATE MASK

"yyyy-mm-dd:hh24:mi:ss",

emp_id, call_type, details

)

)

LOCATION (’calls.dat’)

);

  

然后将 External Table 与真正被使用的表 CALLS 关联同步,删除 CALLS 表并重建它:

CREATE TABLE calls

(

call_id NUMBER NOT NULL,

call_date DATE NOT NULL,

emp_id NUMBER NOT NULL,

call_type VARCHAR2(12) NOT NULL,

details VARCHAR2(25)

)

TABLESPACE tbs1 NOLOGGING

AS

SELECT call_id, call_date, emp_id, call_type, details

FROM calls_external;

  

因为 CALLS 表是真正的数据库表,可以创建索引来加快访问,表中的数据将被保留,即使外部数据文件被更新或被删除。在建表语句中NOLOGGING要害字用于加快索引重建。

运用这种方法导入数据,总的导入时间为 15 秒,进程占用 CPU 的时间为8秒,这比前一种方法稍微慢些,但不能就此认为使用 External Table 导入数据一定比 OCI 批量插入慢。

这种方法的优点是,未经进行大量的编写代码就取得了不错的结果,不象 OCI 批量插入存在编码错误风险,它还可以使用 dbms_job 包调度数据导入进程,实现数据导入的自动化。其缺点是目标表必须先删除后重建,假如只需要导入增量数据时此方法就不合适了,另外用户在表的重建过程中访问数据时会碰到 "table or view does not exist" 的错误,它仅适用于 Oracle 9i 以上版本的数据库。

  INSERT Append as SELECT,使用 Oracle9i 的 External Table

上一种方法演示了如何创建与外部数据文件关联的数据库表,其表的数据是由外部数据文件映射过来。缺点是数据库表需要被先删除再重建来保持与外部数据文件的一致和同步,对导入增量的数据而不需要删除已有数据的情况不合适。针对这种需求,Oracle 提供了 INSERT 语句外带 APPEND 提示来满足。
共5页: 上一页 [1] [2] 3 [4] [5] 下一页

(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:从Oracle数据库的用户错误中恢复  
下一篇:PL/SQL和Java开发Oracle8i应用程序
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号