Impdp导入数据时报ORA-02374

http://blog.itpub.net/12679300/viewspace-1326209/

问题背景:今天通过expdp/impdp的方法,把数据库的数据导入到开发人员的台式机上面,居然报ORA-02374的错误;

详细报错如下:

ORA-02374: conversion error loading table "ADM_ERP"."ATTACH"

ORA-12899: value too large for column ZT (actual: 6, maximum: 4)

ORA-02372: data for row: ZT : 0X'D5FDB3A3'

ORA-02374: conversion error loading table "ADM_ERP"."ATTACH"

ORA-12899: value too large for column ZT (actual: 6, maximum: 4)

Expdp和impdp这个工具也用了有段时间了,跨平台跨版本的环境都有试过,但是这次出现的报错一直都没有遇到过,观察了一下发现了问题的所在,源数据库的字符集为ZHS16GBK,目标数据库的字符集AL32UTF8,所以当导入的时候由于字符集不一致导致的;

 

解决方法:

?    这个是个测试环境,所以最初的想法是通过dbca去重新创建数据库,并选择正确的字符集;但是事情总是要有些波折,发现当前的数据库版本是Express Edition,居然不能通过DBCA重新创建数据库,更坑的事,在重新安装的时候,没有任何选线,全部都是使用默认的参数;

?    修改server端字符集(不建议使用),详细的步骤如下:

SQL>SHUTDOWN IMMEDIATE;

SQL>STARTUP MOUNT EXCLUSIVE;

SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;

SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;

SQL>ALTER DATABASE OPEN;

SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;

SQL>SHUTDOWN immediate;

SQL>startup;

 

总结:经过以上操作,数据库便可以顺利的打开了,但是在进行查询的时候,还需要注意客户端的字符集,设置成SIMPLIFIED CHINESE_CHINA.ZHS16GBK,保证通过客户端打开的时候不是乱码;


请使用浏览器的分享功能分享到微信等