IMP-00038 解决办法

问题描述:

导入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这个错误。

      • 2
        点赞
      • 7
        收藏
        觉得还不错? 一键收藏
      • 0
        评论
      当使用 imp 命令导入 dmp 文件时,注释出现乱码的原因可能是由于字符集不匹配造成的。在导入时,如果字符集设置不正确,导致注释中的特殊字符无法正确显示,从而出现乱码。 为了解决这个问题,可以尝试以下几种方法: 1. 检查源数据库和目标数据库的字符集设置,确保它们是一致的。可以使用以下语句查询当前数据库的字符集: ``` SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER = 'NLS_CHARACTERSET'; ``` 如果字符集不一致,可以考虑在导入之前修改目标数据库的字符集,或者重新导出 dmp 文件时指定正确的字符集。 2. 在 imp 命令中指定正确的字符集参数。可以使用 `CHARSET` 参数来指定源 dmp 文件的字符集,例如: ``` imp system/password@database file=export.dmp fromuser=sourcedb touser=targetdb charset=AL32UTF8 ``` 将 `charset` 的值设置为源数据库使用的正确字符集。 3. 如果注释中包含非ASCII字符,并且目标数据库使用的字符集不支持这些字符,可以考虑在导入前将 dmp 文件中的注释部分转换为合适的字符集。可以使用 Oracle 提供的工具如 `iconv` 或 `AL32UTF8TODUMP` 函数进行转换。 4. 如果以上方法无效,可以尝试使用 Oracle Data Pump 工具 (`impdp`) 进行导入,它通常对字符集处理更加灵活。 请注意,在操作数据库之前,请务必备份相关数据以防止意外情况发生。另外,如果仍然无法解决问题,建议咨询专业的 Oracle 数据库管理员或 Oracle 支持团队以获取更准确的帮助。

      “相关推荐”对你有帮助么?

      • 非常没帮助
      • 没帮助
      • 一般
      • 有帮助
      • 非常有帮助
      提交
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值