ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【SQL*Loader】SQL*Loader实验之(1)--导入普通CSV文件

【SQL*Loader】SQL*Loader实验之(1)--导入普通CSV文件

原创 Linux操作系统 作者:chicheng_cn421 时间:2011-06-12 23:22:19 0 删除 编辑


【实验内容】
将CSV文件dept2_01.dat中的数据导入到scott用户下的dept2表中。


【实验过程】

//(1)创建一个dept2表
C:\>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 星期日 6月 12 22:15:57 2011

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

SQL> conn scott@test
输入口令:
已连接。
SQL> create table dept2 as
  2  select * from dept;

表已创建。

SQL> desc dept2
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 DEPTNO                                             NUMBER(2)
 DNAME                                              VARCHAR2(14)
 LOC                                                VARCHAR2(13)

SQL>


//(2)做成dept2_01.dat数据文件。内容如下:
----------------------------------------
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
----------------------------------------

//(3)做成sqlloder导入用控制文件 dept2_01.ctl
这只是一个普通的csv格式文件的数据导入,ctl文件简单写了一下:
----------------------------------------
LOAD DATA
INFILE *
INTO TABLE dept2
APPEND
FIELDS TERMINATED BY ","
( DEPTNO,
  DNAME,
  LOC
)
----------------------------------------

//(4)启动并执行sqlloader
先简单看一下sqlloader的语法。sqlloader自解释的比较清楚,自己看吧。不明白的可以百度一下:-D
------------------
C:\>sqlldr

SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 6月 12 22:34:22 2011

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


用法: SQLLDR keyword=value [,keyword=value,...]

有效的关键字:

    userid -- ORACLE 用户名/口令
   control -- 控制文件名
       log -- 日志文件名
       bad -- 错误文件名
      data -- 数据文件名
   discard -- 废弃文件名
discardmax -- 允许废弃的文件的数目         (全部默认)
      skip -- 要跳过的逻辑记录的数目  (默认 0)
      load -- 要加载的逻辑记录的数目  (全部默认)
    errors -- 允许的错误的数目         (默认 50)
      rows -- 常规路径绑定数组中或直接路径保存数据间的行数
               (默认: 常规路径 64, 所有直接路径)
  bindsize -- 常规路径绑定数组的大小 (以字节计)  (默认 256000)
    silent -- 运行过程中隐藏消息 (标题,反馈,错误,废弃,分区)
    direct -- 使用直接路径                     (默认 FALSE)
   parfile -- 参数文件: 包含参数说明的文件的名称
  parallel -- 执行并行加载                    (默认 FALSE)
      file -- 要从以下对象中分配区的文件
skip_unusable_indexes -- 不允许/允许使用无用的索引或索引分区  (默认 FALSE)
skip_index_maintenance -- 没有维护索引, 将受到影响的索引标记为无用  (默认 FALSE)
commit_discontinued -- 提交加载中断时已加载的行  (默认 FALSE)
  readsize -- 读取缓冲区的大小               (默认 1048576)
external_table -- 使用外部表进行加载; NOT_USED, GENERATE_ONLY, EXECUTE  (默认 NOT_USED)
columnarrayrows -- 直接路径列数组的行数  (默认 5000)
streamsize -- 直接路径流缓冲区的大小 (以字节计)  (默认 256000)
multithreading -- 在直接路径中使用多线程
 resumable -- 启用或禁用当前的可恢复会话  (默认 FALSE)
resumable_name -- 有助于标识可恢复语句的文本字符串
resumable_timeout -- RESUMABLE 的等待时间 (以秒计)  (默认 7200)
date_cache -- 日期转换高速缓存的大小 (以条目计)  (默认 1000)

PLEASE NOTE: 命令行参数可以由位置或关键字指定
。前者的例子是 'sqlload
scott/tiger foo'; 后一种情况的一个示例是 'sqlldr control=foo
userid=scott/tiger'.位置指定参数的时间必须早于
但不可迟于由关键字指定的参数。例如,
允许 'sqlldr scott/tiger control=foo logfile=log', 但是
不允许 'sqlldr scott/tiger control=foo log', 即使
参数 'log' 的位置正确。

C:\>
-----------------

