oracle export|import
От: tolikkk  
Дата: 07.06.10 14:53
Оценка:
Добрый день!

Сразу оговорюсь, что я только начинаю работать с oracle, поэтому заранее извиняюсь за, возможно, глупый вопрос

Необходимо перенести схему из одной БД oracle в другую.
DB source: oracle 11gR2, NLS_NCHAR_CHARACTERSET = AL16UTF16, NLS_CHARACTERSET = CL8MSWIN1251.
DB dest: oracle 11gR2, NLS_NCHAR_CHARACTERSET= AL16UTF16, NLS_CHARACTERSET = AL32UTF8.

Для экспорта использую expdp, он проходит без ошибок.

Во время импорта (impdp) сначала валится множество ошибок, типа:


"
ORA-39083: Object type TABLE:"TEST"."DATA_FINDOC" failed to create with error:
ORA-14223: Deferred segment creation is not supported for this table
Failing sql is:
CREATE TABLE "TEST"."DATA_FINDOC" ("BRANCH" NUMBER NOT NULL ENABLE, "PROPID" NUMBER(9,0) NOT NULL ENABLE, "OWNERID" NUMBER NOT NULL ENABLE, "VALUESTR" VARCHAR2(4000 BYTE), "VALUENUM" NUMBER, "VALUEDATE" DATE, "VALUEXML" "XMLTYPE") SEGMENT CREATION DEFERRED PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING TABL 
"



Хотя параметр deferred_segment_creation в обоих базах = TRUE.

Но более волнует ошибки другого рода, уже непосредственно при вставке данных:


"
ORA-02374: conversion error loading table "TEST"."LOG"
ORA-12899: value too large for column KEYOBJECT (actual: 46, maximum: 40)
ORA-02372: data for row: KEYOBJECT : 0X'C2EEE7ECE5F9E5EDE8E520EFEE20F2E5F0ECE8EDE0EBE0EC'
"



Почитав интернет на эту тему, пришел к выводу, что проблема скорее всего в разности кодировок исходной БД и назначения: AL32UTF8 использует до 4-х байт для хранения символа, а CL8MSWIN1251 всего 1 байт, поэтому данные "не влезают" в отведенное им место.

Попробовал сделать экспорт/импорт через transportable tablespace (использовал web OEM) — ещё на этапе экпорта вылетело с ошибкой "the source and destination database character sets are not compatible".

При использовании утилит exp/imp ситуация аналогичная.

Подскажите, куда копать. Вообще, возможно ли перенести схему с подобными кодировками.
Re: oracle export|import
От: wildwind Россия  
Дата: 07.06.10 15:24
Оценка:
Здравствуйте, tolikkk, Вы писали:

T>ORA-14223: Deferred segment creation is not supported for this table


По этой ошибке весьма немного инфы, но проверь, нет ли чего из перечисленного тут.


T>ORA-12899: value too large for column KEYOBJECT (actual: 46, maximum: 40)


T>Почитав интернет на эту тему, пришел к выводу, что проблема скорее всего в разности кодировок исходной БД и назначения: AL32UTF8 использует до 4-х байт для хранения символа, а CL8MSWIN1251 всего 1 байт, поэтому данные "не влезают" в отведенное им место.


Именно так. Если хочешь разобраться в вопросе, читай Globalization Support Guide.
Можно попробовать обойтись малой кровью, перед импортом установив параметр nls_length_semantics='CHAR'. Но, судя по тому что в скриптах создания таблиц видно "VARCHAR2(4000 BYTE)", — не поможет. Придется наверное их пересоздавать вручную с "VARCHAR2(2000 CHAR)", а это уже к разработчикам приложения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.