Cómo cambiar el juego de caracteres de una base de datos Oracle en producción. Utilizando para ello el modo comando mediante SQL Plus de Oracle. Para hemos utilizado el comando «alter database character set NUEVO_JUEGO_CARACTERES;».

En primer lugar nos conectaremos a la base de datos Oracle con un usuario con los suficientes privilegios (recomendable system). Para ello abriremos una ventana de consola MS-DOS, desde «Inicio» – «Ejecutar» – «cmd», pulsaremos INTRO:

Ejecutaremos la aplicación «SQL Plus» con el comando:

sqlplus /nolog

Mostrará la versión de la aplicación:

SQL*Plus: Release 10.2.0.1.0 – Production on Dom Jul 23 17:46:12 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.

Nos conectaremos a la base de datos Oracle con los privilegios suficientes con el comando:

connect nombre_usuario/contraseña@nombre_base_datos as sysdba

En nuestro caso utilizamos las credenciales del Sistema Operativo y nos conectamos a la base de datos por defecto:

connect /as sysdba

Mostrará un mensaje indicando que nos hemos conectado:

Conectado.

Para comprobar el juego de caracteres actual ejecutaremos la siguiente consulta:

select value from nls_database_parameters where parameter = ‘NLS_CHARACTERSET’;

Nos devolverá el valor del parámetro «NLS_CHARACTERSET’:

VALUE
WE8MSWIN1252

Detendremos la base de datos, es conveniente que no haya usuarios conectados pues se cancelarán las últimas transacciones no validadas (commit). Para ello ejecutaremos el comando:

shutdown immediate;

Nos devolverá un mensaje indicando que la base de datos se ha cerrado:

Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.

La iniciaremos la base de datos en modo «mount» mediante el comando:

startup mount;

Nos devolverá un mensaje indicando que la base de datos se ha montado:

Instancia ORACLE iniciada.
Total System Global Area 188743680 bytes
Fixed Size 1286460 bytes
Variable Size 83889860 bytes
Database Buffers 100663296 bytes
Redo Buffers 2904064 bytes
Base de datos montada.

Habilitamos el acceso restringido de sesión con el comando:

alter system enable restricted session;

Mostrará un mensaje indicando se ha ejecutado correctamente el comando:

Sistema modificado.

Para evitar que Oracle inicie procesos o sesiones ejecutamos el comando:

alter system set job_queue_processes=0;

Mostrará un mensaje indicando se ha ejecutado correctamente el comando:

Sistema modificado.

Abrimos la base de datos mediante el comando:

alter database open;

Mostrará un mensaje indicando se ha ejecutado correctamente el comando:

Base de datos modificada.

Cambiamos el juego de caracteres:

alter database character set NUEVO_JUEGO_CARACTERES;

Mostrará un mensaje indicando se ha ejecutado correctamente el comando:

Base de datos modificada.

Volvemos a detenemos la base de datos (para iniciarla en modo normal):

shutdown immediate;

Mostrará un mensaje indicando que se ha abierto la base de datos correctamente:

Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.

Por último iniciamos la base de datos en modo normal, mediante el comando:

startup;

Mostrará un mensaje indicando que se ha abierto la base de datos correctamente:

Instancia ORACLE iniciada.
Total System Global Area 188743680 bytes
Fixed Size 1286460 bytes
Variable Size 83889860 bytes
Database Buffers 100663296 bytes
Redo Buffers 2904064 bytes
Base de datos montada.
Base de datos abierta.

Para comprobar que el cambio se ha realizado correctamente podremos volver a ejecutar la sentencia SQL:

select value from nls_database_parameters where parameter = ‘NLS_CHARACTERSET’;

A nivel de sistema operativo, en caso de Windows, habrá que modificar las entradas del regedit (registro de configuraciones) que hagan referencia a la cadena «NLS_LANG». Normalmente está en HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE, con el valor correspondiente, en nuestro ejemplo «SPANISH_SPAIN.WE8ISO8859P1»:

Desde «Inicio» – «Ejecutar» escribiremos «regedit»:

Buscaremos el valor «NLS_LANG»:

Haremos doble clic sobre «NLS_LANG» y lo cambiaremos por el valor adecuado:

A continuación os mostramos todo el texto de la ventana de consola de MS-DOS:

sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 – Production on Dom Jul 23 17:46:12 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connect /as sysdba
Conectado.
 select value from nls_database_parameters where parameter = ‘NLS_CHARACTERSET’;
VALUE
WE8MSWIN1252
shutdown immediate;
Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.
startup mount;
Instancia ORACLE iniciada.
Total System Global Area 188743680 bytes
Fixed Size 1286460 bytes
Variable Size 83889860 bytes
Database Buffers 100663296 bytes
Redo Buffers 2904064 bytes
Base de datos montada.
alter system enable restricted session;
Sistema modificado.
alter system set job_queue_processes=0;
Sistema modificado.
alter database open;
Base de datos modificada.
alter database character set WE8MSWIN1252;
shutdown immediate;
Base de datos cerrada.
Base de datos desmontada.
Instancia ORACLE cerrada.
startup;
Instancia ORACLE iniciada.
Total System Global Area 188743680 bytes
Fixed Size 1286460 bytes
Variable Size 83889860 bytes
Database Buffers 100663296 bytes
Redo Buffers 2904064 bytes
Base de datos montada.
Base de datos abierta.