下面是我执行的语句
-----------------
C:\>sqlldr scott/tiger data="D:\Oracle学习\test\sqlloader\实验1\dept2_01.dat"  control="D:\Oracle学习\test\sqlloader\实验1\dept2_01.ctl" log="D:\Oracle学习\test\sqlloader\实验1\dept2_01.log" bad="D:\Oracle学习\test\sqlloader\实验1\dept2_01.bad"

SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 6月 12 22:47:08 2011

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

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

C:\>
-----------------

以及生成的log文件的内容
-----------------

SQL*Loader: Release 10.2.0.1.0 - Production on 星期日 6月 12 22:47:08 2011

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

控制文件:      D:\Oracle学习\test\sqlloader\实验1\dept2_01.ctl
数据文件:      D:\Oracle学习\test\sqlloader\实验1\dept2_01.dat
  错误文件:    D:\Oracle学习\test\sqlloader\实验1\dept2_01.bad
  废弃文件:    未作指定
 
(可废弃所有记录)

要加载的数: ALL
要跳过的数: 0
允许的错误: 50
绑定数组: 64 行, 最大 256000 字节
继续:    未作指定
所用路径:       常规

表 DEPT2,已加载从每个逻辑记录
插入选项对此表 APPEND 生效

   列名                        位置      长度  中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
DEPTNO                              FIRST     *   ,       CHARACTER           
DNAME                                NEXT     *   ,       CHARACTER           
LOC                                  NEXT     *   ,       CHARACTER           


表 DEPT2:
  4 行 加载成功。
  由于数据错误, 0 行 没有加载。
  由于所有 WHEN 子句失败, 0 行 没有加载。
  由于所有字段都为空的, 0 行 没有加载。


为绑定数组分配的空间:                 49536 字节 (64 行)
读取   缓冲区字节数: 1048576

跳过的逻辑记录总数:          0
读取的逻辑记录总数:             4
拒绝的逻辑记录总数:          0
废弃的逻辑记录总数:        0

从 星期日 6月  12 22:47:08 2011 开始运行
在 星期日 6月  12 22:47:09 2011 处运行结束

经过时间为: 00: 00: 00.36
CPU 时间为: 00: 00: 00.26

-----------------

看一下数据库中的表数据
-----------------
SQL> select * from dept2;

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

SQL>
-----------------


【总结一下】
1、创建一个测试用的dept2表。
--------------------
create table dept2
as
select * from dept;
--------------------

2、做成导入用的数据文件dept2_01.dat,逗号分隔符。
--------------------
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON
--------------------

3、做成SQL*Loader用的控制文件dept2_01.ctl
--------------------
LOAD DATA
INFILE *
INTO TABLE dept2
APPEND
FIELDS TERMINATED BY ","
( DEPTNO,
  DNAME,
  LOC
)
--------------------

4、执行SQL*Loader
--------------------
//这个使用的是全路径
C:\>sqlldr scott/tiger  data="D:\Oracle学习\test\sqlloader\实验1\dept2_01.dat"  control="D:\Oracle学习\test\sqlloader\实验1\dept2_01.ctl"  log="D:\Oracle学习\test\sqlloader\实验1\dept2_01.log"  bad="D:\Oracle学习\test\sqlloader\实验1\dept2_01.bad"

//上面这种写法长了点,呵呵,换种写法,先切换了一下基础路径,如下:
C:\>d:
D:\>cd D:\Oracle学习\test\sqlloader\实验1\
D:\Oracle学习\test\sqlloader\实验1>sqlldr scott/tiger  data="dept2_01.dat"  control="dept2_01.ctl"  log="dept2_01.log"  bad="dept2_01.bad"

//也可以再改一下写法:
控制文件改一下dept2_02.ctl
---------
LOAD DATA
INFILE 'dept2_01.dat'
BADFILE 'dept2_01.bad'
INTO TABLE dept2
APPEND
FIELDS TERMINATED BY ","
( DEPTNO,
  DNAME,
  LOC
)
---------
SQL*Loader执行命令
---------
C:\>d:
D:\>cd D:\Oracle学习\test\sqlloader\实验1\
D:\Oracle学习\test\sqlloader\实验1>sqlldr scott/tiger control="dept2_02.ctl"  log="dept2_01.log"
---------
--------------------

以上。
 

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

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

注册时间:2011-03-05

  • 博文量
    261
  • 访问量
    367659