Oracle 命令行imp时报值太大(ORA-12899)
不停的循环,提示字段值太大
查看日志
经由常规路径由 EXPORT:V11.02.00 创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
导入服务器使用 AL32UTF8 字符集 (可能的字符集转换)
解决办法是:修改字符集
解决办法:
SQL>select * from V$NLS_PARAMETERS
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 --取消queue monitor 如果是确定没有其他人在用的机器可以不用管
SQL>ALTER DATABASE OPEN
SQL>ALTER DATABASE CHARACTER SET ZHS16GBK
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK
ALTER SYSTEM DISABLE RESTRICTED SESSION
SQL>SHUTDOWN IMMEDIATE
SQL>STARTUP
当时测试确实没有问题
但是后来取数发现了原来数据库中的数据出现了乱码现象。
后来找到一种方法,顺利解决。
思路:先恢复成原来的数据库字符集,然后导出文件,然后再改字符集,然后导入,利用ORACLE 自身将数据集转化。
恢复原来字符集AL32UTF8
shutdown immediate;
startup mount;
alter system enable restricted session;
alter database open;
alter database character set internal_use AL32UTF8;
shutdown immediate;
startup;
导出数据
exp jxc/jxc123 file=jxc2.dmp owner=jxc
或者这样导出
create directory dpdata1 as 'd:\dump';
grant read,write on directory DPDATA1 to jxc;
--按用户导
expdp jxc/jxc123@orcl schemas=jxc dumpfile=jxc2.dmp DIRECTORY=dpdata1
修改字符集ZHS16GBK
shutdown immediate;
startup mount;
alter system enable restricted session;
alter database open;
ALTER DATABASE CHARACTER SET internal_use ZHS16GBK;
shutdown immediate;
startup;
导入数据
--先删除用户,重建用户,后导入
drop user jxc cascade;
CREATE USER "JXC" PROFILE "DEFAULT" IDENTIFIED BY "jxc123" DEFAULT TABLESPACE "JXC001" ACCOUNT UNLOCK;
GRANT "CONNECT" TO "JXC";
GRANT "DATAPUMP_EXP_FULL_DATABASE" TO "JXC";
GRANT "DATAPUMP_IMP_FULL_DATABASE" TO "JXC";
GRANT "DBA" TO "JXC";
GRANT "RESOURCE" TO "JXC";
imp jxc/jxc123 file=jxc2.dmp fromuser=jxc touser=jxc
--或者
impdp jxc/jxc123 DIRECTORY=dpdata1 DUMPFILE=jxc.dmp SCHEMAS=jxc
再次查询,问题解决