Назад | Перейти на главную страницу

Ошибка импорта Oracle из-за параметра NLS_DATE_LANGUAGE

У меня есть сервер базы данных 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, и мне может не хватать чего-то очевидного. Если у вас есть решение или какой-либо обходной трюк, я очень признателен.

Заранее спасибо,

отметка

Вы можете установить переменную среды 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

В будущем вам необходимо установить среду NLS_ как для команды exp, так и для команды imp.

Чтобы использовать существующий дамп, попробуйте восстановить точные настройки среды, использованные во время предыдущего сеанса exp, но все же, если я правильно помню, вы можете столкнуться с довольно большим количеством ошибок с дампами, созданными с неанглийскими настройками NLS, которые полностью непригодны для использования (т.е. можно импортировать, даже если настройки NLS_ совпадают с используемыми exp).