powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
11 сообщений из 11, страница 1 из 1
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683389
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые коллеги!

Работаю с Autonomous Data Warehouse Cloud.
(Oracle Database 18c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
на Oracle Exadada Database Machine)

Загружаю данные с помощью Data Pump Import.
Исходная база в кодировке NLS_CHARACTERSET = CL8MSWIN1251.
Целевая база (PDB) в кодировке NLS_CHARACTERSET = AL32UTF8.

При импорте получаю ошибки вида:
Код: plaintext
1.
KUP-11007: conversion error loading table "MY_TAB_OWNER"."MY_TAB_NAME"
ORA-12899: value too large for column MY_COLUMN_NAME (actual: 175, maximum: 160)

Я понимаю, что проблема связана с тем, что таблица создается утилитой Data Pump Import с указанием
Код: plsql
1.
2.
3.
4.
5.
CREATE TABLE "MY_TAB_OWNER"."MY_TAB_NAME"(
...
MY_COLUMN(160 BYTE),
...
);

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

Обычный путь - увеличить длину столбца и тогда данные в него поместятся.

Но мне нужно (желательно) это сделать автоматически при импорте данных.

Я изменил на уровне PDB
Код: plsql
1.
ALTER SYSTEM SET NLS_LENGTH_SEMANTICS = CHAR SCOPE=BOTH;



Это не помогло, т.к. из файла экспорта при создании таблицы явно берётся BYTE.

Параметров импорта, которые отвечают за NLS_LENGTH_SEMANTICS я не нашел.

Посоветуйте, пожалуйста, как при импорте создавать таблицы с NLS_LENGTH_SEMANTICS = CHAR?

Спасибо!
...
Рейтинг: 0 / 0
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683392
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Похоже никак, только предварительное создание
ORA-2375 ORA-12899 ORA-2372 Errors While DataPump Import Done From Single Byte Characterset to Multi Byte Characterset Database (Doc ID 436240.1)
...
Рейтинг: 0 / 0
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683396
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или предварительное изменение на источнике.
...
Рейтинг: 0 / 0
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683472
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав, Elic,

Спасибо!
Вы подтвердили мои невесёлые предположения.

Я завел SR на сайте MOS.
Ещё есть надежда, что Data Pump Import имеет нужные неописанные параметры,
как например вот эти: ADWC. Importing Data Using Oracle Data Pump
Код: plsql
1.
2.
transform=dwcs_cvt_iots:y 
transform=constraint_use_default_index:y
...
Рейтинг: 0 / 0
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683652
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые коллеги!

К сожалению, техподдержка меня не обрадовала.

Послали меня на
ORA-01401 / ORA-12899 / ORA-01461 While Importing Or Loading Data In An AL32UTF8 / UTF8 (Unicode) Or Other Multibyte NLS_CHARACTERSET Database. (Doc ID 1297961.1)

