Oracle10g: Cambiar el juego de carácteres de la base de datos

Puede suceder que después de instalar Oracle o configurar una nueva base de datos nos demos cuenta de que el juego de carácteres elegido durante la instalación no es el correcto. Lo que se nos puede ocurrir en casos como este es borrar la base de datos y reconfigurarla o cosas peores... Pero no hace falta. Podemos cambiar el juego de carácteres parando la base de datos, levantandola de forma restrictiva, cambiando la configuración y reiniciado la base de datos.  Howto:

--Primero nos conectamos con la base de datos
$ sqlplus sys/pwd@prod as sysdba

--Paramos la base de datos
SQL>SHUTDOWN IMMEDIATE;

--Levantamos de forma restrictiva*
SQL>STARTUP MOUNT;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER DATABASE OPEN;

--Cambiamos el mapa de carácteres
SQL>ALTER DATABASE CHARACTER SET <nuevo mapa de carácteres>;

--Reiniciamos la base de datos y yata
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP;

Para comprobar que los cambios han surtido efecto podemos consultar la vista v$nls_parameters y comprobar el valor de nls_characterset. Debemos saber que según el cambio de codificación que hagamos podemos perder datos (si es que los hay)  dependiendo del cambio.

*También es útil saber que levantar la base de datos en modo restrictivo es muy útil para realizar tareas de mantenimiento de la base de datos que se pueden hacer más rápido cuando no hay actividad de usuario (como puede ser reconstrucción de índices, reducción de segmentos, etc).