Как изменить набор символов Oracle 10gr2 Express Edition по умолчанию - PullRequest
0 голосов
/ 27 февраля 2012

Я установил на своем ноутбуке Oracle 10gr2 Express Edition.Когда я импортирую файл .dmp, сгенерированный корпоративной версией oracle 10gr2, возникает ошибка.

сервер базы данных, сгенерировавший файл .dmp, работает с кодировкой GBK , но мой оракул-экспресссервер работает с UTF-8 .

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
--------------------------------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.AL32UTF8

как я могу настроить свой собственный сервер Oracle для импорта файла .dmp?

edit -------------------------------------------------- мой собственный сервер Oracle Express:

SQL> select * from v$nls_parameters where parameter like '%CHARACTERSET';

PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_CHARACTERSET
AL32UTF8

NLS_NCHAR_CHARACTERSET
AL16UTF16

Ответы [ 2 ]

5 голосов
/ 27 февраля 2012

Новый набор символов требует до 4 байтов на символ, в то время как старый набор требует только до 2 байтов.Таким образом, из-за изменения набора символов для некоторых полей символов потребуется больше места, чем раньше.Очевидно, что некоторые из них теперь достигли предела длины столбцов.

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

Если ваш файл дампа содержит как определение схемы, так и данные, вам придется работать поэтапно: сначала импортируйте только схему, увеличьте длину столбцов и, наконец,импортировать данные.

У меня нет опыта работы с семантикой длины.Я обычно указываю это явно.См. Документацию о параметре NLS_LENGTH_SEMANTICS для информации.Это влияет на то, как число 100 в следующем выражении интерпретируется:

CREATE TABLE example (
    id NUMBER,
    name VARCHAR(100)
);

Обычно лучше быть явным и указывать единицу измерения напрямую:

CREATE TABLE example (
    id NUMBER,
    name VARCHAR(100 CHAR)
);
3 голосов
/ 28 февраля 2012

Файл дампа содержит целую схему, изменение длины столбца не подходит для меня.

В версии Oracle Express по умолчанию используется UTF-8, после поиска в Интернете я нашел способ изменитьнабор символов базы данных.

в моем случае: UTF-8 -> GBK

Я подключился к пользователю sys как sysdba в sqlplus.затем выполнил следующие команды:

shutdown immediate  

startup mount  

alter system enable restricted session ;  

alter system set JOB_QUEUE_PROCESSES=0;  

alter system set AQ_TM_PROCESSES=0;  

alter database open;  

alter database character set internal_use ZHS16GBK ;  

shutdown immediate  

startup

Я не знаю, что эти команды сделали с моей базой данных, но она работает.

...