IMP-00038: Could not convert to environment character set's handle

问题描述:

导入dmp文件,发现字符集不一致无法执行imp。报错信息:
IMP-00038: Could not convert to environment character set’s handle
IMP-00000: Import terminated unsuccessfully

原因分析

原以为是字符集不一致导致的问题,查看dmp文件中的字符集为ZHS16GBK,本地环境及数据库均为UTF-8。但后来,在本地特意创建了一个采用gbk字符集的数据库实例,仍然无法导入。
后来确认,是因为对方在导出时,采用的是expdp,而不是exp(对方把导出的dmp文件命名为exp_2015xx.dmp,被误导了)。

解决办法

改用impdp数据泵导入,导入成功。

--采用数据泵方式导入,需要预先将dmp文件放置到指定的directory目录下,
--可通过以下命令查看数据库已有的目录:
select * from DBA_DIRECTORIES;

--本例为导入某张表到指定用户,需要预先将目录权限赋予该用户。
grant read,write on directory DATA_PUMP_DIR to yaclm;

--导入时报错,发现是未找到指定表空间,因此还需要创建一个表空间
CREATE TABLESPACE YAMOBILEDB_TBS 
DATAFILE                  'D:\oracle\tablespaces\YAMOBILEDB_TBS.DBF'
SIZE                      800M
AUTOEXTEND                ON 
MAXSIZE                   20000M
EXTENT MANAGEMENT LOCAL   UNIFORM
;

以上准备妥当,执行导入过程:

impdp user/password@localhost/sid DIRECTORY=DATA_PUMP_DIR DUMPFILE=exp_2015xx.dmp REMAP_SCHEMA=SRCUSER:user
#REMAP_SCHEMA配置原表用户名:新表用户名的映射关系

执行后,导入成功。用user登陆数据库,查询到新表已经成功导入。

结论:

当采用expdp导出dmp后,若采用imp导入dmp,就会报imp-00038这个错误。

你可能感兴趣的:(#,Oracle,oracle11,dmp)