Cómo cambiar la hora de la base de datos Oracle en entornos cloud (y no morir en el intento)

Hola Amig@s,

Si por un casual se topan con que la hora de la base de datos está mal, es decir, si al hacer un sysdate o systimestamp la hora que devuelve es anterior o posterior a la actual de su zona, entonces han venido al post correcto.

En el cloud, la base de datos se crea por defecto con la zona horaria de la plantilla de Oracle. Normalmente por defecto se crea como UTC. En nuestro caso, tenemos que cambiarlo a Europa y Madrid concretamente, la zona horaria específica en Linux es Europe/Madrid.

Para hacer el cambio, primero debemos comprobar si la hora del SO está bien. Basta con ejecutar en la consola ssh el comando date para que nos devuelva la hora. Si la hora coincide con la suya, entonces bien, podemos seguir adelante. En caso contrario, buscar "como cambiar la hora del sistema en Oracle linux 7".

Si la hora del SO está bien, lo primero es saber la hora que tiene la base de datos, eso puede verse ejecutando el siguiente comando:

SQL> select systimestamp, current_timestamp from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
06/04/20 12:12:31,063052 +00:00
06/04/20 14:12:31,063059 +02:00

Como pueden ver hay un desface evidente (2 horas), el parámetro systimestamp pertenece a la hora de la base de datos y current_timestamp pertenece a la hora del sistema operativo donde está corriendo la base de datos. El valor de systimestamp debería ser igual al del current_timestamp.

Manos a la obra:

1-Editar el fichero GRID_HOME/crs/install/s_crsconfig_<node_name>_env.txt (notese el node_name, es el nombre del nodo actual).

En la variable TZ lo cambiamos a Europe/Madrid.

2-Desde root ejecutamos al siguiente instrucción:

sudo su - root
srvctl setenv database -d nombredetubasededatos -T TZ=Europe/Madrid

3-Desde un SQLPLUS como SYS ejecutamos la siguiente instrucción:

ALTER DATABASE SET TIME_ZONE = '+00:00';

Donde +00:00 es el valor que depende de la diferencia horaria, es decir que si estamos en horario de verano habrá que sumarle 2, sino 1. ej. +02:00.

4-Por último hay que parar y arrancar respectivamente todo el entorno grid:

crsctl stop crs
crsctl start crs

5-Comprobamos que la hora actual del systimestamp (hora de la base de datos) y del current_timestamp (hora del sistema operativo) coinciden.

SQL> select systimestamp, current_timestamp from dual;

SYSTIMESTAMP
---------------------------------------------------------------------------
CURRENT_TIMESTAMP
---------------------------------------------------------------------------
06/04/20 12:12:31,063052 +02:00
06/04/20 14:12:31,063059 +02:00

Referencias: https://docs.cloud.oracle.com/en-us/iaas/Content/Database/References/timezones.htm

Espero que les haya resultado útil.
Salu2.

Share on Google Plus
    Blogger Comment

0 comentarios: