今天使用Oracle exp命令的时候无意中发现一个错误“EXP-00091”,以前也遇到过,只是没有在意,因为“EXP-00091”虽然是个错误,但并没有影响导入的结果。说起这个“EXP-00091”错误,还是笔者在给同事演示导入的时候发现的。。。。,当时从一个linux的机器上导出dmp文件,然后从另一台机器上导入这个文件,结果就报了一堆“EXP-00091”错误。。。,但后来观察数据库并没有数据异常或者乱码,因此就没深究。今天同事使用我的备份脚本的时候也发现了这个问题,于是深究下为什么。
通过一翻google后发现,“EXP-00091”问题是exp工具所在的环境变量中的NLS_LANG与DB中的NLS_CHARACTERSET不一致导致的。看看我的脚本第一句:
//设置环境变量为“SIMPLIFIED CHINESE_CHINA.AL32UTF8” export NLS_LANG='SIMPLIFIED CHINESE_CHINA.AL32UTF8';
那数据库中的NLS_LANG是什么呢?
执行结果:
SQL>select userenv('language') from dual; USERENV('LANGUAGE') ---------------------------------------------------- AMERICAN_AMERICA.ZHS16GBK
原来我的Oracle用的是”AMERICAN_AMERICA.ZHS16GBK”,果然是不一致,那就改变下备份脚本吧。
直接修改为:
export NLS_LANG='AMERICAN_AMERICA.ZHS16GBK'
然后运行exp,错误不见了。该方法经测试导入数据库一切正常。至此EXP-00091问题,彻底解决。
注意:数据库版本 Oracle 10g XE
[ad#468-60]