OJO! NO MODIFIQUES EL CHARACTER SET A NO SER QUE ESTÉS COMPLETAMENTE SEGURO DE LO QUE HACES!
En muchas ocasiones, es necesaria la exportación/importación de dmps entre distintas instancias de base de datos de distintos servidores, para que no haya problemas con lo acentos y caracteres “extraños”, tenemos que tener en cuenta el “juego de caracteres” que definimos para nuestra BD y que este coincida (para que no haya conversión de caracteres en los import) en los servidores entre los que se realizan los export/import.
Para consultar el “character set”, nos conectamos a la instancia que queramos, a mi me gusta hacerlo asi:
(Si estamos en un solaris, como yo, no olvidemos hacer esto con el usuario oracle)
#sqlplus /nolog
SQL>connect sys/contraseña@instancia as sysdba;
SQL> select * from NLS_DATABASE_PARAMETERS;
Y sale esto:
PARAMETER VALUE
—————————— —————————————-
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET WE8ISO8859P1
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
PARAMETER VALUE
—————————— —————————————-
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY $
NLS_COMP BINARY
NLS_LENGTH_SEMANTICS BYTE
NLS_NCHAR_CONV_EXCP FALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 10.2.0.1.0
Ahora, es posible que queramos modificar el parámetro NLS_CHARACTERSET WE8ISO8859P1 , al WE8MSWIN1252 que es un “super-set” del anterior.
1.- Lo primero es cerrar la BD:
SQL>shutdown immediate;
2.- Hacemos un backup completo de la base de datos porque la sentencia “alter” que vamos a ejecutar no permite roll-back. Después arrancamos la base de datos solo montándola:
SQL>startup mount;
Si dá problemas de listener, abre en modo mount desde el enterprise manager por web:
http://servidor:puerto/em
después puedes volver a la terminal y seguir.
3.- SQL>alter system enablerestricted session;
4.- SQL>alter system set job_queue_processes=0;
5.- SQL>alter system set aq_tm_processes=0;
6.- SQL>alter database open;
7.- SQL>alter database character set WE8MSWIN1252;
8.- SQL>shutdown immediate;
9.- SQL>startup;
Posibles problemas:
Si necesitas salir del sqlplus antes de haber hecho shutdown y startup, recuerda que, para volver a entrar, necesitas deshabilitar el modo restricted de la siguiente manera:
$ sqlplus / as sysdba;
SQL*Plus: Release 10.2.0.1.0 – Production on Tue Apr 28 11:47:34 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> alter system disable restricted session;
System altered.
En Solaris, si necesitas reiniciar la máquina, recuerda que si no lo tienes automatizado deberás arrancar manualmente los servicios de listener y la consola de enterprise manager via web con los siguientes comandos:
- lsnrctl start <intro>
- emctl start dbconsole <intro>