Windows環境下EXP-00091錯誤的解決辦法

Hoegh發表於2016-07-17
    最新專案上的同事反映在使用exp匯出資料時有報錯(windows Server 2008+Oracle 10.2.0.5  64bit),提示“EXP-00091: 正在匯出有問題的統計資訊。”從字面意思來看,是統計資訊出了問題。透過查閱官方文件,其中對EXP-00091錯誤的描述及解決方案如下:

EXP-00091: Exporting questionable statistics.

Cause: Export was able export statistics, but the statistics may not be usuable. The statistics are questionable because one or more of the following happened during export: a row error occurred, client character set or NCHARSET does not match with the server, a query clause was specified on export, only certain partitions or subpartitions were exported, or a fatal error occurred while processing a table.

Action: To export non-questionable statistics, change the client character set or NCHARSET to match the server, export with no query clause, export complete tables. If desired, import parameters can be supplied so that only non-questionable statistics will be imported, and all questionable statistics will be recalculated.
   從官方文件我們瞭解到,造成EXP-00091的原因可能有多種:

  •    資料行記錄有錯誤
  •    字符集不匹配
  •    匯出時指定了查詢語句
  •    針對分割槽表只匯出指定分割槽或子分割槽
  •    處理表過程中發生嚴重錯誤 
     按照排除法,初步定位和字符集有關。透過在測試環境重現報錯,最終順利解決了該問題,這個問題確實是由於字符集不匹配造成的。下面重現一下該問題的解決過程。

1.使用exp匯出資料時報EXP-00091錯誤

點選(此處)摺疊或開啟

  1. C:\HOEGH\hoegh>exp hoegh/hoegh file=d:\0717.dmp tables=(test1,test2)

  2. Export: Release 10.2.0.5.0 - Production on 星期日 7月 17 14:41:27 2016

  3. Copyright (c) 1982, 2007, Oracle. All rights reserved.


  4. 連線到: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Produc
  5. tion
  6. With the Partitioning, OLAP, Data Mining and Real Application Testing options
  7. 已匯出 ZHS16CGB231280 字符集和 AL16UTF16 NCHAR 字符集
  8. 伺服器使用 ZHS16GBK 字符集 (可能的字符集轉換)

  9. 即將匯出指定的表透過常規路徑...
  10. . . 正在匯出表 test1匯出了 78 行
  11. EXP-00091: 正在匯出有問題的統計資訊。
  12. EXP-00091: 正在匯出有問題的統計資訊。
  13. . . 正在匯出表 test2匯出了 9 行
  14. EXP-00091: 正在匯出有問題的統計資訊。
  15. EXP-00091: 正在匯出有問題的統計資訊。
  16. 匯出成功終止, 但出現警告。

  17. C:\HOEGH\hoegh>


2.查詢資料庫和伺服器的字符集

i.查詢資料庫的字符集

    透過查詢v$nls_parameters檢視下的NLS_CHARACTERSET引數,我們可以查到資料庫使用的字符集。從查詢結果我們看到,資料庫使用的字符集是“ZHS16GBK”。

點選(此處)摺疊或開啟

  1. SQL> select * from v$version;

  2. BANNER
  3. ----------------------------------------------------------------
  4. Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
  5. PL/SQL Release 10.2.0.5.0 - Production
  6. CORE 10.2.0.5.0 Production
  7. TNS for 64-bit Windows: Version 10.2.0.5.0 - Production
  8. NLSRTL Version 10.2.0.5.0 - Production

  9. SQL>

  10. SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';

  11. PARAMETER
  12. ----------------------------------------------------------------
  13. VALUE
  14. ----------------------------------------------------------------
  15. NLS_CHARACTERSET
  16. ZHS16GBK


  17. SQL>

ii.查詢伺服器字符集

   在作業系統的登錄檔中檢視名為“NLS_LANG”的註冊資訊,具體值為“SIMPLIFIED CHINESE”。我們看到,查詢結果和資料庫的字符集不一致。


3.兩種解決方法

i.修改環境變數

   我們可以透過set來設定環境變數,將NLS_LANG引數的值和資料庫保持一致。

點選(此處)摺疊或開啟

  1. C:\HOEGH\hoegh>
  2. C:\HOEGH\hoegh>set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

  3. C:\HOEGH\hoegh>exp hoegh/hoegh file=d:\0717.dmp tables=(test1,test2)

  4. Export: Release 10.2.0.5.0 - Production on 星期日 7月 17 14:42:39 2016

  5. Copyright (c) 1982, 2007, Oracle. All rights reserved.


  6. 連線到: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Produc
  7. tion
  8. With the Partitioning, OLAP, Data Mining and Real Application Testing options
  9. 已匯出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

  10. 即將匯出指定的表透過常規路徑...
  11. . . 正在匯出表 test1匯出了 78 行
  12. . . 正在匯出表 test2匯出了 9 行
  13. 成功終止匯出, 沒有出現警告。

  14. C:\HOEGH\hoegh>
    我們看到,設定NLS_LANG引數後使用exp匯出資料沒有報錯。
ii.修改登錄檔資訊,一勞永逸
   設定環境變數簡單易行,但是修改登錄檔資訊卻是一勞永逸的,推薦第二種方法。在登錄檔中將“NLS_LANG”的值修改為為“SIMPLIFIED CHINESE_CHINA.ZHS16GBK,問題順利解決。


~~~~~~~ the end~~~~~~~~~
hoegh
2016.07.17


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-2122113/,如需轉載,請註明出處,否則將追究法律責任。

相關文章