同字符集impdp报错ORA-01401

客户有个数据库从HP平台迁移到linux平台,字符集相同。impdp的时候报错ORA-01401了。

不仅仅是在导表结构+数据的时候报错,单独导metadata的时候,也报上面的错。

正常情况下,ORA-01401是因为做insert时,字段长度过长。如定义字段是varchar2(10),插入了11个字符,从而报错。

而impdp报错ORA-01401往往是因为字符集的问题,可以参考ORA-01401 / ORA-12899 / ORA-01461 While Importing Or Loading Data In An AL32UTF8 / UTF8 (Unicode) Or Other Multibyte NLS_CHARACTERSET Database. (Doc ID 1297961.1)。

但是客户的这个数据库源和目标字符集都完全一致。且用csscan检查,也没发现报错。

为啥客户的这个库,甚至还没导数据,在导metadata的时候就报错ORA-01401了呢?

进一步检查,终于发现了问题所在。这个表的定义,通过metadata.get_ddl看到:

注意这里第9行, “ADDED_DATE” VARCHAR2(16) DEFAULT sysdate。而其实sysdate是要19个字符的:

所以这里的表定义是错误的,既然有default sysdate,那么字段类型应该是date型。如果定义成varchar2(16),那么录入的是字符型,不应该带上default sysdate。

相关文章

2条评论

  1. ^_^,那它一定是定义
    export NLS_DATE_FORMAT=’YYYYMMDDHH24:MI:SS’

    SCOTT@book> select length(sysdate),lengthb(sysdate) from dual;

    LENGTH(SYSDATE) LENGTHB(SYSDATE)
    ————— —————-
    16 16

    不然不可能以前ok的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据