Cambiando el Time Zone de la base de datos

Para indicar la zona horaria de la base de datos en su creación se debe utilizar la clausula SET TIME_ZONE en la sentencia CREATE DATABASE. Si no se define el time zone de la base de datos, el valor por defecto será la zona horaria de sistema operativo del servidor.

El time zone se puede definir con el nombre la región o compensando respecto a UTC (Tiempo Universal coordinado). Para definir la zona horaria compensando respecto al UTC se haría de la siguiente forma:

CREATE DATABASE db01
SET TIME_ZONE='-05:00';

 

El rango válido es  -12:00 to +14:00.

Para definirlo con el nombre de la región:

CREATE DATABASE db01
...
SET TIME_ZONE='Europe/London';

Nota:

El time zone de la base de datos es relevante solo para las columnas TIMESTAMP WITH LOCAL TIME ZONE. Oracle recomienda que el time zone de la base de datos este en UTC, para evitar la conversión de datos y mejorar las prestaciones cuando los datos son transferidos de una base de datos a otra.

Una vez creada la base de datos se puede modificar el time zone con la siguiente sentencia:

ALTER DATABASE SET TIME_ZONE='05:00'; ALTER DATABASE SET TIME_ZONE='Europe/London';

Si se utilizan numeros en vez de letras en la definiciónd el TIME_ZONE hay que tner en cuenta que no realiza el cambio de horario.

Si se ejecuta este comando ALTER DATABASE SET TIME_ZONE y la base de datos tiene columnas con datos tipo TIMESTAMP WITH LOCAL TIME ZONE, se produce un error.

ERROR at line 1:
ORA-30079: cannot alter database timezone when database has TIMESTAMP WITH LOCAL TIME ZONE columns

El cambio no tiene efecto hasta que se reinicia la base de datos.

Se puede obtener el time zone de la base de datos con este comando

SELECT dbtimezone FROM DUAL;