使用 exp 導出時出現 EXP-00091: Exporting questionable statistics,原因是客戶端環境變數 NLS_LANG 與資料庫字元集 NLS_CHARACTERSET 不一致,導致統計信息導出時字元集轉換異常。
$ echo $NLS_LANG
AMERICAN
SQL> SELECT parameter, value FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%';
PARAMETER VALUE
--------------------------- ------------------------------
NLS_CHARACTERSET ZHS16GBK
NLS_NCHAR_CHARACTERSET AL16UTF16
客戶端為 AMERICAN(隱含 US7ASCII),資料庫為 ZHS16GBK,導出時提示 server uses ZHS16GBK character set (possible charset conversion) 並產生警告。
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
# 或寫入 ~/.bash_profile 永久生效
再次導出,日誌顯示 Export terminated successfully without warnings。
exp ... statistics=none
不導出統計信息,避開字元集轉換,同樣無警告完成。缺點是目標庫匯入後需重新收集統計信息 (DBMS_STATS)。
NLS_LANG 永久設定為與資料庫 NLS_CHARACTERSET 一致。expdp/impdp) 為服務端操作,不受客戶端 NLS_LANG 影響,建議新專案改用 Data Pump。