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

来源:互联网 发布:windows sdk 8.1 编辑:程序博客网 时间:2024/06/08 06:30

问题描述:

导入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                      800MAUTOEXTEND                ON MAXSIZE                   20000MEXTENT 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这个错误。

0 0
原创粉丝点击