powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
25 сообщений из 30, страница 1 из 2
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39798425
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ORA 12.2, дамп схемы сделан в 9.2, поэтому в дампе нет length qualifier для символьных типов.

При прямом импорте схемы ругается:
IMP-00019: строка отвергнута из-за ошибки ORACLE 12899
IMP-00003: ORACLE выдала ошибку 12899
ORA-12899: значение для столбца "U99"."AB"."SPEC_COMMENT" слишком велико (фактическое: 115, максимальное: 100)

Пытался указать NLS_LENGTH_SEMANTICS='CHAR' через переменные среды в винде. Не помогает.

Как импортнуть?
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39798435
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alter sysem
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800100
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не слишком ли это радикально?
Ведь эффект от этой команды мгновенный, значит, затронет всех юзеров.

Или можно так и оставить, не изменять назад на BYTE? Ничего не сломается в других местах?
(Я имею в виду, если при создании символьных поле явно указывать семантику длин, то эта настройка особого смысла не имеет?)
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800138
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяНе слишком ли это радикально?


Ну тогда DBMS_DATAPUMP. Или impdp в два этапа.

SY.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800139
Фотография SeaGate
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяНе слишком ли это радикально?
logon trigger.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800149
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовал на отдельном сервере установить
Код: plsql
1.
ALTER SYSTEM SET nls_length_semantics='CHAR' container=CURRENT

После этого импорт все равно не идет, та же самая ошибка. Теперь уже не понимаю, почему...
В v$parameter видно, что значение CHAR, по идее должно помещаться...
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800196
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYimpdp в два этапа.
Это как? У меня только дамп 9.2, а его формат, насколько я знаю, несовместим с IMPDP.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800267
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяПосле этого импорт все равно не идет, та же самая ошибка. Теперь уже не понимаю, почему...
В v$parameter видно, что значение CHAR, по идее должно помещаться...Ты глазками на ddl-и в дампе глянь. Может там byte гвоздями прибито.
9-шный экспорт выгружает явное указание char/byte, только если оно отличается от умалчиваемого.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800270
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYНу тогда DBMS_DATAPUMP. Или impdp в два этапа.Можно поподробнее?
Кэйс: impdp-совместимая однобайтовая БД, в которой char/byte не указывался, а по умолчанию был байт. Это можно влить в мультибайтовую БД с преобразованием семантики в символьную?
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800761
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSYНу тогда DBMS_DATAPUMP. Или impdp в два этапа.Можно поподробнее?
Кэйс: impdp-совместимая однобайтовая БД, в которой char/byte не указывался, а по умолчанию был байт. Это можно влить в мультибайтовую БД с преобразованием семантики в символьную?

A, упустил у него export dump а не datapump. Тода можно imp rows=n затем "чиним" VARCHAR/CHAR поля c длинной в BYTE c той-же длинной в CHAR, disable FK, imp data_only=y, enable FK.

SY.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800853
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYA, упустил у него export dumpКак раз наоборот, 9-шность дампа может дать возможность сменить семантику по умолчанию на уровне сеанса/экземпляра, потому что
Elic9-шный экспорт выгружает явное указание char/byte, только если оно отличается от умалчиваемого.

SYа не datapumpТак можно поподробнее?


SY"чиним" VARCHAR/CHAR поля c длинной в BYTE c той-же длинной в CHAR, disable FKFK, check, FBI, виртуальные колонки и прочее делают процесс "починки" сексуально нетривиальным.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800927
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicSYA, упустил у него export dumpКак раз наоборот, 9-шность дампа может дать возможность сменить семантику по умолчанию на уровне сеанса/экземпляра, потому что
Elic9-шный экспорт выгружает явное указание char/byte, только если оно отличается от умалчиваемого.

SYа не datapumpТак можно поподробнее?


SY"чиним" VARCHAR/CHAR поля c длинной в BYTE c той-же длинной в CHAR, disable FKFK, check, FBI, виртуальные колонки и прочее делают процесс "починки" сексуально нетривиальным.


Я делал в таком случае через indexfile, выбривая только таблицы
Кроме того, это позволяет менять tablespace

Но там свои засады с форматированием длинных строк, геморрой еще тот.

p.s. FBI для 9i не актуальны
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800936
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejninp.s. FBI для 9i не актуальны

Это почему? FBI был еще в 8i. Но это не суть - придется компилировать (что довольно легко) весь импортируемый PL/SQL а не только FBI.

SY.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800937
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл про триггеры - их тоже надо disable, imp, enable.

SY.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39800945
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicFK, check, FBI, виртуальные колонки и прочее делают процесс "починки" сексуально нетривиальным.

