specified length too long for its datatype错误解决

1、导入过程报:ORA-00910: specified length too long for its datatype错误,如下所示:
[email protected]:~> impdp kevin/kevin  tables=kevin_emp  directory=data_pump_dir  dumpfile=kevin_part1.dmp,kevin_part2.dmp,kevin_part3.dmp,kevin_part4.dmp logfile=impdp_kevin.log parallel=4

Processing object type TABLE_EXPORT/TABLE/TABLE
ORA-39083: Object type TABLE failed to create with error:
ORA-00910: specified length too long for its datatype
Failing sql is:
CREATE TABLE "kevin"."kevin_emp" ("SISDN" VARCHAR2(13 BYTE), "AU" NVARCHAR2(4000), "DTIME" VARCHAR2(8 BYTE)) 

2、导致以上错误,是因为源数据库的国家字符集为UTF8,目标数据库的国家字符集为AL16UTF16,
查看国家字符集可以通过如下SQL查询:
select value from nls_database_parameters t where t.PARAMETER='NLS_NCHAR_CHARACTERSET'
国家字符集:
    (1)用以存储NCHAR, NVARCHAR2, NCLOB等类型数据
    (2)国家字符集实质上是为oracle选择的附加字符集,主要作用是为了增强oracle的字符处理能力,因为NCHAR数据类型可以提供对亚洲使用定长多字节编码的支持,
而数据库字符集则不能。国家字符集在oracle9i中进行了重新定义,只能在unicode编码中的AL16UTF16和UTF8中选择,默认值是AL16UTF16

3、解决办法:
      1、将NVARCHAR2(4000)改为NVARCHAR2(2000),先将表结构创建,NVARCHAR2(2000)已经足够了
SQL> CREATE TABLE "kevin"."kevin_emp" ("MSISDN" VARCHAR2(13 BYTE), "UA" NVARCHAR2(2000), "DTIME" VARCHAR2(8 BYTE));

      2、在之前的expdp语句中,添加content=data_only TABLE_EXISTS_ACTION=append,顺利将数据导入,如下所示:
[email protected]:~> impdp kevin/kevin  tables=kevin_emp content=data_only TABLE_EXISTS_ACTION=append directory=data_pump_dir  dumpfile=kevin_part1.dmp,kevin_part2.dmp,kevin_part3.dmp,kevin_part4.dmp logfile=impdp_kevin.log parallel=4
Starting "kevin"."SYS_IMPORT_TABLE_01":  kevin/******** tables=kevin_emp content=data_only TABLE_EXISTS_ACTION=append directory=data_pump_dir dumpfile=kevin_part1.dmp,kevin_part2.dmp,kevin_part3.dmp,kevin_part4.dmp logfile=impdp_kevin.log parallel=4
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "kevin"."kevin_emp"           119.7 MB 5300576 rows
Job "kevin"."SYS_IMPORT_TABLE_01" successfully completed at 18:10:18

 

你可能感兴趣的:(long,for,导入导出,length,specified,dataType,too,its,ORA-00910)