oracle imp 错误604,IMP-00058: 遇到 ORACLE 错误 1461

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字符集不同等等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值