[Oracle] sqlldr生成logfile的文件名导致segmention fault _MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4112 | 回复: 0   主题: [Oracle] sqlldr生成logfile的文件名导致segmention fault         下一篇 
wayne
注册用户
等级:中校
经验:1690
发帖:221
精华:0
注册:2011-7-21
状态:离线
发送短消息息给wayne 加好友    发送短消息息给wayne 发消息
发表于: IP:您无权察看 2011-9-8 21:30:56 | [全部帖] [楼主帖] 楼主

尝试利用SQLLDR导入包含LOB的对象,当LOB文件的路径和名称在数据文件中分开保存,利用单独的字段通过EXPRESSION的方式来获得完整路径,并通过这个字段来加载LOB时,出现SEGMENTATION FAULT错误。

测试表结构如下:

SQL> DROP TABLE T_LOAD_LOB PURGE;


表已删除。

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


表已创建。

控制文件如下:

LOAD DATA
INFILE *
INTO TABLE T_LOAD_LOB
FIELDS TERMINATED BY ','
(ID CHAR(255),
DIRECTORY CHAR(255),
NAME CHAR(255),
FULL_NAME EXPRESSION "DIRECTORY '' NAME",
CREATE_DATE SYSDATE,
CONTENTS LOBFILE(FULL_NAME) TERMINATED BY EOF)
BEGINDATA


1,d:studyyangtkothers,2006年总结.doc
2,d:studyyangtkothers,2007Oracle开发者大会(一).doc
3,d:studyyangtkothers,2007Oracle开发者大会(二).doc
4,d:studyyangtkothers,2007年总结.doc

.
.
.


74,d:studyyangtkothers,问题诊断和PLSQL方面.doc

执行导入过程:

D:TEMP>SQLLDR TEST/TEST CONTROL=SQLLDR_LOB2.CTL


SQL*Loader: Release 10.2.0.5.0 - Production on 星期六 8月 6 22:40:44 2011

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


在windows环境下会弹出对话框,说明sqlldr.exe已停止工作。描述信息为:出现了一个问题,导致程序停止正常工作。如果有可用的解决方案,Windows将关闭程序并通知您。

对应的LOG文件为空,数据库告警日志文件中也没有任何记录。

开始以为是Windows环境的问题,尝试重启数据库,问题依旧。索性重启了Windows环境,发现问题依然,开始怀疑问题并不是Windows下特有的。

尝试了Windows下10.2.0.5和11.2.0.1环境的sqlldr,出现同样的错误。

于是修改控制文件,使之可以在Linux环境下运行:

[oracle@yans1 ~]$ vi sqlldr_lob.ctl
LOAD DATA
INFILE *
INTO TABLE T_LOAD_LOB
FIELDS TERMINATED BY ','
(ID CHAR(255),
DIRECTORY CHAR(255),
NAME CHAR(255),
FULL_NAME EXPRESSION ":DIRECTORY '/' :NAME",
CREATE_DATE SYSDATE,
CONTENTS LOBFILE(FULL_NAME) TERMINATED BY EOF)
BEGINDATA
1,/home/oracle,t_stat1.dp
2,/home/oracle,t_stat.dmp
3,/home/roacle,t_stat.dp


执行导入时,出现了SEGMENTATION FAULT的错误:

[oracle@yans1 ~]$ sqlldr test/test control=sqlldr_lob.ctl


SQL*Loader: Release 10.2.0.3.0 - Production on 星期六 8月 6 20:18:07 2011

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


可以看到,这个错误在各个版本中普遍存在,如果去掉LOB的加载,则不会存在任何的错误,而如果FULL_NAME是通过数据文件中读取而不是这种EXPRESSION的方式,同样可以成功加载。

Oracle的metalink上找不到类似的问题,怀疑SQLLDR不支持EXPRESSION作为LOGFILE读取的参数,不过不管如何,出现SEGMENTATION FAULT都是不应该的。


该贴被蜀山战纪编辑于2015-12-3 16:34:43



赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论