oracle中同字符集impdp报错ORA-01401

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

Processing object type SCHEMA_EXPORT/SYNONYM/SYNONYM
Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
Processing object type SCHEMA_EXPORT/SEQUENCE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/TABLE
ORA-39083: Object type TABLE:"MYORDATA"."ASS_ACCHSHT_GREEN_MEMORY" failed to create with error:
ORA-01401: inserted value too large for column
Failing sql is:
CREATE TABLE "MYORDATA"."ASS_ACCHSHT_GREEN_MEMORY" ("GROUP_ID" VARCHAR2(16 BYTE) NOT NULL ENABLE, "ACCOUNT_ID" VARCHAR2(16 BYTE) NOT NULL ENABLE, "ADDED_BY" VARCHAR2(100 BYTE), "ADDED_DATE"
VARCHAR2(16 BYTE) DEFAULT sysdate) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 M
ORA-39083: Object type TABLE:"MYORDATA"."ASS_ACCHSHT_GREEN" failed to create with error:
ORA-01401: inserted value too large for column
Failing sql is:
CREATE TABLE "MYORDATA"."ASS_ACCHSHT_GREEN" ("GROUP_ID" VARCHAR2(16 BYTE) NOT NULL ENABLE, "MATRIX_ID" VARCHAR2(16 BYTE) NOT NULL ENABLE, "GROUP_NAME" VARCHAR2(100 BYTE) NOT NULL ENABLE, "B
ENCHMARK_ID" VARCHAR2(16 BYTE), "GROUP_TYPE" VARCHAR2(2 BYTE), "STATUS" VARCHAR2(1 BYTE), "ADDED_BY" VARCHAR2(100 BYTE), "ADDED_DATE" VARCHAR2(16 BYTE) DEFAULT sysdate, "U
ORA-39083: Object type TABLE:"MYORDATA"."ASS_QUITTK_GREEN" failed to create with error:
ORA-01401: inserted value too large for column
Failing sql is:
CREATE TABLE "MYORDATA"."ASS_QUITTK_GREEN" ("GROUP_ID" VARCHAR2(16 BYTE) NOT NULL ENABLE, "GROUP_NAME" VARCHAR2(100 BYTE) NOT NULL ENABLE, "CREATE_BY" VARCHAR2(100 BYTE), "CREATE_DATE" VARC
HAR2(16 BYTE) DEFAULT sysdate, "UPDATE_BY" VARCHAR2(100 BYTE), "UPDATE_DATE" VARCHAR2(16 BYTE) DEFAULT sysdate) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA

不仅仅是在导表结构+数据的时候报错,单独导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看到:

DBMS_METADATA.GET_DDL('TABLE','ASS_ACCHSHT_GREEN_MEMORY','MYORDATA')
--------------------------------------------------------------------------------
 
  CREATE TABLE "MYORDATA"."ASS_ACCHSHT_GREEN_MEMORY"
   (    "GREEN_ID" VARCHAR2(16) NOT NULL ENABLE,
 
        "ACCOUNT_ID" VARCHAR2(16) NOT NULL ENABLE,
        "ADDED_BY" VARCHAR2(100),
        "ADDED_DATE" VARCHAR2(16) DEFAULT sysdate 
   ) SEGMENT CREATION IMMEDIATE
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MIN
EXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "MYORDATA"

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

SQL> select length(sysdate),lengthb(sysdate) from dual;
 
LENGTH(SYSDATE) LENGTHB(SYSDATE)
--------------- ----------------
             19               19
 
SQL>

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

时间: 2024-09-22 09:35:54

oracle中同字符集impdp报错ORA-01401的相关文章

Oracle中DG备库报错ORA-00313、00312、27037

DATAGUARD配置如下: PROD为主库,SBDB为备库 日志组1-3组为redolog file,4-6组为standby log 在创建standby log后主库关库,使用冷备tar包将数据传输到备库进行的恢复. DG配置完成之后,启动备库之后,备库alert日志报错如下: Errors in file /u01/app/oracle/admin/SBDB/udump/sbdb_rfs_14903.trc: ORA-00313: open failed for members of l

oracle中asm alertlog大量报错Voting file relocation is required in diskgroup

客户将asm的实例配置错了主机,asm1运行在节点2,asm2运行在节点1,在进行de-config和re-config之后,asm的alertlog大量报错: SYMPTOMS: NOTE: Attempting voting file refresh on diskgroup GRID NOTE: Voting file relocation is required in diskgroup GRID NOTE: Attempting voting file relocation on di

weblogic连接池-Java调用Oracle存储过程传入数组参数报错

问题描述 Java调用Oracle存储过程传入数组参数报错 weblogic连接池 JNDI提供的链接保存 Oracle数组 报错 oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection 大家好,我在用weblogic连接池 JNDI

Windows 8应用商店中安装软件出现报错:0x80070585

  故障现象: Windows 8应用商店中安装软件出现报错:0x80070585 解决方案: 1. 重新启动电脑; 2. 按ctrl+alt+delete组合键调出任务管理器; 3. 停止WMPNetworkSvc服务; 4. 重新安装刚才无法运行的软件.

tomcat启动报错-SSH + Oracle 整合开发 启动服务报错,运行查询操作,没影响

问题描述 SSH + Oracle 整合开发 启动服务报错,运行查询操作,没影响 信息: Initializing Spring root WebApplicationContextlog4j:WARN No appenders could be found for logger (org.springframework.web.context.ContextLoader).log4j:WARN Please initialize the log4j system properly.2013-1

jboss-JBOSS4 在运行过程中突然不停地报错DLQ not bound是什么原因?

问题描述 JBOSS4 在运行过程中突然不停地报错DLQ not bound是什么原因? JBOSS4 在运行过程中突然不停地循环报错DLQ not bound,但是运行系统连接JBOSS还是正常的,而且业务也能正常执行,请问这个是什么原因导致的呢?怎么预防和停止报错?

java-myeclipse中Java导出项目报错

问题描述 myeclipse中Java导出项目报错 解决方案 出现这个问题是因为编译的时候编码跟文件存储的编码方式不一样造成的,你可以参考下这篇blog,希望对你有帮助. 解决方案二: 那你看下这个问题和答案,也许可能有你需要的 解决方案三: 刚刚那个忘插入链接了

android-在安卓studio中运行项目总是报错,有人知道怎么解决吗?

问题描述 在安卓studio中运行项目总是报错,有人知道怎么解决吗? Error:A problem occurred configuring project ':app'. Could not resolve all dependencies for configuration ':app:_debugCompile'. Could not find any version that matches com.android.support:appcompat-v7:23.+. Searched

tring format报错-在myEclipse9.0中运行String.format报错

问题描述 在myEclipse9.0中运行String.format报错 错误信息:The method format(String, Object[]) in the type String is not applicable for the arguments (String, String) 源代码: public void test1(){ String str=null; str=String.format("Hi, %s", "林计钦"); // 格式化