А там всё та же самая сказка "про белого бычка", но с
:-(

Буду создавать Enhancement Request (ER) для утилиты Data Pump Import.

Просить, чтобы сделали параметр, предписывающий при создании таблиц
принудительно преобразовывать NLS_LENGTH_SEMANTICS из BYTE в CHAR.

Чтобы сделали что-то наподобие:
Код: plsql
1.
TRANSFORM = NLS_LENGTH_SEMANTICS:CHAR


Как бы вы сформулировали такой ER?

Имеет ли смысл предусмотреть принудительное преобразование из CHAR в BYTE?
...
Рейтинг: 0 / 0
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683657
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЮринскийПослали меня на
ORA-01401 / ORA-12899 / ORA-01461 While Importing Or Loading Data In An AL32UTF8 / UTF8 (Unicode) Or Other Multibyte NLS_CHARACTERSET Database. (Doc ID 1297961.1)

А там всё та же самая сказка "про белого бычка", но с
:-(
А там всё та же самая сказка "про белого бычка", но с усложнением сюжета применением утилиты Csscan...
...
Рейтинг: 0 / 0
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683751
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валерий ЮринскийБуду создавать Enhancement Request (ER) для утилиты Data Pump Import.

Просить, чтобы сделали параметр, предписывающий при создании таблиц
принудительно преобразовывать NLS_LENGTH_SEMANTICS из BYTE в CHAR.

Чтобы сделали что-то наподобие:
Код: plsql
1.
TRANSFORM = NLS_LENGTH_SEMANTICS:CHAR


Как бы вы сформулировали такой ER?

Имеет ли смысл предусмотреть принудительное преобразование из CHAR в BYTE?

Насколько я понимаю NLS_LENGTH_SEMANTICS=BYTE нужен только при установке патчей. Вернее при создании/модификации строковых полей таблиц data dictionary. Так-что можно что-то типа если ORACLE_MAINTAINED=Y то length semantics BYTE или банально default length semantics = CHAR а Oracle при написании системного кода/скриптов явно указывает BYTE. Но это потянет на больше чем Enhancement Request, так-что добавление Oracle Data Pump трансформации куда более реалистично. Только я бы убрал NLS. NLS_LENGTH_SEMANTICS это параметр по умолчанию использующийся при создании обьектов с неполным описанием. Data Pump работает с с ужe существующими обьектами базы или их метаданными где умолчaний уже не существует. Я бы назвал трансформацию:

Код: plsql
1.
TRANSFORM = LENGTH_SEMANTICS:CHAR



SY.
...
Рейтинг: 0 / 0
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683767
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYТолько я бы убрал NLS. NLS_LENGTH_SEMANTICS это параметр по умолчанию использующийся при создании обьектов с неполным описанием. Data Pump работает с с ужe существующими обьектами базы или их метаданными где умолчaний уже не существует. Я бы назвал трансформацию:
Код: plsql
1.
TRANSFORM = LENGTH_SEMANTICS:CHAR

Хорошее предложение.
Спасибо!

Вот только жаль, что делать это улучшение оракулянты могут вечно... :-(

Один наш enhancement request 20114154 - CREATE CONSTRAINT IN 2 STEPS TO USE PARALLEL FEATURES
инхансируют уже с 28 ноября 2014 г... :-(
...
Рейтинг: 0 / 0
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683793
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
TRANSFORM = LENGTH_SEMANTICS:CHAR

В результате передекларации ключа может свалиться создание IOT.
Возникает неоднозначность с объектными типами и коллекциями, используемыми для хранения.

С другой стороны, dbms_metadata умеет опускать byte в генерируемом ddl. И вообще много чего трансформить и ремапить. Для гибкого экспорта-импорта ddl через sql или xml файлы можно использовать тип schema_export.
Зачем-то поделили на datapump и metadata и получились два недоинструмента.
...
Рейтинг: 0 / 0
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683803
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то может свалиться не только создание IOT, а, в принципе, любого индекса (включая уникальные)
Так что, думаю, даже Enhancement Request отклонят
...
Рейтинг: 0 / 0
Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
    #39683805
Фотография Валерий Юринский
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вячеслав ЛюбомудровВообще-то может свалиться не только создание IOT, а, в принципе, любого индекса (включая уникальные)
Так что, думаю, даже Enhancement Request отклонятНе надо думать.
Будем пробовать - создавать ER.

Сговоримся и поднимем волну: многие люди предлагают одно и то же одними словами!
Значит это на самом деле так важно! :-)

Дайте возможность (молоток), а уж, как её применить, мы сами решим...
Не запретили же пока продажу молотков оттого, что ими иногда бьют насмерть по голове! :-)

Если индекс получится слишком длинный - в топку его.
IoT - это вообще отдельное зло, которое в автономных базах уже запрещено.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как изменить NLS_LENGTH_SEMANTICS при использовании Data Pump Import
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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