“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时系统编号。
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相同了。