Exp Imp 导入导出常见问题解决方法-字符集的后续问题

时间:2022-02-27 06:39:51

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

再次查询,问题解决