2011-09-08 38 views
5

que quieren cambiar el juego de caracteres de la base de datos de Oracle desde 'WE8MSWIN1252' a 'AL32UTF8'SQL error: ORA-12712: nuevo juego de caracteres debe ser un superconjunto de carácter antiguo conjunto

Traté de ejecutar siguientes pasos de la enlace (http://download.oracle.com/docs/cd/B10501_01/server.920/a96529/ch10.htm#1009580):

Shut down the database, using either a SHUTDOWN IMMEDIATE or a SHUTDOWN NORMAL statement. Do a full backup of the database because the ALTER DATABASE CHARACTER SET statement cannot be rolled back. Complete the following statements:

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; 

Pero cuando yo haga la declaración anterior, me recibo el siguiente error

Error de SQL: ORA-12712: el nuevo juego de caracteres debe ser un superconjunto del juego de caracteres antiguo

¿Alguien puede ayudarme a resolver este problema?

Respuesta

9

Para una sentencia ALTER DATABASE CHARACTER SET para ejecutar con éxito, dos condiciones deben cumplirse:

  • Todos y cada carácter del conjunto de caracteres actual está disponible en el nuevo conjunto de caracteres.
  • Todos y cada uno de los caracteres del conjunto de caracteres actual tiene el mismo valor de punto de código en el nuevo conjunto de caracteres. (Es decir: el viejo juego de caracteres debe ser un subconjunto de la nueva)

Debido WE8MSWIN1252 no es un subconjunto estricto de AL32UTF8 esta declaración se producirá un error (ejemplo: el signo es A3 en hexadecimal en WE8MSWIN1252, pero en AL32UTF8 es C2 A3).

Deberá usar CSALTER para hacer esta migración.

Consulte: Character Set Migration.

+0

Gracias por la ayuda rápida. Estaba usando Oracle XE, así que lo desinstalé e instalé Oracle XE universal ... y esto ha cambiado mi conjunto de caracteres a UTF8. – Dawood

1

La manera más fácil: (NECESARIO apagado):

En primer lugar, las conexiones tal como sysdba:

sqplus/as sysdba 

A continuación, ejecute el siguiente script:

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

que trabajó para mí en un 12c Oracle Standard Edition Dos

Tomado de: http://www.blogdelpibe.com/2015/05/como-solucionar-el-error-ora-12899.html

0

reemplazar la línea 6 por

ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;

esto se soluciona mi problema.

Cuestiones relacionadas