在使用Oracle 11g在导入备份文件dmp时,总有几个表没有导入成功,提示:
由于Oracle错误而拒绝行,列xx.xx的值太大(实际值:8,最大值:6)
解决办法:
- cmd,打开dos;
- 打开sqlPlus,提示输入用户名/密码 as sysdba 登录;
- 查看字符集编码:select userenv('language') from dual;(注意有分号)
查询出的结果:
SIMPLIFIED CHINESE_CHINA.AL32UTF8;
查询字符集结果如果是AL32UTF8
需要更改字符集为ZHS16GBK
这是因为:
AL32UTF8:一个汉字占三个字节;
ZHS16GBK:一个汉字占两个字节;
标识符过长:表名、列名最长只能30个字节。很明显是因为编码问题,导致备份dmp中有的中文字符过长,无法插入。
只需要更改编码即可:
C:\Users\Administrator>> sqlplus /nolog;(该命令不是在sql中执行的,请注意)
SQL> conn /as sysdba;
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> ALTER DATABASE CHARACTER SET ZHS16GBK;
SQL>shutdown immediate;
SQL>startup;