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,保证通过客户端打开的时候不是乱码;