概述
IMP-00058: 遇到 ORACLE 错误 1461
ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
问题描述:
------------------------------------------
1、出版社使用的数据库为Oracle v11.2.0.3.0
2、导入数据前,将数据库同名表及数据删除
3、通过SQL命令:“ IMP 用户名/密码@服务器名 file=dmp文件路径 indexes=n grants=n constraints=n statistics=none fromuser=data_user touser=用户名 tables=(导入表名) ” 导入数据(导入用户的默认表空间足够大)
4、执行中发生错误:
“连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
经由常规路径由 EXPORT:V11.01.00 创建的导出文件
警告: 这些对象由 DATA_USER 导出, 而不是当前用户
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
. 正在将 DATA_USER 的对象导入到 SPT
. . 正在导入表 "GG_WJ_JSBG"
IMP-00058: 遇到 ORACLE 错误 1461
ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
IMP-00028: 上一个表的部分导入已回退: 回退 873250 行
成功终止导入, 但出现警告。
------------------------------------------
事情经过:
在电子审批库上使用exp命令导出了几张表
exp DATA_USER/fl5q9at7 file=/arch_p/chubanshe_20141211.dmp log=/oracle/chubanshe_20141211.log tables=gg_wj_jsbg,ss_scgz_dbwjyyb,gg_wj_xgzlwx,gg_wj_xgfzlwx
出版社拿到dmp文件后导入时报以上问题描述(邮件内容)中的错误。
源库字符集:
通过SQL> select * from nls_database_parameters; 得到字符集为 ZHS16GBK
目的字符集:AL32UTF8
SQL> desc data_user.gg_wj_jsbg;
Name Type Nullable Default Comments
------------ -------------- -------- ------- ----------------------------------------------------------------------------------
RID NUMBER(38) 本字段无具体的业务意义,绝大部分表都增加本字段作主键,不使用有业务意义的字段作主键
SHENQINGH VARCHAR2(16)
WENJIANCFLJ VARCHAR2(256) Y
JIANSUOBH VARCHAR2(64) Y
JIANSUOFLH VARCHAR2(2048) Y
JIANSUOBDS VARCHAR2(4000) Y
JIANSUOBGLX VARCHAR2(16) Y 0 首次检索1 补充检索
JIANSUOBGJL VARCHAR2(64) Y
XINGSHENR VARCHAR2(64) Y
JIANSUOY VARCHAR2(64) Y
SHENHER VARCHAR2(64) Y
JIANSUORQ CHAR(8) Y
JIANSUOBGFCR CHAR(8) Y
YOUXIAOBJ VARCHAR2(4) Y 0 有效1 无效
REGNAME VARCHAR2(64) Y
REGTIME NUMBER(38) Y
MODNAME VARCHAR2(64) Y
MODTIME NUMBER(38) Y
QUANLIYQXS VARCHAR2(1024) Y
SHUOMINGSYS VARCHAR2(1024) Y
BEIZHU VARCHAR2(1024) Y
SHENCHAYXM VARCHAR2(256) Y
SHENCHABM VARCHAR2(256) Y
IPCFLH VARCHAR2(2000) Y
SHUOMINGSYX VARCHAR2(1024) Y
SXITONGTSR VARCHAR2(14) Y
从源表结构上可以看到 JIANSUOBDS VARCHAR2(4000)。VARCHAR2最大长度是4000,超过4000将以long类型存储。 ZHS16GBK 每个汉字占2个字节,AL32UTF8每个汉字占3个字节。源表中长度为4000的字段
到目的库时长度超标了,会当做LONG类型,而这一列bonding的是VARCHAR2.所以报这个错。
解决方法:
使用expdp和impdp就没问题
1、目的库那边是个人自己的测试库,所以让他们重新建一个ZHS16GBK字符集的实例
2、查看源表长字段最长存了多少字节
SQL> select length(max(t.JIANSUOFLH)),length(max(t.JIANSUOBDS)),length(max(t.Ipcflh)),max(t.Ipcflh) from data_user.gg_wj_jsbg t;
LENGTH(MAX(T.JIANSUOFLH)) LENGTH(MAX(T.JIANSUOBDS)) LENGTH(MAX(T.IPCFLH)) MAX(T.IPCFLH)
------------------------- ------------------------- --------------------- --------------------------------------------------------------------------------
16 106 71 针对审查员在第一次审查意见通知书中提出的审查意见,申请人提交了意见陈述书以及经过
如果不行可以通过create table temp_gg_wj_jsbg as select * from gg_wj_jsbg.
然后 alter table temp_gg_wj_jsbg modify JIANSUOBDS VARCHAR2(400) ;----收缩一下长度
alter table temp_gg_wj_jsbg add constraint temp_gg_wj_jsbg_pk primary key (RID);
网上对原因的罗列:
-----------------------------------------------------------------------------------------
IMP-00058: 遇到 ORACLE 错误 1461
ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值
IMP-00028: 上一个表的部分导入已回退: 回退 36 行
可能有以下几种原因:
[1]插入到字符串长度大于4000字节。
[2]插入到表中的记录的某个字段数据的实际长度大于2000个字节(如果是UTF-8,则是1333个字节);或者是插入的记录中有两个或两个以上长度大于2000字节的字符串。
[3]数据库与客户端的JDBC驱动不匹配。
[4]服务器A和服务器B字符集不同等等。
最后
以上就是微笑河马为你收集整理的oracle imp 错误604,IMP-00058: 遇到 ORACLE 错误 1461的全部内容,希望文章能够帮你解决oracle imp 错误604,IMP-00058: 遇到 ORACLE 错误 1461所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复