2012-02-02 28 views
8

tengo que cambiar el juego de caracteres de AL32UTF8 a WE8MSWIN1252 en una instancia de Oracle 11g R2 expreso ... He intentado utilizar el comando:Cómo cambiar el conjunto de caracteres en la edición de Oracle 11g R2 expreso

ALTER DATABASE CHARACTER SET WE8MSWIN1252; 

Pero falla diciendo que MSWIN1252 no es un superconjunto de AL32UTF8. Luego encontré algunos artículos que hablan sobre CSSCAN, y esa herramienta no parece estar disponible en Oracle 11 Express.

http://www.oracle-base.com/articles/10g/CharacterSetMigration.php

Cualquier persona tiene una idea de cómo hacerlo? Gracias de antemano

Editar Aclarando un poco: El verdadero problema es que estoy tratando de importar datos en una tabla que tiene una columna definida como VARCHAR (6 bytes). La cadena que causa el problema es 'eq.mês', necesita 6 bytes en MSWIN1252 y 7 bytes en UT8

+0

¿Qué pasa con UTF8? si necesita espacio adicional para contener algunos caracteres, simplemente aumente la longitud del campo. – tbone

+0

Me gustaría mantener la base de datos DDL idéntica en ambas instancias ... Estoy pensando en cambiar la columna a VARCHAR (6 caracteres) pero no sé si hay inconvenientes en este – alessandroasm

+0

que suena como un plan razonable para mí (más que para cambiar los conjuntos de caracteres) – tbone

Respuesta

4

No puede.

La edición Express de 11g solo está disponible con un juego de caracteres UTF-8. Si desea volver a la edición expresa de 10g, había una versión de Europa occidental que usaba el juego de caracteres de Windows-1252. A diferencia de las otras ediciones, Oracle no admite la gama completa de juegos de caracteres en Express Edition ni admite el cambio del juego de caracteres de una base de datos XE existente.

¿Por qué cree que necesita cambiar el juego de caracteres de la base de datos? Aparte de tomar potencialmente un poco más de espacio de almacenamiento para admitir los caracteres en la mitad superior del rango de Windows-1252, que generalmente no son particularmente usados, no hay muchas desventajas en una base de datos UTF-8.

+1

Tengo una base de datos existente en producción ... Se ejecuta en una instancia completa de Oracle 11g utilizando WE8MSWIN1252. Necesito importarlo en esta instancia de Oracle Express. – alessandroasm

+3

@alessandroasm - ¿Y se está viendo con problemas de espacio? Debería poder declarar la columna como 'VARCHAR2 (6 CHAR)' para asignar 6 caracteres en lugar de 6 bytes o configurar 'NLS_LENGTH_SEMANTICS' en" CHAR "para que' VARCHAR2 (6) 'asigne 6 caracteres en lugar de 6 bytes . O simplemente podría aumentar el tamaño de todas las columnas de caracteres que almacenan datos que no son ASCII. –

+5

Descubrí que Oracle Express DOES soporta WE8MSWIN1252 ... Todo lo que tenía que hacer era ejecutar 'createDb -dbchar WE8MSWIN1252' – alessandroasm

1

Diría que es su mejor opción cuando quiere ir a un conjunto de caracteres que solo admite un subconjunto del personajes originales, que su mejor opción es usar exp e imp back (o expdp y impdp).

¿Está seguro de que ninguna tabla contendrá ningún carácter que no se encuentre en la página de códigos 1252?

+0

Esto es expdp, vuelve a crear la base de datos completa, y impdp vuelve. – kubanczyk

+0

@kubanczyk: de hecho. – Benoit

+0

El verdadero problema es que estoy intentando importar datos en una tabla que tiene una columna definida como VARCHAR (6 bytes). Y luego hay una fila que tiene exactamente 6 bytes en la codificación fuente pero necesita 7 en el destino ... – alessandroasm

1

El problema de ejecutar solo ese comando ALTER DATABASE es que el diccionario de datos no se ha convertido y puede estar dañado.

Tuve el mismo problema. En mi caso, estamos usando Oracle 11g Express Edition (11.2.0.2.0) y realmente necesitamos que se ejecute en el juego de caracteres WE8MSWIN1252, pero no puedo cambiar el juego de caracteres en la instalación (siempre se instala con AL32UTF8).

Con un Oracle Client 11g instalado como administrador y ejecute solo el csscan full=y (consulte este enlace https://oracle-base.com/articles/10g/character-set-migration) y observamos que hay problemas de datos perdidos y convertibles en nuestra base de datos. Pero los problemas están en los esquemas MDSYS (Oracle Spatial) y APEX_040000 (Oracle Application Express). Entonces, como no necesitamos estos productos, los eliminamos (consulte este enlace: http://fast-dba.blogspot.com.br/2014/04/how-to-remove-unwanted-components-from.html).

Luego, exportamos con expdp los esquemas de los usuarios y soltamos a los usuarios (se deben volver a crear al final del proceso).

Ejecutando csscan nuevamente con full=y capture=y, informa que: The data dictionary can be safely migrated using the CSALTER script. Si el informe no tiene esto, el csalter.guión PLB no va a funcionar, porque hay algunas condiciones que no estarán satisfechos:

  • inmutable para todos VARCHAR2 CHAR y datos extensos (Diccionario de datos y datos de aplicaciones)
  • inmutables para todos los datos de aplicación CLOB
  • inmutable y/o convertibles para todos diccionario de datos CLOB

En nuestro caso, estas condiciones fueron satisfechos y se corrió el guión csalter éxito. Además, este script ejecuta el comando ALTER DATABASE que está tratando de ejecutar y convierte los datos CLOB del diccionario de datos que es convertible.

Finalmente, creamos los usuarios y los espacios de tabla de nuestra aplicación e importamos el volcado de los datos de usuario con éxito.

Cuestiones relacionadas