你可以导出数据库 a的dmp文件,然后用二进制编辑器打开该dmp文件,修改dmp文件中的字符集,就在文件头可以找到

解决方案 »

  1.   

    http://www.ncn.cn/oracle/admin/nls_convert1.htm
    http://www2.ccw.com.cn/tips/9906/062804_04.asp
      

  2.   

    set nls_lang = '你导出的字符集'
    然后导入
      

  3.   

    from csdn.net
    使用一点点技巧,就可以使导出/导入在不同的字符集的数据库上转换数据。这里需要一个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
    以前一直用oracle8.0.5  ,  安装好  oracle8.1.6    后发现SQL*Plus可以用,SQL*WorkSheet  总出现乱码,改了字符集也不对  
    ---------------------------------------------------------------  
     
    解决办法:  
    在$ORACLE_HOME\sysman\config目录下有一个配置文件名为dbappscfg.properties,找到这样一项,#SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1    
    去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK  
    对于Windows操作系统,还需要修改一项,在文件中找到#  SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为  SQLPLUS_SYSTEMROOT=d:\\WINNT。  
    修改完成后,保存文件,退出编辑。重新连接SQL  PLUS  Worksheet,OK!  
     
    ---------------------------------------------------------------  
     
    对于Oracle  Enterprise  Manager中的所有工具,有一个配置文件名为dbappscfg.properties,修改该文件即可解决上述问题。这个文件的位置在$ORACLE_HOME\sysman\config目录下,用任何的文本编辑器打开该文件,在这个文件里面,找到这样一项,  
    #  SQLPLUS_NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1    
    去掉注释符#,同时将其修改为SQLPLUS_NLS_LANG=AMERICAN_AMERICA.ZHS16GBK。  
    对于Windows操作系统,还需要修改一项,在文件中找到#  SQLPLUS_SYSTEMROOT=c:\\WINNT40,去掉注释符,将其修改为你所在机器的操作系统主目录。如操作系统的主目录在D盘的Winnt下,则将其修改为  SQLPLUS_SYSTEMROOT=d:\\WINNT。  
    对于后面一项的修改只对Windows操作系统进行,对UNIX操作系统则不需要。如果在Windows操作系统中不修改该项,在Oracle  Enterprise  Manager中,连接系统时,会提示如下的错误:  
    ORA-12560  TNS:protocol  adapter  error    
    或者    
    ORA-12545  Connect  failed  because  target  host  or  object  does  not  exist    
    修改完成后,保存文件,退出编辑。重新连接SQL  PLUS  Worksheet,字符集乱码问题得到解决,显示正确的简体中文字符集。
      

  4.   

    我处理此类就是:两个oracle都导出一个dmp文件,然后用二进制编辑器打开,比较第一行,从第五个开始比较,直到第八个字符,把这个4对字符串设置成一样即可,
    也就是说:二进制文件中第一行从第五对字符到第八队字符,这中间的四对字符就代表的是oracle字符集信息