Как изменить набор символов по умолчанию для Oracle 10gr2 Express Edition

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

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

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

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

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

редактировать ------------------------------------------------- - мой собственный сервер Oracle Express:

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

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

NLS_NCHAR_CHARACTERSET
AL16UTF16

2 ответа

Решение

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

Oracle Express Edition использует 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

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

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

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

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

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

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

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

CREATE TABLE example (
    id NUMBER,
    name VARCHAR(100 CHAR)
);
Другие вопросы по тегам