ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 利用SQLLDR加载包含LOB对象的数据(一)

利用SQLLDR加载包含LOB对象的数据(一)

原创 Linux操作系统 作者:yangtingkun 时间:2011-08-05 23:56:52 0 删除 编辑

简单描述一下通过第二数据文件方式加载LOB类型的方法。

这里给出一个最简单的加载例子。

 

 

利用SQLLOADER来加载LOB数据,根据LOB数据的存储方式的不同方法也不相同,如果LOB数据和其他列数据存储在一起,那么加载LOB其实和其他列没有太大的区别,但是这种情况一般来说也比较少见。而一般常见的情况是,每个LOB都单独存储在一个文件中,而主数据文件中包含每条记录对应的LOB文件的路径和名称。因此这里主要讨论这种情况。

这篇文章讨论最简单的方式,数据文件中记录的是完整的路径和文件名,而表中有一个单独的字段存储这部分内容。

表结构如下:

SQL> CREATE TABLE T_LOAD_LOB
2 (ID NUMBER PRIMARY KEY,
3 NAME VARCHAR2(100),
4 CREATE_DATE DATE,
5 CONTENTS BLOB);

表已创建。

独立的LOB文件来自我的一些文档,控制文件如下:

LOAD DATA
INFILE *
INTO TABLE T_LOAD_LOB
FIELDS TERMINATED BY ','
(ID CHAR(255),
NAME CHAR(255),
CREATE_DATE SYSDATE,
CONTENTS LOBFILE(NAME) TERMINATED BY EOF)
BEGINDATA
1,d:\study\yangtk\others\2006
年总结.doc
2,d:\study\yangtk\others\2007Oracle
开发者大会(一).doc
3,d:\study\yangtk\others\2007Oracle
开发者大会(二).doc
4,d:\study\yangtk\others\2007
年总结.doc
.
.
.
74,d:\study\yangtk\others\
问题诊断和PLSQL方面.doc

利用sqlldr执行导入:

D:\TEMP>SQLLDR TEST/TEST CONTROL=SQLLDR_LOB.CTL

SQL*Loader: Release 10.2.0.5.0 - Production on 星期五 8 5 17:54:37 2011

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

达到提交点 - 逻辑记录计数 64
达到提交点 - 逻辑记录计数 73
达到提交点 - 逻辑记录计数 74

对应的LOG信息为:

SQL*Loader: Release 10.2.0.5.0 - Production on 星期五 8 5 17:54:37 2011

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

控制文件: SQLLDR_LOB.CTL
数据文件: SQLLDR_LOB.CTL
错误文件: SQLLDR_LOB.bad
废弃文件: 未作指定

(
可废弃所有记录)

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

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

列名 位置 长度 中止 包装数据类型
------------------------------ ---------- ----- ---- ---- ---------------------
ID FIRST 255 , CHARACTER
NAME NEXT 255 , CHARACTER
CREATE_DATE SYSDATE
CONTENTS DERIVED * EOF CHARACTER
动态 LOBFILE。 文件名在字段 NAME


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


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

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

从 星期五 8 05 17:54:37 2011 开始运行
在 星期五 8 05 17:54:45 2011 处运行结束

经过时间为: 00: 00: 07.40
CPU
时间为: 00: 00: 00.28

检查数据库中导入信息:

SQL> SELECT ID, NAME, TO_CHAR(CREATE_DATE, 'YYYY-MM-DD HH24:MI:SS')
  2  FROM T_LOAD_LOB;

        ID NAME                                                         TO_CHAR(CREATE_DATE
---------- ------------------------------------------------------------ -------------------
         1 d:\study\yangtk\others\2006
年总结.doc                        2011-08-05 17:54:40
         2 d:\study\yangtk\others\2007Oracle
开发者大会(一).doc        2011-08-05 17:54:40
         3 d:\study\yangtk\others\2007Oracle
开发者大会(二).doc        2011-08-05 17:54:40
         4 d:\study\yangtk\others\2007
年总结.doc                        2011-08-05 17:54:40
.
.
.
        74 d:\study\yangtk\others\
问题诊断和PLSQL方面.doc               2011-08-05 17:54:45

已选择74行。

至于BLOB字段的内容是否导入成功,可以借助全文索引来进行检查:

SQL> CREATE INDEX IND_T_LOB_CONTENTS
2 ON T_LOAD_LOB (CONTENTS)
3 INDEXTYPE IS CTXSYS.CONTEXT;

索引已创建。

SQL> SELECT COUNT(*)
2 FROM T_LOAD_LOB
3 WHERE CONTAINS(CONTENTS, 'ORACLE') > 0;

COUNT(*)
----------
        52

 

 

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

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1954
  • 访问量
    10651649