Ошибка SQL: ORA-12712: новый набор символов должен быть расширенным набором старого набора символов - PullRequest
5 голосов
/ 08 сентября 2011

Я хочу изменить набор символов базы данных oracle с 'WE8MSWIN1252' на 'AL32UTF8'

Я попытался выполнить следующие шаги по ссылке (http://download.oracle.com/docs/cd/B10501_01/server.920/a96529/ch10.htm#1009580):

Завершить работу базы данных,используя оператор SHUTDOWN IMMEDIATE или оператор SHUTDOWN NORMAL. Сделайте полное резервное копирование базы данных, поскольку оператор ALTER DATABASE CHARACTER SET не может быть откатан. Выполните следующие операторы:

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 AL32UTF8;

Но когдавыполнить приведенное выше утверждение, я получаю следующую ошибку

Ошибка SQL: ORA-12712: новый набор символов должен быть расширенным набором старого набора символов

Может кто-нибудь, пожалуйста, помогите мне в решении этой проблемы.

Ответы [ 3 ]

9 голосов
/ 08 сентября 2011

Для успешного выполнения оператора ALTER DATABASE CHARACTER SET необходимо выполнить два условия:

  • Каждый новый символ в текущем наборе символов доступен в новом наборе символов.
  • Каждый символ в текущем наборе символов имеет одинаковое значение кодовой точки в новом наборе символов.(т.е.: старый набор символов должен быть подмножеством нового)

Поскольку WE8MSWIN1252 не является строгим подмножеством AL32UTF8, это утверждение не выполнится (пример: знак решетки A3 в шестнадцатеричном формате в WE8MSWIN1252, но в AL32UTF8 это C2 A3).

Вам потребуется использовать CSALTER для выполнения этой миграции.

См .: Миграция набора символов.

2 голосов
/ 09 ноября 2016

Самый простой способ: (необходимо отключение) :

Сначала подключитесь как sysdba:

sqplus / as sysdba

Далее выполните следующий скрипт:

alter system set nls_length_semantics=CHAR scope=both;
shutdown;
startup restrict;
alter database character set INTERNAL_USE WE8ISO8859P1;
shutdown;
startup;

У меня это работало в Oracle 12c Standard Two Edition

Взято из: http://www.blogdelpibe.com/2015/05/como-solucionar-el-error-ora-12899.html

1 голос
/ 18 августа 2017

заменить строку 6 на

ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;

это решило мою проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...