我们在exp导入的时候,经常会有警告字符不一致的问题。下面来看看在imp/exp导入导出的时候,nls_lang这个参数到底应该怎么来配置。
 
   ORACLE推荐在执行exp的时候nls_lang配置与database nls_character一致,这样不会出现字符转换的问题,能提高exp的效率。查看database nls_character
 
  1. SQL> select value from nls_database_parameters where parameter='NLS_CHARACTERSET'
  2.  
  3. VALUE 
  4. ------------------------------ 
  5. ZHS16GBK 

  我们这里只做查看已经导出的exp文件的字符集。

  1. $ echo $NLS_LANG 
  2.  
  3. $  
  4. $ exp userid=scott/oracle file='/tmp/scott.dmp' log='/tmp/scott.log' 
  5.  
  6. Export: Release 11.2.0.3.0 - Production on Thu Aug 30 13:07:22 2012 
  7.  
  8. Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved. 
  9.  
  10.  
  11. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 
  12. With the Partitioning, OLAP, Data Mining and Real Application Testing options 
  13. Export done in US7ASCII character set and AL16UTF16 NCHAR character set 
  14. server uses ZHS16GBK character set (possible charset conversion) 
  15. . exporting pre-schema procedural objects and actions 
  16. . exporting foreign function library names for user SCOTT  
  17. . exporting PUBLIC type synonyms 
  18. . exporting private type synonyms 
  19. . exporting object type definitions for user SCOTT  
  20. About to export SCOTT's objects ... 
  21. . exporting database links 
  22. . exporting sequence numbers 
  23. . exporting cluster definitions 
  24. . about to export SCOTT's tables via Conventional Path ... 
  25. . . exporting table                          BONUS          0 rows exported 
  26. EXP-00091: Exporting questionable statistics
  27. . . exporting table                           DEPT          4 rows exported 
  28. EXP-00091: Exporting questionable statistics
  29. EXP-00091: Exporting questionable statistics
  30. . . exporting table                            EMP         14 rows exported 
  31. EXP-00091: Exporting questionable statistics
  32. EXP-00091: Exporting questionable statistics
  33. . . exporting table                       SALGRADE          5 rows exported 
  34. EXP-00091: Exporting questionable statistics
  35. . exporting synonyms 
  36. . exporting views 
  37. . exporting stored procedures 
  38. . exporting operators 
  39. . exporting referential integrity constraints 
  40. . exporting triggers 
  41. . exporting indextypes 
  42. . exporting bitmap, functional and extensible indexes 
  43. . exporting posttables actions 
  44. . exporting materialized views 
  45. . exporting snapshot logs 
  46. . exporting job queues 
  47. . exporting refresh groups and children 
  48. . exporting dimensions 
  49. . exporting post-schema procedural objects and actions 
  50. . exporting statistics 
  51. Export terminated successfully with warnings. 

   从上面提示可以看到database的字符集是ZHS16GBK,而我的client的nls_lang中的client字符集是US7ASCII。

   下面是查看已经导出的/tmp/scott.dmp文件的字符集

  1. $ imp userid=scott/oracle file='/tmp/scott.dmp' show=yes             
  2.  
  3. Import: Release 11.2.0.3.0 - Production on Thu Aug 30 13:07:58 2012 
  4.  
  5. Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved. 
  6.  
  7.  
  8. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 
  9. With the Partitioning, OLAP, Data Mining and Real Application Testing options 
  10.  
  11. Export file created by EXPORT:V11.02.00 via conventional path 
  12. import done in US7ASCII character set and AL16UTF16 NCHAR character set 
  13. import server uses ZHS16GBK character set (possible charset conversion) 

import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses ZHS16GBK character set (possible charset conversion)

import done这行表示的client 的字符集是US7ASCII,导入导出端的字符集是相同的。

import server这行表示导入的数据库的字符集是ZHS16GBK,由于字符集不一样,所以会出现字符集的转换。

当exp client与imp client不一样的时候会出现下面的提示:

  1. $ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 
  2. $ echo $NLS_LANG 
  3. AMERICAN_AMERICA.ZHS16GBK 
  1. $ imp userid=scott/oracle file='/tmp/scott.dmp' show=yes 
  2.  
  3. Import: Release 11.2.0.3.0 - Production on Thu Aug 30 13:11:53 2012 
  4.  
  5. Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved. 
  6.  
  7.  
  8. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 
  9. With the Partitioning, OLAP, Data Mining and Real Application Testing options 
  10.  
  11. Export file created by EXPORT:V11.02.00 via conventional path 
  12. import done in ZHS16GBK character set and AL16UTF16 NCHAR character set 
  13. export client uses US7ASCII character set (possible charset conversion) 

import done in ZHS16GBK character set and AL16UTF16 NCHAR character set
export client uses US7ASCII character set (possible charset conversion)

export client这行表示导出client的字符集是US7ASCII。

 

更详细的见官方文档:NLS considerations in Import/Export - Frequently Asked Questions [ID 227332.1]