30 IMP-00019: row rejected due to ORACLE error 12899 转

30 IMP-00019: row rejected due to ORACLE error 12899 转

今天导入用户时再次遇到了ORA-12899,报错如下:
IMP-00019: row rejected due to ORACLE error 12899
IMP-00003: ORACLE error 12899 encountered
ORA-12899: value too large for column "USER1"."VNSTAT"."VNNAME" (actual: 34, maximum: 30)
确实如下面所说,出现这种问题是因为导出库和导入库的字符集不一致。
我这发现只有VNSTAT这一张表导入时,出了问题,所以没必要改库字符集。
我觉得可以这么做:truncate该表,把该表问题列改大,最后重新只导入该表数据。
具体如下:
truncate table USER1.VNSTAT;
alter table USER1.VNSTAT modify vnname VARCHAR2(50);
imp userid=system/*** fromuser=user1 touser=user1 file=user1.dmp log=imp_user1.log buffer=800000000 commit=y data_only=y statistics=none

其实发现即时导入时报了ORA-12899,但导完查询该列时,没有受到影响。分析为:虽然VNSTAT.VNNAME为VARCHAR2(30),实际上该列没有数据用到30个字符。但如果数据太重要,还是不放心的话,可以用我上面的方式重新导入该表数据。

 

 

以下是原来的转帖,可在很多表报ORA-12899时参考。

IMP-00019: row rejected due to ORACLE error 12899
IMP-00003: ORACLE error 12899 encountered
ORA-12899: value too large for column "CRM"."BK_ECS_ORDER_INFO_00413"."POSTSCRIPT" (actual: 895, maximum: 765)导入日志报 IMP-00019: 由于 ORACLE 错误 12899 而拒绝行
IMP-00003: 遇到 ORACLE 错误 12899
ORA-12899: 列 "JACKEYJ"."JK_REGISTER"."OPNAME" 的值太大 (实际值: 21, 最大值: 20)
出现这种问题时因为生产库的字符集和本机测试库的字符集不一样。

到生产库上用

select userenv('language') from dual;

查看到是ZHS16GBK,而本机库是utf-8用一下命令修改本机库字符集

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP MOUNT

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 CHARACTER SET INTERNAL_USE ZHS16GBK;

SQL>SHUTDOWN IMMEDIATE

SQL>STARTUP

设置后导入成功!还有注意一点就是建表空间和用户时要和生产库的表空间名称、数据文件名称、用户名、密码都要一致;接下来就是Tomcat了 我用的时免安装版的结果启动Tomcat一打开就关闭,这是因为没有配环境变量。配置如下:右键我的电脑-属性-高级-环境变量-系统变量下新建变量名JAVA_HOME 变量值D:\Program Files\Java\jdk1.5.0_06(路径时你安装JDK的路径)点击确定后Tomcat就能启动。

猜你喜欢

转载自j1017631563.iteye.com/blog/2079118