powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
5 сообщений из 30, страница 2 из 2
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39802997
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vivat!SanПравильный Васяпочему изменение nls_length_semantics на уровне системы не приводит к правильному импорту?

Потому что кто-то не понимает как это работает.
Читайте эту статью на MOS, там есть ответы на все вопросы:

Examples and limits of BYTE and CHAR semantics usage (NLS_LENGTH_SEMANTICS) (Doc ID 144808.1)
сам-то читал?
и что автор не так сделал?
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39803013
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВАПравильный Васясделал бы в обычном hex-редакторе
а додуматься таким же макаром увеличить размерность столбца, не?
Ну, как вариант, хотя это немногим легче ковыряния в каждой импортнутой таблице. Ведь их много, и нет внятного шаблона массовой замены типа BYTE -> CHAR. Кроме того, количество знакомест не везде сохранится в дампе при замене.

Да и самое главное - останется ведь BYTE, если я правильно понимаю. А хотелось бы все-таки CHAR.

DВАМожет потому что
ORA-12899: значение для столбца "U99"."AB"."SPEC_COMMENT" слишком велико (фактическое: 115, максимальное: 100)
а
DESC показывает VARCHAR(30)
Ну, тут 30 - это просто пример показа формата (без спецификатора длины), а не конкретная величина конкретного поля, бо их там сотни.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39803104
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ты давай конкретную величину конкретного поля для данной конкретной ошибки
Ну, чтоб обсуждать можно было конкретно

Проверь, какая семантика используется для конкретного столбца -- ALL_TAB_COLUMNS.CHAR_USED (и сколько поместится символов текущей кодировки CHAR_LENGTH). Да и точный тип поля

Есть подозрение, что ты выгрузил из одной многобайтной кодировки (с семантикой CHAR), но которая считает, что символу достаточно 1-2 байт, в другую многобайтную кодировку, в которой размер символа (в байтах) будет больше. Правда, это должно было выстрелить только на предельных размерах (2000-4000 байт), но чем черт не шутит.

И еще, насколько помню, в некоторых версиях 9-ки можно было установить AL16UTF16 в качестве дефолтовой кодировки и это создавало подобные проблемы exp/imp

Так что, чисто для конкретики, желательно знать исходную и целевую кодировки
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39805539
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
РЕШЕНИЕ НАЙДЕНО.

Как оказалось, ALTER SYSTEM здесь бесполезно.
Как видно на скриншоте заголовка дампа, прямо в нем прописываются некоторые значимые сессионные параметры, используемые при импорте. Примеры выделены красным.

CHAR - это уже исправленное мной в HEX-редакторе (наугад, но помогло) значение NLS_LENGTH_SEMANTICS, которое до этого было BYTE. А рядом - скорее всего PLSQL_CODE_TYPE = { INTERPRETED | NATIVE }
Кстати, перед созданием каждого PL/SQL-объекта в дампе тоже присутствует
Код: plsql
1.
ALTER SESSION SET PLSQL_COMPILER_FLAGS = 'INTERPRETED' NLS_LENGTH_SEMANTICS = 'BYTE' PLSQL_DEBUG = TRUE
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39805552
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный Вася РЕШЕНИЕ НАЙДЕНО.
Забавненько.
Даже пошел почитал.
В Doc ID 756180.1 сказано, что exp/imp сохраняют semantics источника и не позволяют перебить, рекомендуют expdp, который понятным причинам не вариант для 9i.
В Doc ID 313175.1 рассказывают как решить проблему "штатно" - обычная трехходовка, imp rows=N, скрипт, импорт строк.

Я бы до кучи попробовал изменить семантику скриптом прямо в таблицах на источнике (если тот физически доступен) перед экспортом. Источник не сломается, ибо монобайту пофиг.
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]