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

title %}管理员页面{% endblock %} {% block content %} <h2>用户列表</h2> <table class="table"> 这个错误通常是由于环境字符集与导入数据的字符集不兼容导致的。可能需要检<thead> <tr> <th>ID</th> <th>用户名</th> <th>密码</th> 查以下几个方面: 1. 环境变量设置是否正确。可以使用以下命令检查: ``` echo <th></th> </tr> </thead> <tbody> {% for user in users %} <tr $NLS_LANG ``` 如果输出为空或者不正确,可以尝试设置正确的字符集,如: > <td>{{ user[0] }}</td> <td>{{ user[1] }}</td> <td>{{ user[ ``` export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 ``` 2. 确认导入数据的字符集2] }}</td> <td> <a href="/admin_edit_user/{{ user[0] }}" class="btn btn-default">是否与数据库字符集一致。可以使用以下命令查看数据库字符集: ``` select * from nls_database_parameters编辑</a> <form action="/admin_delete_user/{{ user[0] }}" method="post" style="display:inline"> where parameter='NLS_CHARACTERSET'; ``` 如果导入数据的字符集与数据库字符集不一致,可以尝 <button type="submit" class="btn btn-default">删除</button> </form> </td> </试使用 `iconv` 等工具进行转换。 3. 确认导入数据文件的编码格式是否正确。可以tr> {% endfor %} </tbody> </table> <a href="/admin_add_user" class="btn btn-primary">添加使用以下命令查看文件编码: ``` file -i filename ``` 如果文件编码格式不正确用户</a> {% endblock %} ``` `admin_add_user.html`: ```html {% extends 'base.html' %} {% block title %}添加用户{% endblock %} {% block content %} <h2>添加用户</h2> <form method="post"> ,可以使用 `iconv` 等工具进行转换。 希望这些信息能够帮到你解决问题。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pierre_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值