1. Disable/enable FK & триггеры - элементарно
2. Поменять BYTE на CHAR через DBA_TAB_COLS - элементарно
3. Перекомпилировать PL/SQL - элементарно

Но все это только если ALTER SYSTEM, after logon trigger "слишком радикально" или какие то обьекты в экспорте имеют явно прописаный BYTE.

SY.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39801728
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicТы глазками на ddl-и в дампе глянь. Может там byte гвоздями прибито.
Я еще в топике написал, что нету там length qualifier для символьных типов . Проверял ведь перед постом.
Стоят просто VARCHAR(30) или CHAR(3).

И
Код: plsql
1.
ALTER SYSTEM SET nls_length_semantics='CHAR'

не помогает, как я уже написал. Ругается теми же самыми кодами в тех же местах. Хотя явно видно, что в v$parameter стоит уже вместо BYTE значение CHAR.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39801730
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяElicТы глазками на ddl-и в дампе глянь. Может там byte гвоздями прибито.
Я еще в топике написал, что нету там length qualifier для символьных типов . Проверял ведь перед постом.
Стоят просто VARCHAR(30) или CHAR(3).

И
Код: plsql
1.
ALTER SYSTEM SET nls_length_semantics='CHAR'

не помогает, как я уже написал. Ругается теми же самыми кодами в тех же местах. Хотя явно видно, что в v$parameter стоит уже вместо BYTE значение CHAR.

А что говорит desc "U99"."AB"?
там char или byte?
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39801753
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnin,
DESC показывает VARCHAR(30) без всяких модификаторов как для таблиц в этой схеме, так и в других, которые были созданы с NLS_LENGTH_SEMANTICS=BYTE до переключения на CHAR
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39801808
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim LejninКроме того, это позволяет менять tablespace

tablespace в дампе на ура меняется в режиме редактирования с сохранением длины строки.
Подозреваю изменение byte на char тоже вполне прокатит
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39801863
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВАVadim LejninКроме того, это позволяет менять tablespace

tablespace в дампе на ура меняется в режиме редактирования с сохранением длины строки.
Подозреваю изменение byte на char тоже вполне прокатит
Именно так я и делал
Пркатывал через awk, дополнительно сносится initial
Что позволяет получить чистую схему

Но ... приходится контролировать скобки, бо imp тупо режет операторы по длине
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39801945
Фотография Vivat!San
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКак импортнуть?


работать с каждым полем отдельно, выгружать ddl и создавать уже модифицированную пустую таблицу.
В общем случае такое преобразование не всегда возможно,
представьте что у поля VARCHAR2 с 2-х байтной кодировкой типа 'CHAR' Вы хотите сделать 'BYTE'
и оно уже заполнено скажем на 3000 символов, даже увеличив поле до максимума данные Вы
там не сможете разместить.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39801953
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vivat!SanВы хотите сделать 'BYTE'О сколь предположений чудных готовит невниманья путь.
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39802942
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DВАв дампе на ура меняется в режиме редактирования с сохранением длины строки.
Подозреваю изменение byte на char тоже вполне прокатит
Если б было так просто, я бы и сам давно додумался и сделал бы в обычном hex-редакторе.
Но в моем дампе нет length qualifier для символьных типов , о чем я уже неоднократно писал.

А многоступенчатое "импортнуть только структуру, исправить в таблицах типы, импортнуть только данные" слишком трудозатратно, кода таблиц порядка 400 с множеством символьных полей, не говоря о других объектах, где тоже полно использований символьных типов.

И всё же - почему изменение nls_length_semantics на уровне системы не приводит к правильному импорту? Почему на него не действует это изменение? Может, для импорта как-то по-другому это нужно отдельно настраивать?

Или я вообще не в ту сторону изначально рою и причина сабжевой ошибки в чем-то другом?
...
Рейтинг: 0 / 0
Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
    #39802948
Фотография DВА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильный ВасяDВАв дампе на ура меняется в режиме редактирования с сохранением длины строки.
Подозреваю изменение byte на char тоже вполне прокатит
Если б было так просто, я бы и сам давно додумался и сделал бы в обычном hex-редакторе.
Но в моем дампе нет length qualifier для символьных типов , о чем я уже неоднократно писал.

а додуматься таким же макаром увеличить размерность столбца, не?


Правильный ВасяИ всё же - почему изменение nls_length_semantics на уровне системы не приводит к правильному импорту? Почему на него не действует это изменение? Может, для импорта как-то по-другому это нужно отдельно настраивать?

Или я вообще не в ту сторону изначально рою и причина сабжевой ошибки в чем-то другом?

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

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

Examples and limits of BYTE and CHAR semantics usage (NLS_LENGTH_SEMANTICS) (Doc ID 144808.1)
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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