martes, 2 de agosto de 2016

Como cambiar el set de caracteres a una base de datos 12c

Como cambiar el set de caracteres a una base de datos 12c

Por Ronald Vargas QuesadaOrace ACE Director
Publicado en Abril 2016
Pasos para ejecutar el cambio del valor del parámetro. Leer el contenido completo de la guía. Al final se detalle algunos aspectos importantes para ambiente de RAC.

Recomendable realizar un full respaldo antes de continuar con este proceso.

Objetivo: Actualizar la tabla sys.prop$ del diccionario de la base de datos en donde se almacena el set de caracteres de la base de datos.
  • Validar el valor de los parámetros en la base de datos
SQL> column VALUE format a10
SQL> column PARAMETER format a30
SQL> select * from v$nls_parameters;


SQL> /


PARAMETER                      VALUE                              CON_ID
-----------------------------  ------------------------------  ---------
NLS_LANGUAGE                   AMERICAN                                0
NLS_TERRITORY                  AMERICA                                 0
NLS_CURRENCY                   $                                       0
NLS_ISO_CURRENCY               AMERICA                                 0
NLS_NUMERIC_CHARACTERS         .,                                      0
NLS_CALENDAR                   GREGORIAN                               0
NLS_DATE_FORMAT                DD-MON-RR                               0
NLS_DATE_LANGUAGE              AMERICAN                                0
NLS_CHARACTERSET               WE8ISO8859P15                           0
NLS_SORT                       BINARY                                  0
NLS_TIME_FORMAT                HH.MI.SSXFF AM                          0
NLS_TIMESTAMP_FORMAT           DD-MON-RR HH.MI.SSXFF AM                0
NLS_TIME_TZ_FORMAT             HH.MI.SSXFF AM TZR                      0
NLS_TIMESTAMP_TZ_FORMAT        DD-MON-RR HH.MI.SSXFF AM TZR            0
NLS_DUAL_CURRENCY              $                                       0
NLS_NCHAR_CHARACTERSET         AL16UTF16                               0
NLS_COMP                       BINARY                                  0
NLS_LENGTH_SEMANTICS           BYTE                                    0
NLS_NCHAR_CONV_EXCP            FALSE                                   0

  • Bajar la base de datos y seguir los pasos indicados a continuación
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.


SQL> startup mount
ORACLE instance started.


Total System Global Area 1895825408 bytes
Fixed Size                  2925744 bytes
Variable Size             570428240 bytes
Database Buffers         1308622848 bytes
Redo Buffers               13848576 bytes
Database mounted.
SQL> show parameter job_queue_processes


NAME                  TYPE        VALUE
--------------------- ----------- ----------------------
job_queue_processes   integer     1000


SQL> alter system set job_queue_processes=0;
System altered.


SQL> alter database open;
Database altered.


SQL> alter database character set WE8MSWIN1252;
alter database character set WE8MSWIN1252
  *
ERROR at line 1:
ORA-12719: operation requires database is in RESTRICTED mode
 
SQL> update sys.props$ set value$='WE8MSWIN1252' where name='NLS_CHARACTERSET';
1 row updated.
SQL> commit;
Commit complete.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

  • Volver a levantar la base de datos y aplicar los siguientes pasos.
SQL> startup mount
ORACLE instance started.


Total System Global Area 1895825408 bytes
Fixed Size                  2925744 bytes
Variable Size             570428240 bytes
Database Buffers         1308622848 bytes
Redo Buffers               13848576 bytes
Database mounted.
SQL> alter system enable restricted session;


System altered.


SQL> alter database open;
Database altered.


SQL> alter database character set WE8MSWIN1252;
Database altered.


SQL> alter system set job_queue_processes=1000;
System altered.
 
  • Bajar la base de datos y proceder a validar los cambios.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.


Total System Global Area 1895825408 bytes
Fixed Size                  2925744 bytes
Variable Size             570428240 bytes
Database Buffers         1308622848 bytes
Redo Buffers               13848576 bytes
Database mounted.
Database opened.


SQL> select * from v$nls_parameters;


PARAMETER                      VALUE          CON_ID
-----------------------------  ----------  ---------
NLS_LANGUAGE                   AMERICAN            0
NLS_TERRITORY                  AMERICA             0
NLS_CURRENCY                   $                   0
NLS_ISO_CURRENCY               AMERICA             0
NLS_NUMERIC_CHARACTERS         .,                  0
NLS_CALENDAR                   GREGORIAN           0
NLS_DATE_FORMAT                DD-MON-RR           0
NLS_DATE_LANGUAGE              AMERICAN            0
NLS_CHARACTERSET               WE8MSWIN12          0
52
NLS_SORT                       BINARY              0
NLS_TIME_FORMAT                HH.MI.SSXF          0
F AM
. . . 
19 rows selected.
 
  • Validar cambios con datos
[oracle@dbvisit01 ~]$ env|grep NLS
NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252


[oracle@dbvisit01 ~]$ sqlplus /nolog
SQL*Plus: Release 12.1.0.2.0 Production on Thu May 14 14:10:31 2015
Copyright (c) 1982, 2014, Oracle.  All rights reserved.


SQL> connect / as sysdba
Connected.
SQL> truncate table t1;


Table truncated.


SQL> desc t1
Name                       Null?    Type
-------------------------- -------- ---------------------
NOMBRE                              VARCHAR2(20)
APELLIDO                            VARCHAR2(20)


SQL> insert into t1 values ('Fabián','Nuñez');
1 row created.
SQL> commit;


Commit complete.


SQL> select * from t1;


NOMBRE               APELLIDO
-------------------- --------------------
Fabián               Nuñez
SQL>


Aplicación en ambientes RAC
Para ambientes en RAC es necesario modificar algunos pasos al inicio del proceso y final.
  1. SQL> ALTER SYSTEM SET CLUSTER_DATABASE=FALSE SCOPE=SPFILE;
  2. Bajar todas las instancias del RAC con el usuario GRID ( srvctl stop database –d
  3. Levantar la base de datos en el nodo 1
Cuando se concluya el proceso es necesario volver a revertir los cambios iniciales.
En la base de datos del nodo1 configurar el parámetro de CLUSTER_DATABASE=TRUE
SQL> STARTUP MOUNT; 
SQL> ALTER SYSTEM SET CLUSTER_DATABASE=true scope=spfile; 
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=1000;
SQL> SHUTDOWN IMMEDIATE; 
 
Arrancar las instancias del RAC con el commando srvctl