dmp文件是8i导出的,字符集是us7ascii,现在我要导入10g,字符集是ZHS16GBK,导入后显示全是??,怎么解决?Window 2000 Service系统下的,希望给出详细步骤。

解决方案 »

  1.   

    8i以上版本可以通过alter database来修改字符集,但也只限于子集到超集,不建议修改props$表,将可能导致严重错误。
      
      Startup nomount;
      Alter database mount exclusive;
      Alter system enable restricted session;
      Alter system set job_queue_process=0;
      Alter database open;
      Alter database character set us7ascii;
      

  2.   

    dmp是用8i导出的吗,如果是的话,是不能导入高版本的
      

  3.   

    不建议修改现有数据库字符集,因为可能导致现存数据的显示问题。
    解决的办法是转换字符集。如果dmp中的数据还在8i数据库中,可以考虑用spool的方法从8i导出为文本文件,注意在数据导出时,一定要使客户端字符集与源Oracle 服务器字符集一致,这点可以修改注册表 NLS_LANG参数,或者增加NLS_LANG环境变量。
    接下来利用sqlldr把文本文件导入到10i,注意此时要在Sqlldr的控制文件中一定要有这行:CHARACTERSET ZHS16GBK,以实现字符集的转换。如果仅剩下此dmp文件,可新建一个临时的数据库导入后再做上述操作。
      

  4.   

    已经解决了。dmp文件38G,我用UltraEdit把文件的0001改成0354就OK了。
      

  5.   

    用UltraEdit把文件的0001改成0354就OK了。
    ===========================================
    高。