imp导入时出现:不支持要求的字符集转换(从类型1到852)

一、导出/导入在不同的字符集的数据库上转换。  
  需要一个2进制文件编辑工具即可,如uedit32。用编辑方式打开导出的dmp文件,获取2、3字节的内容,如00   01,先把它转换为10进制数,为1,使用函数NLS_CHARSET_NAME即可获得该字符集:    
  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字符集的数据库就可以了。

二、修改注册表:  
  从旧的数据库里获得字符集的键值:  
  有3个地方:  
  HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/NLS_LANG  
  HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0/NLS_LANG  
  HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/ALL_HOMES/ID0/NLS_LANG  
  找到原数据库的键值,然后在新的数据库里对应的位置把键值复制过来就可以了。  
  这是最简单的办法了。

三、1、将windows系统中的oracle注册表  
   
  [HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE]中的[NLS_LANG]键值  
  “SIMPLIFIED   CHINESE_CHINA.ZHS16GBK”改成  
  “American_America.WE8ISO8859P1”  
  2、用system用户的身份,在Sql-plus   下执行以下语句:  
    update   sys.props$   set   value$='WE8ISO8859P1'   where   name='NLS_CHARACTERSET';  
    update     sys.props$   set   value$='WE8ISO8859P1'   where   name='NLS_NCHAR_CHARACTERSET';  
    commit;  
  3、重新启动oracle  
  4、开始导入数据库  
  userid   =   用户名/密码@连结串  
  buffer   =   60000  
  log   =   c:/dmp.log  
  file   =   c:/导入数据文件名称.dmp  
  fromuser   =   用户名  
  touser   =   用户名  
        这里要注意,要确保导入的表空间和用户已经建立并与导出文件一至,还要确认用户是否拥有dba的权限,否则有可能会影响导入数据的完整。  
   
  5、检查导入效果,在目前环境下,测试数据是否正确,是否有乱码,是否有未成功导入的表和其他触发器、过程和函数等信息。确认导入没有问题后,进入到下一步。  
   
  6、将win2000下oracle字符集环境恢复成中文字符集。  
  [HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE]中的[NLS_LANG]键值  
  “American_America.WE8ISO8859P1”   改回  
  “SIMPLIFIED   CHINESE_CHINA.ZHS16GBK”    
  7、用system用户的身份,在Sql-plus   下执行以下语句:  
    update   sys.props$   set   value$='   ZHS16GBK   '   where   name='NLS_CHARACTERSET';  
    update     sys.props$   set   value$='   ZHS16GBK   '   where   name='NLS_NCHAR_CHARACTERSET';  
    commit;  
  8、重新启动数据库。

你可能感兴趣的:(Oracle,操作技巧)