Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Правильный Вася
Member

Откуда:
Сообщений: 153
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' через переменные среды в винде. Не помогает.

Как импортнуть?
8 апр 19, 21:46    [21856506]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 17182
alter sysem
8 апр 19, 22:37    [21856544]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Правильный Вася
Member

Откуда:
Сообщений: 153
Не слишком ли это радикально?
Ведь эффект от этой команды мгновенный, значит, затронет всех юзеров.

Или можно так и оставить, не изменять назад на BYTE? Ничего не сломается в других местах?
(Я имею в виду, если при создании символьных поле явно указывать семантику длин, то эта настройка особого смысла не имеет?)
11 апр 19, 18:03    [21859796]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9399
Правильный Вася
Не слишком ли это радикально?


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

SY.
11 апр 19, 19:09    [21859857]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
SeaGate
Member

Откуда: Новосибирск
Сообщений: 1599
Правильный Вася
Не слишком ли это радикально?

logon trigger.
11 апр 19, 19:11    [21859858]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Правильный Вася
Member

Откуда:
Сообщений: 153
Попробовал на отдельном сервере установить
ALTER SYSTEM SET nls_length_semantics='CHAR' container=CURRENT
После этого импорт все равно не идет, та же самая ошибка. Теперь уже не понимаю, почему...
В v$parameter видно, что значение CHAR, по идее должно помещаться...
11 апр 19, 19:37    [21859876]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Правильный Вася
Member

Откуда:
Сообщений: 153
SY
impdp в два этапа.

Это как? У меня только дамп 9.2, а его формат, насколько я знаю, несовместим с IMPDP.
11 апр 19, 22:01    [21859962]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28823
Правильный Вася
После этого импорт все равно не идет, та же самая ошибка. Теперь уже не понимаю, почему...
В v$parameter видно, что значение CHAR, по идее должно помещаться...
Ты глазками на ddl-и в дампе глянь. Может там byte гвоздями прибито.
9-шный экспорт выгружает явное указание char/byte, только если оно отличается от умалчиваемого.
12 апр 19, 07:42    [21860087]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28823
SY
Ну тогда DBMS_DATAPUMP. Или impdp в два этапа.
Можно поподробнее?
Кэйс: impdp-совместимая однобайтовая БД, в которой char/byte не указывался, а по умолчанию был байт. Это можно влить в мультибайтовую БД с преобразованием семантики в символьную?
12 апр 19, 07:48    [21860090]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9399
Elic
SY
Ну тогда 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.
12 апр 19, 20:39    [21860870]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Elic
Member

Откуда: 1984. Выбраковка финно-угром продолжается. КЯЗ
Сообщений: 28823
SY
A, упустил у него export dump
Как раз наоборот, 9-шность дампа может дать возможность сменить семантику по умолчанию на уровне сеанса/экземпляра, потому что
Elic
9-шный экспорт выгружает явное указание char/byte, только если оно отличается от умалчиваемого.


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


SY
"чиним" VARCHAR/CHAR поля c длинной в BYTE c той-же длинной в CHAR, disable FK
FK, check, FBI, виртуальные колонки и прочее делают процесс "починки" сексуально нетривиальным.
13 апр 19, 08:34    [21861024]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 6613
Elic
SY
A, упустил у него export dump
Как раз наоборот, 9-шность дампа может дать возможность сменить семантику по умолчанию на уровне сеанса/экземпляра, потому что
Elic
9-шный экспорт выгружает явное указание char/byte, только если оно отличается от умалчиваемого.


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


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



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

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

p.s. FBI для 9i не актуальны
13 апр 19, 17:49    [21861210]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9399
Vadim Lejnin
p.s. FBI для 9i не актуальны


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

SY.
13 апр 19, 18:50    [21861224]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9399
Да, забыл про триггеры - их тоже надо disable, imp, enable.

SY.
13 апр 19, 18:53    [21861225]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 9399
Elic
FK, check, FBI, виртуальные колонки и прочее делают процесс "починки" сексуально нетривиальным.


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

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

SY.
13 апр 19, 19:16    [21861233]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Правильный Вася
Member

Откуда:
Сообщений: 153
Elic
Ты глазками на ddl-и в дампе глянь. Может там byte гвоздями прибито.

Я еще в топике написал, что нету там length qualifier для символьных типов. Проверял ведь перед постом.
Стоят просто VARCHAR(30) или CHAR(3).

