![由于 NLS_DATE_LANGUAGE 设置,Oracle 导入失败](https://linux22.com/image/564105/%E7%94%B1%E4%BA%8E%20NLS_DATE_LANGUAGE%20%E8%AE%BE%E7%BD%AE%EF%BC%8COracle%20%E5%AF%BC%E5%85%A5%E5%A4%B1%E8%B4%A5.png)
我有一台 Oracle 10 数据库服务器和在另一台 Oracle 10 服务器上创建的转储。使用 imp 命令将转储导入数据库时:
imp 'sys/*** as sysdba' file=c:\[...]\strukt.dmp full=y log=c:\[...]\import.log
我收到错误消息“不是有效的月份”对于以下日期格式:
'04-FEB-08 03.54.49.000000 PM +01:00'
经过一些调试后,我尝试在 SQLPlus 客户端中重现该错误。
select to_date('04-FEB-08') from dual;
给了我同样的错误信息。经过对这个主题的一点研究,我还意识到错误信息的原因是我的“NLS_DATE_LANGUAGE”环境。
NLS_DATE_FORMAT RR-MON-DD
NLS_DATE_LANGUAGE HUNGARIAN
我将日期语言设置为“美国人”,现在 SQLPlus 命令一切正常。
alter session set NLS_DATE_LANGUAGE='AMERICAN';
现在问题来了。我不知道如何告诉导入工具它应该使用不同的 NLS 设置。
Oracle 文档告诉我应该将其设置为环境变量,但似乎不起作用。Oracle 服务器位于 Windows 2008 机器上,因此我设置了“NLS_DATE_LANGUAGE”环境变量“美国人”在控制面板/系统/高级/环境变量中,既针对当前用户,又作为系统变量,但我仍然有相同的消息。
我是 Oracle 新手,可能遗漏了一些显而易见的东西。如果您有解决方案或任何解决方法,我将不胜感激。
先感谢您,
标记
答案1
NLS_LANG
您可以在执行imp
或之前设置环境变量sqlplus
。在 Windows 系统上,如果未设置此环境变量,Oracle 将查找 Windows 注册表。
C:\>set NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P15
C:\>sqlplus vnz/[...]
[...]
SQL> select to_char(sysdate, 'month') from dual;
TO_CHAR(S
---------
october
SQL> exit
Disconnected from Oracle Database 10g [...]
C:\>set NLS_LANG=FRENCH_FRANCE
C:\>sqlplus vnz/[...]
[...]
SQL> select to_char(sysdate, 'month') from dual;
TO_CHAR(S
---------
octobre
答案2
以后您需要为 exp 命令和 imp 命令设置 NLS_ 环境。
要使用您现有的转储,请尝试恢复在过去的 exp 会话中使用的精确环境设置,但是,如果我没有记错的话,您可能会遇到很多错误,因为使用非英语 NLS 设置创建的转储完全无法使用(即,即使 NLS_ 设置与 exp 使用的设置相匹配也无法导入)。