Oracle: EXP-00091 的三種解決方法
“EXP-00091”問題是exp工具所在的環境變量(系統屬性->高級->環境變量)
中的NLS_LANG與DB中的NLS_CHARACTERSET不一致導致的。
解決方法一:
Windows:
⑴ 我們來查看DB中的NLS_CHARACTERSET的值(數據庫中的NLS_LANG):
[sql]
select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET';
or:
[sql]
select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
⑵ 查看環境變量中的NLS_LANG:
運行命令行中輸入:
regedit -> HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOMExx/,
xx指存在多個ORACLE_HOME時系統編號。
regedit -> HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOMExx/,
xx指存在多個ORACLE_HOME時系統編號。
3)如果DB中NLS_LANG 和exp中環境變量確實不一樣,那么就會導致剛剛的問題。
Windows 中直接修改注冊表中的NLS_LANG值,就可以了,請以DB中查詢出來的NLS_LANG為準。
補充
1)查看環境變量中的NLS_LANG:
[oracle@MWSG1: ~]$echo $NLS_LANG
2) 根據⑴查出的NLS_CHARACTERSET 來設定exp的環境變量:
WINNT> set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
[oracle@MWSG1: ~]$export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
[oracle@MWSG1: ~]$echo $NLS_LANG
AMERICAN_AMERICA.AL32UTF8
解決方法二:
第一步: 查看DB中的NLS_CHARACTERSET的值(提供兩種方法):
查詢NLS_CHARACTERSET的值:
select * from nls_database_parameters t where t.parameter='NLS_CHARACTERSET';
or
select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
PARAMETER VALUE
----------------------- ----------------------------------------------
NLS_CHARACTERSET ZHT16BIG5
第二步: 根據第一步查出的NLS_CHARACTERSET(ZHT16BIG5)來設定exp的環境變量:
WINNT> set NLS_LANG=AMERICAN_AMERICA.ZHT16BIG5
進行設定后,在環境變量中查看NLS_LANG的值是否一致,如果不一致可在環境變量中手中修改。
LINUX> export NLS_LANG=AMERICAN_AMERICA.ZHT16BIG5
解決方法三:
(1).我按照第一種方法查到結果:
SQL> select * from v$nls_parameters where parameter='NLS_CHARACTERSET';
PARAMETER VALUE
----------------------- -------------------------------------------
NLS_CHARACTERSET AL32UTF8
但是在進行第二步時在注冊表的HKEY_LOCAL_MACHINE/SOFTWARE/下沒有發現ORACLE目錄,第一種方法解決不了我的問題。
(2).按照第二種方法時在cmd中輸入 set NLS_LANG=AMERICAN_AMERICA.AL32UTF8 時報錯。
(3).于是我在系統屬性->高級->環境變量中發現變量 NLS_LANG = ZHS16GBK,直接把值改成AL32UTF8后,
從數據庫中導出.dmp文件還是會報錯。后來我沒有改動以前那個NLS_LANG = ZHS16GBK,只是又增加了一個
NLS_LANG = AL32UTF8,結果證明我可以從數據庫正常導出(exp).dmp文件了。后來發現,原本變量中有兩個NLS_LANG的,
但結果變成了一個:NLS_LANG = AL32UTF8,說明已經把系統中的NLS_LANG改成與數據庫中的NLS_LANG相同了。
從數據庫中導出.dmp文件還是會報錯。后來我沒有改動以前那個NLS_LANG = ZHS16GBK,只是又增加了一個
NLS_LANG = AL32UTF8,結果證明我可以從數據庫正常導出(exp).dmp文件了。后來發現,原本變量中有兩個NLS_LANG的,
但結果變成了一個:NLS_LANG = AL32UTF8,說明已經把系統中的NLS_LANG改成與數據庫中的NLS_LANG相同了。
posted on 2013-05-17 21:58 MingLiang 閱讀(321) 評論(0) 編輯 收藏 所屬分類: Oracle技術