IMP出现的ORA-01401错误可能和字符集有关(转载)

简介:

今天在论坛上,看到有一位朋友问

“我备份数据库后在其他的机器上再导入这个数据库,出现如下错误,并只能导
入部分数据。
IMP-00019: row rejected due to ORACLE error 1401
IMP-00003: ORACLE error 1401 encountered
ORA-01401: inserted value too large for column
我装的是ORACLE8.1.7,最后出现column 1 66790 的提示。
该怎么解决?”

我第一想到,IMP会自动创建表,因此,和表字段长度定义不一致显然无关。

那么可能可以解释的就是,字符集的不一致,导致相同的字符,存储空间需求不一致。

exp从一个single byte字符集的数据库,而imp的是一个多字符集的数据库,就有可能出现这样的问题。如WE8ISO8859P1->UTF8

证明如下:

我的数据库采用WE8ISO8859P1字符集。

   我们来看看,你好这个字符的存储字节情况。

   SQL> select dump('你好',16) from dual;

   DUMP('拿好',16)
   -------------------------
   Typ=96 Len=4: c4,e3,ba,c3

*需要4个字节

 而UTF8情况下呢,

 SQL> select dump(convert('你好','UTF8','WE8ISO8859P1'),16) from dual;

DUMP(CONVERT('拿好','UTF8','WE8ISO88
------------------------------------
Typ=1 Len=8: c3,84,c3,a3,c2,ba,c3,83 

*需要8个字节

因此,当DUMP文件内容被IMP到UTF8的表中,就需要8个字节,使原来的一倍,那么显然就会导致ORA-01401: inserted value too large for column的错误。



    本文转自永春博客园博客,原文链接:http://www.cnblogs.com/firstyi/archive/2007/10/17/927562.html,如需转载请自行联系原作者

相关文章
|
Oracle 关系型数据库 Windows
数据泵报错UDI-03114和ORA-03114
数据泵报错UDI-03114和ORA-03114
448 0
|
Oracle 关系型数据库
oracle学习30-ora-03135和plsql乱码问题
oracle学习30-ora-03135和plsql乱码问题
130 0
oracle学习30-ora-03135和plsql乱码问题
|
Oracle 关系型数据库
pdb字符集
pdb字符集
118 0
|
Oracle 关系型数据库
ORACLE exp/imp导入报错IMP-00009&IMP-00028&IMP-00015
    2017年8月14日,一实施同事使用imp导入exp导出的dmp文件时,遇到报错IMP-00009&IMP,具体报错如图所示: 出现报错的原因可能是dmp文件本身不完整,如果仍要导入数据,可以对imp命令加上commit=yes进行控制,可行的imp导入命令...
2685 0
|
SQL Oracle 关系型数据库
exp-imp实现oracle不同表空间的迁移
  方法一:   --1、修改表空间名称(账号:sys/oracleas SYSDBA 登录) alter tablespace CICHR rename to CICHR_BAK;   alter tablespace USERS rename to CICHR;   --2、导出用户 expcichr-20110804/cichr-20110804@db_192.1
1615 0
EXPDP ORA-31634 ---导出的错误
场景描述:每天晚上一个定时脚本,导出的备份空间不足,手动导出报如下错误: ORA-31634: job already exists(JOB已经存在) ORA-31664: unable to construct unique job name when defaulted(采用...
2712 0
|
关系型数据库 数据库 Oracle