sqluldr2和sqlldr配合导入导出带有clob字段的问题

ifvlr 2017-02-15 03:55:20
各位好,我在windows环境下用sqluldr2导出一个表,表中带有clob字段,并且clob字段中有部分数据是有回车换行符号在里面的。在sqluldr2的命令中加上table 会自动帮我生成ctl控制文件。但是当我用sqlldr导入时,就各种报错。当然,只导入带有clob字段的表才报错,其他情况好像不报错。


desc M_AM_M_RISKTARGET
risktargetid varchar2(255)
risktargetname varchar2(255)
risktargetdesc clob
risktargettype varchar2(255)
ratio varchar2(255)
auditstate varchar2(128)
modifystate varchar2(128)
estatus char(1)
eversion integer
sourceid varchar2(255)
processinstid varchar2(255)
iscurrentversion char(1)
versiontime timestamp(6)

比如M_AM_M_RISKTARGET 表中有个字段叫RISKTARGETDESC,对于clob类型的字段,sqluldr2生成的控制文件为如下两个。

"LOBF_RISKTARGETDESC" FILLER CHAR(30) ,
"RISKTARGETDESC" LOBFILE("LOBF_RISKTARGETDESC") TERMINATED BY EOF,

然后导入时,就会报错

报错为

SQL*Loader-462: 将 LOB 插入列 "RISKTARGETDESC", 行 6, 表 M_AM_M_RISKTARGET 中时出错
SQL*Loader-646: 列 "RISKTARGETDESC", 行 6, 表 M_AM_M_RISKTARGET 中的 lob 被设置为 EMPTY
SQL*Loader-462: 将 LOB 插入列 "RISKTARGETDESC", 行 7, 表 M_AM_M_RISKTARGET 中时出错
SQL*Loader-646: 列 "RISKTARGETDESC", 行 7, 表 M_AM_M_RISKTARGET 中的 lob 被设置为 EMPTY
SQL*Loader-502: 无法打开数据文件 '25' (在字段 "RISKTARGETDESC" 表 M_AM_M_RISKTARGET 中)
SQL*Loader-553: 未找到文件
SQL*Loader-509: 系统错误: 系统找不到指定的文件。


我的导入导出语句为如下 %%中的内容为传入的参数。可自己设置。

%bin_path%\sqluldr2.exe user=%source_conn% field=":|" table="m_am_m_risktarget" mode="TRUNCATE" file=D:\dwTobg_rap\m_am_m_risktarget.txt query="select * from m_am_m_risktarget t "
sqlldr USERID=%target_conn1% control=D:\dwTobg_rap\m_am_m_risktarget_sqlldr.ctl log=D:\dwTobg_rap\m_am_m_risktarget.log bad=D:\dwTobg_rap\m_am_m_risktarget.bad



如果大家对于我描述的内容不够明确,可以自己建一个带clob字段,并且该字段中有回车换行符,然后用sqluldr2
...全文
1840 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
m0_37947479 2018-11-28
  • 打赏
  • 举报
回复
你怎么导出clob的,我试过导出clob太大会报错?设置safe=yes也没用,请问你怎么解决的?
ifvlr 2017-02-15
  • 打赏
  • 举报
回复
引用 1 楼 ifvlr 的回复:
如果大家对于我描述的内容不够明确,可以自己建一个带clob字段的表,并且该字段中有回车换行符,然后用sqluldr2加上table参数导出,然后用sqlldr工具导入到新环境 1 如何保证数据能不报错导入。2如何保持和原表中一样的格式,包括原表中的回车换行符也要导入。
一楼漏了两个字。。
ifvlr 2017-02-15
  • 打赏
  • 举报
回复
如果大家对于我描述的内容不够明确,可以自己建一个带clob字段,并且该字段中有回车换行符,然后用sqluldr2加上table参数导出,然后用sqlldr工具导入到新环境,1 如何保证数据能不报错导入。2如何保持和原表中一样的格式,包括回车换行符。
ODU全称为Oracle Database Unloader,是类似于Oracle的DUL的软件,用于直接从Oracle数据库的数据文件中获取表数据。在各种原因造成的数据库不能打开时,用于抢救数据,最大限度地减少数据丢失。 ODU有什么功能特点? 支持的Oracle数据库版本包括8i,9i,10g,11g 自动检测数据文件的表空间号和文件号 在有SYSTEM表空间的情况下,自动获取数据字典信息。 支持各种表,普通的HEAP表,IOT表,聚簇(CLUSTER)表。 DESC表,以显示表的列定义 支持10g及以上的大文件(BigFile)表空间 列出表的分区和子分区 支持表被truncate后的数据恢复 支持表被drop后的数据恢复 支持压缩表 支持在没有SYSTEM表空间和数据字典损坏的情况下恢复数据,在没有数据字典可用时,ODU能够自动判断数据的类型 支持IOT表导出: 普通IOT表的导出 压缩IOT表的导出 支持IOT表溢出段 支持IOT表分区(包括子分区) 只能在有SYSTEM表空间时才能导出IOT表 支持多种平台的数据库,包括AIX、LINUX、HPUX、SOLARIS、WINDOWS等。能够在一个平台上导出其他平台的数据,比如在Windows 32位系统上,使用AIX系统上的数据文件导出数据。 支持的数据类型包括:NUMBER, CHAR, VARCHAR2, NCHAR,NVARHCAR2, LONG, DATE, RAW, LONG RAW, BLOB, CLOB, TIMESTAMP (9i+) , BINARY FLOAT, BINARY DOUBLE (10g+) 导出的数据格式包括纯文本和DMP文件两种。以纯文本导出时,能够自动生成建表的SQLSQLLDR导入所需的CONTROL文件(.CTL) 支持同一个库中不同的块大小的数据文件。 全面支持LOB字段: 支持CLOB、NCLOB和BLOB CLOB支持Big Endian和Little Endian字节序 支持LOB分区,子分区 支持同一个表中,不同LOB列使用不同CHUNCK SIZE的情况 CLOB数据可以导出到与其他列相同的文件中,或存储到单独的文件中 LOB列只有在SYSTEM表空间存在的情况下才能导出 支持多种字符集之间的转换,能够正确的转换CLOB、NCLOB、NVARCHAR2列类型的数据到指定的字符集。 ODU全面支持64位系统,支持超过4G大小的数据文件。 支持复制操作系统命令不能复制的坏文件 模拟oracle的dump块功能,能够dump数据文件块的数据 目前不支持的功能: 11g的SecureFiles ------------------------ 详细使用说明见 http://www.laoxiong.net/odu

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