方法1、先exp出来,修改了exp文件的第2、3字节后再IMP进去
方法2、把所有数据都转换为SQL脚本,在AMERICAN_AMERICA.WE8ISO8859P1上运行参考一下这个:http://search.csdn.net/Expert/topic/1998/1998729.xml?temp=.6551477

解决方案 »

  1.   

    1 alter database命令可以修改数据库字符集,但是新的字符集必须是现有字符集的超集。
    即从AMERICAN_AMERICA.WE8ISO8859P1==>SIMPLIFIED CHINESE_CHINA.ZHS16GBK可以,
    但是SIMPLIFIED CHINESE_CHINA.ZHS16GBK==>AMERICAN_AMERICA.WE8ISO8859P1不行。2 那么,你现在能采取的方法,就比较花功夫了。
      (1) 先把数据库结构角本导出来成一个建表角本。在把数据倒出来,我建议你是用一个SQL Server作为一个过渡,先把数据迁过去。
      (2) 要一个新的数据库实例吧。字符集选成AMERICAN_AMERICA.WE8ISO8859P1
      (3) 建表结构,迁移数据。但是,我认为如果考虑这些问题,你就很麻烦了,一个数据表间的外健要在迁回数据后再建,否则,迁移数据就有可能出错。还有,如果结构分复杂,直接引用关系很多,你还是要理清先后关系,这就是花功夫的地方。
      

  2.   

    你说的参数是 nls_language 如果是 window 操作系统可以直接再注册表中进行修改,对应的项为:HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\NLS_LANGUAGE 可以直接修改语言和时间格式,但是字符集只能是原有字符集的超集.修改时可以使用如下的语句:UPDATE PROPS$ SET NLS_CHRSET='' WHERE NLS_CHRSET ='';
      

  3.   

    SQL> SHUTDOWN IMMEDIATE; -- or NORMAL
    <do a full backup>
    SQL> STARTUP MOUNT;
    SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
    SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
    SQL> ALTER DATABASE OPEN;
    SQL> ALTER DATABASE CHARACTER SET <new_character_set_name>;//ZHS16GBK支持中文
    SQL> SHUTDOWN IMMEDIATE; -- or NORMAL
    SQL> STARTUP;