由于 NLS_DATE_LANGUAGE 设置,Oracle 导入失败

由于 NLS_DATE_LANGUAGE 设置,Oracle 导入失败

我有一台 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 使用的设置相匹配也无法导入)。

相关内容