jiezhi的建议是最直观的,报告字符集不正确时,请将错误的详细信息贴到论坛上来。
另有一法:
用ultraedit 打开dmp文件,第2,3字节为字符集的16进制编码,将它转化为10进制。
然后在sql*plus中
select nls_charset_name(xxx) from dual;
可查看。

解决方案 »

  1.   

    错误提示如下:
    IMP-00016: required character set conversion (type 31 to 850) not supported
    IMP-00000: Import terminated unsuccessfully
      

  2.   

    用ultraedit打开dmp文件不太方便,备份文件有2G
      

  3.   

    用winhex打开就应该可以了~
    字符集的问题:
    参见:
    使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个2进制文件编辑工具即可,如uedit32。用编辑方式打开导出的dmp文件,获取2、3字节的内容,如00 01,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集:(ultraedit 打开几百M到上G的文件很慢,我试了winHex,哪个速度啊,闪电!)
    SQL> select nls_charset_name(1) from dual;
    NLS_CHARSET_NAME(1)
    -------------------
    US7ASCII
    可以知道该dmp文件的字符集为US7ASCII,如果需要把该dmp文件的字符集换成ZHS16GBK,则需要用NLS_CHARSET_ID获取该字符集的编号:
    SQL> select nls_charset_id('zhs16gbk') from dual;
    NLS_CHARSET_ID('ZHS16GBK')
    --------------------------
                  852
    把852换成16进制数,为354,把2、3字节的00 01换成03 54,即完成了把该dmp文件字符集从us7ascii到zhs16gbk的转化,这样,再把该dmp文件导入到zhs16gbk字符集的数据库就可以了。(注意,十进制数与十六进制之间的转换,想明白其中的道理)SQL> select nls_charset_id('zhs16cgb231280') from dual;NLS_CHARSET_ID('ZHS16CGB231280')
    --------------------------------
                                 850字符集            代码(十进制)   对应的dmp文件(2、3字节/二进制)
    ZHS16CGB231280    850              03 52
    ZHS16GBK          852              03 54