ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 将数据加载到数据库中

将数据加载到数据库中

原创 Linux操作系统 作者:bjiokn 时间:2009-12-17 20:15:51 0 删除 编辑

将数据加载到数据库中


有数种方法可用于向 Oracle 数据库的表中加载数据。此处讨论其中的直接加载插入和 SQL*Loader 这两种方法。
SQL*Loader:
SQL*Loader 将数据从外部文件加载到 Oracle 数据库表中。SQL*Loader 包含一个功能强大的数据分析引擎,该引擎对数据文件中数据的格式几乎没有限制。
直接加载:
直接加载插入可用于在同一数据库中从一个表向另一个表复制数据。此方法绕过数据库缓冲区高速缓存直接将数据写入数据文件,从而加快了插入操作的速度。

串行直接加载:
--------------------------
SQL> create tablespace append_in
  2  datafile 'C:\oracle\product\10.2.0\oradata\test\append_in.dbf' size 20M
  3  extent management local uniform. size 100K;

表空间已创建。

SQL> create table emp_append tablespace append_in as select * from scott.emp where 1=2

表已创建。

SQL> insert /*+ append */ into emp_append nologging
  2  select * from scott.emp;

已创建14行。

SQL> commit;

提交完成。

SQL> select * from emp_append;
---------------------------

并行直接加载:
---------------------------
SQL> alter session enable parallel dml;

会话已更改。
  1  insert /*+parallel(emp_append,2)*/
  2  into emp_append nologging
  3* select * from scott.emp
SQL> /

已创建14行。
SQL> select count(*) from emp_append;

  COUNT(*)
----------
        28
---------------------------

 

 

用SQL*Loader输入数据和数据文件(适用于将数据从外部文件加载到 Oracle 数据库表中)

SQL> create tablespace parallel_in
  2  datafile 'C:\oracle\product\10.2.0\oradata\test\parallel_in.dbf' size 10M
  3  extent management local uniform. size 50K;

表空间已创建。

SQL> create table dept_parallel tablespace parallel_in as select * from scott.de
pt where 1=2;

表已创建。

SQL> spool c:\dept1.txt
SQL> select deptno || ',' || dname || ',' || loc from scott.dept;

DEPTNO||','||DNAME||','||LOC
---------------------------------------------------------------------
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

SQL> spool off
SQL> select count(*) from dept_parallel;
打开c:\dept1.txt,删除不必要的信息,保留为:
 10,ACCOUNTING,NEW YORK
 20,RESEARCH,DALLAS
 30,SALES,CHICAGO
 40,OPERATIONS,BOSTON

将下列内容添加到 c:\dept1.ctl
 load data
 infile 'dept1.txt'
 into table dept_parallel
 fields terminated by ','
 (deptno,dname,loc)

开始菜单--运行--cmd--切换到C:\目录下:
C:\Documents and Settings\Administrator>cd c:\
C:\>sqlldr 'sys/oracle as sysdba' control=dept1.ctl log=deptlog.log

SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 12月 17 21:25:29 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

达到提交点 - 逻辑记录计数 3
达到提交点 - 逻辑记录计数 4

登录数据库:
C:\>sqlplus sys/oracle as sysdba
SQL> select count(*) from dept_parallel ;

  COUNT(*)
----------
         3
(少一条数据没有添加进去)

打开C盘找到deptlog.log文件,发现有错误信息(原来是有多余空格,手动清除空格后保存)
可以查看dept1.bad 文件,这里存放的是没有插入成功的数据

再执行:
C:\>sqlldr 'sys/oracle as sysdba' control=dept1.ctl log=deptlog.log

SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 12月 17 21:28:46 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL*Loader-601:  对于 INSERT 选项, 表必须为空。表 DEPT_PARALLEL 上出错

(这是因为没有给追加的命令)
打开c:\dept1.ctl:
 load data
 infile 'dept1.txt'
 append   --可用于将数据加载到非空的表中
 into table dept_parallel
 fields terminated by ','
 (deptno,dname,loc)

再执行:
C:\>sqlldr 'sys/oracle as sysdba' control=dept1.ctl log=deptlog.log

SQL*Loader: Release 10.2.0.1.0 - Production on 星期四 12月 17 21:30:57 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

达到提交点 - 逻辑记录计数 3
达到提交点 - 逻辑记录计数 4

登录数据库:
C:\>sqlplus sys/oracle as sysdba
SQL> select count(*) from dept_parallel ;

  COUNT(*)
----------
        7
(打开C盘找到deptlog.log文件,发现没有错误信息)

 

《完》

 

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

上一篇: 审计原则
请登录后发表评论 登录
全部评论

注册时间:2009-05-31

  • 博文量
    94
  • 访问量
    113660