如果你用的WinNT/2000作为OS, 找出EXP时的字符集(NLS_LANG)(在注册表中的ORACLE_HOME下), 然后改变目的数据库的NLS_LANG. IMP后再恢复之前的NLS_LANG值.

解决方案 »

  1.   

    请问怎么改目的数据库的NLS_LANG?我只有dmp文件!
      

  2.   

    好像错误信息不止这点吧!记不大清852是否ASCII7,可否将IMP命令后的信息悉数显示出来[email protected]
      

  3.   

    31是字符集WE8ISO8859P1的编号,由于你国家语言的设置,此处提示方式不同。
    852是字符集ZHS16GBK的编号。
    这两个不是子父集的关系。按以下办法可以导入,但某些字段的值会出现乱码:
    用2进制文件编辑工具如ultraedit打开dmp文件,将2、3字节的00 1F(即31的十六进制)改为03 54 (即852的十六进制),然后即可。
      

  4.   

    31是字符集WE8ISO8859P1的编号,由于你国家语言的设置,此处提示方式不同。
    852是字符集ZHS16GBK的编号
    ----------------------------------------------------------------------
    podded(阿朱) 的解释 + robixiao(阿喜) 的说法 = 问题搞定如果你用的WinNT/2000作为OS, 找出EXP时的字符集(NLS_LANG)(在注册表中的ORACLE_HOME下), 然后改变目的数据库的NLS_LANG. IMP后再恢复之前的NLS_LANG值.
      

  5.   


    不好意思,请问robixiao(阿喜)的办法能行吗?会不会破坏现有数据库的数据?
    我说的是修改倒出的dmp的字符集,试验过,但有些乱码。关注jianggl20 (andyme) !
      

  6.   

    就像podded(阿朱)所说的, 这两个不是子父集的关系, 在IMP后会有些乱码. 在源数据库中的WE8ISO8859P1是存放单字节字符集(非中文)的,而现在的ZHS16GBK是双字节字符集.如果你不愿意看到的乱码,可能你得修变数据库的character set(在安装时确定的, 在sys.props$中可以查到).但改变之后,应该会影响现有数据.如果你是Production数据库的话可能会有点麻烦.