И
ALTER SYSTEM SET nls_length_semantics='CHAR'
не помогает, как я уже написал. Ругается теми же самыми кодами в тех же местах. Хотя явно видно, что в v$parameter стоит уже вместо BYTE значение CHAR.
15 апр 19, 19:05    [21862936]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 6613
Правильный Вася
Elic
Ты глазками на ddl-и в дампе глянь. Может там byte гвоздями прибито.

Я еще в топике написал, что нету там length qualifier для символьных типов. Проверял ведь перед постом.
Стоят просто VARCHAR(30) или CHAR(3).

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


А что говорит desc "U99"."AB"?
там char или byte?
15 апр 19, 19:12    [21862941]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Правильный Вася
Member

Откуда:
Сообщений: 153
Vadim Lejnin,
DESC показывает VARCHAR(30) без всяких модификаторов как для таблиц в этой схеме, так и в других, которые были созданы с NLS_LENGTH_SEMANTICS=BYTE до переключения на CHAR
15 апр 19, 20:24    [21862980]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
DВА
Member

Откуда:
Сообщений: 5306
Vadim Lejnin
Кроме того, это позволяет менять tablespace

tablespace в дампе на ура меняется в режиме редактирования с сохранением длины строки.
Подозреваю изменение byte на char тоже вполне прокатит
16 апр 19, 01:08    [21863127]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Vadim Lejnin
Member

Откуда:
Сообщений: 6613
DВА
Vadim Lejnin
Кроме того, это позволяет менять tablespace

tablespace в дампе на ура меняется в режиме редактирования с сохранением длины строки.
Подозреваю изменение byte на char тоже вполне прокатит

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

Но ... приходится контролировать скобки, бо imp тупо режет операторы по длине
16 апр 19, 08:59    [21863238]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Vivat!San
Member

Откуда: Отсюда не возвращаются
Сообщений: 524
автор
Как импортнуть?


работать с каждым полем отдельно, выгружать ddl и создавать уже модифицированную пустую таблицу.
В общем случае такое преобразование не всегда возможно,
представьте что у поля VARCHAR2 с 2-х байтной кодировкой типа 'CHAR' Вы хотите сделать 'BYTE'
и оно уже заполнено скажем на 3000 символов, даже увеличив поле до максимума данные Вы
там не сможете разместить.
16 апр 19, 10:46    [21863382]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
-2-
Member

Откуда:
Сообщений: 14504
Vivat!San
Вы хотите сделать 'BYTE'
О сколь предположений чудных готовит невниманья путь.
16 апр 19, 10:53    [21863396]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Правильный Вася
Member

Откуда:
Сообщений: 153
DВА
в дампе на ура меняется в режиме редактирования с сохранением длины строки.
Подозреваю изменение byte на char тоже вполне прокатит

Если б было так просто, я бы и сам давно додумался и сделал бы в обычном hex-редакторе.
Но в моем дампе нет length qualifier для символьных типов, о чем я уже неоднократно писал.

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

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

Или я вообще не в ту сторону изначально рою и причина сабжевой ошибки в чем-то другом?
17 апр 19, 16:41    [21865304]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
DВА
Member

Откуда:
Сообщений: 5306
Правильный Вася
DВА
в дампе на ура меняется в режиме редактирования с сохранением длины строки.
Подозреваю изменение byte на char тоже вполне прокатит

Если б было так просто, я бы и сам давно додумался и сделал бы в обычном hex-редакторе.
Но в моем дампе нет length qualifier для символьных типов, о чем я уже неоднократно писал.

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


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

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


Может потому что
ORA-12899: значение для столбца "U99"."AB"."SPEC_COMMENT" слишком велико (фактическое: 115, максимальное: 100)
а
DESC показывает VARCHAR(30)
17 апр 19, 16:49    [21865322]     Ответить | Цитировать Сообщить модератору
 Re: Как установить NLS_LENGTH_SEMANTICS при импорте схемы из дампа?  [new]
Vivat!San
Member

Откуда: Отсюда не возвращаются
Сообщений: 524
Правильный Вася
почему изменение nls_length_semantics на уровне системы не приводит к правильному импорту?


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

Examples and limits of BYTE and CHAR semantics usage (NLS_LENGTH_SEMANTICS) (Doc ID 144808.1)
17 апр 19, 17:26    [21865424]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить