且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

oracle exp&imp之IMP-00037: Character set marker unknown

更新时间:2022-01-17 06:43:57

    最近,为地市技术人员做技术支持,碰到一个很奇怪的问题,别人给他提供一个exp的dmp文件,他在本地进行imp的时候报错:IMP-00037:Character set marker unknown
报错信息如下:
C:\Users\localadmin>imp test/oracle file=C:\Users\localadmin\Desktop\jzdjxx.dmp log=C:\Users\localadmin\Deskto
p\jzdjxx.log
Import: Release 11.2.0.1.0 - Production on 星期四 4月 27 11:34:16 2017
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
IMP-00037: 未知字符集标记
IMP-00000: 未成功终止导入
C:\Users\localadmin>
经测试,不是expdp导出的dmp文件,测试信息如下:
C:\Users\localadmin>impdp test/oracle directory=MYEXPDP dumpfile=jzdjxx.dmp logfile=jzdjxx.log
Import: Release 11.2.0.1.0 - Production on 星期四 4月 27 11:31:58 2017
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39001: 参数值无效
ORA-39000: 转储文件说明错误
ORA-31619: 转储文件 "c:\jzdjxx.dmp" 无效
在linux操作系统上,查看该dmp文件的字符集,提示信息如下:
[root@docmaster ~]#  cat jzdjxx.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
5353
正确的字符集标识应该是
0354
数据库中的字符集对照码验证:
SQL> select nls_charset_name(to_number('5353','xxxx')) from dual;
NLS_CHARSET_NAME(TO_NUMBER('5353','XXXX'
----------------------------------------
SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
NLS_CHARSET_NAME(TO_NUMBER('0354','XXXX'
----------------------------------------
ZHS16GBK
   查询oracle官方metalink,提示exp的dmp文件损坏: