Определение параметра NLS_LANG для существующего файла дампа базы данных Oracle
Нам передали файл дампа другой командой, которая уехала до конца года. Когда мы пытаемся импортировать дамп в нашу собственную базу данных, мы получаем следующую ошибку:
IMP-00038: не удалось преобразовать в дескриптор набора символов среды
После некоторых исследований мы предположили, что мы имеем несоответствие между настройкой NLS_LANG исходного компьютера и нашего локального компьютера. В настоящее время у нас нет никаких средств для проверки значения NLS_LANG на исходном компьютере.
Итак, имея в руках только файл дампа, есть ли способ выяснить значение NLS_LANG, с которым был выполнен экспорт? Судя по всему, мы должны иметь возможность переопределить переменную среды NLS_LANG перед запуском клиента импорта (imp).
Другое дело, что дамп был сделан из экземпляра 11g, а наша версия imp - 10. Я прочитал, что imp не совместим с forward. Может ли это быть проблемой здесь (вместо несоответствия NLS_LANG)?
5 ответов
Самый простой способ на Unix это:
#>imp username/password file=test.dmp show=y
Import: Release 10.2.0.3.0 - Production on Fri Nov 26 08:38:47 2010
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
Export file created by EXPORT:V10.02.01 via conventional path
import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses WE8ISO8859P1 character set (possible charset conversion)
Версия exp/imp является проблемой: я обычно использую программу экспорта V10 и подключаю ее к базе данных V11. Убедитесь, что у вас есть псевдоним dev11 в вашем tnsnames.ora в oracle_home dev10.
hostname{oracle}# . oraenv
ORACLE_SID = [oracle] ? dev10
hostname{oracle}#
hostname{oracle}#>exp username/password@dev11 full=y dumpfile=dump.exp
Несмотря на то, что файл является бинарным искажением, есть некоторые читаемые человеком текстовые выдержки. Я видел следующие строки там, и я думаю, что это отвечает на мой вопрос:
AL32UTF8 CHARSET> AL16UTF16 NCHARSET>... NLS_LANGUAGE='AMERICAN' NLS_TERRITORY='AMERICA'
Может быть, это было экспортировано с помощью expdp
....пытаться impdp
.... это то, что я видел при поиске в Google, и это действительно помогло мне решить эту же проблему.
Другое дело, что дамп был сделан из экземпляра 11g, а наша версия imp - 10. Я прочитал, что imp не совместим с forward. Может ли это быть проблемой здесь (вместо несоответствия NLS_LANG)?
A: Вы правы; Вы не можете импортировать файл дампа, созданный с помощью данного клиента Oracle, поскольку клиент Oracle вашей целевой базы данных Oracle старше.
Хотя это и не рекомендуется, вы можете экспортировать более новую исходную базу данных Oracle (например, 10g+) с более старым клиентом Oracle (например, 10g), поскольку вы используете ту же версию Oracle Client для импорта в более старую целевую базу данных Oracle (например, 10g).
Предположение: версия Oracle Source вашей исходной базы данных такая же или более новая, чем версия вашей целевой базы данных Oracle. Обратите внимание, что инструменты для смешивания Datapump (11g) и утилита импорта imp (-10g) не работают.
Интересная ссылка Использование разных версий и версий экспорта