sql >> Base de Datos >  >> RDS >> Oracle

Cómo manejar el horario de verano en la base de datos de Oracle

La respuesta es:Depende.

En total, su base de datos tiene tres zonas horarias

  1. La zona horaria de su sesión:SESSIONTIMEZONE

Esto se puede cambiar por ALTER SESSION SET TIME_ZONE=... en cualquier momento. Es relevante para el resultado de

  • CURRENT_DATE

  • LOCALTIMESTAMP

  • CURRENT_TIMESTAMP


También es la zona horaria de destino cuando haces CAST({TIMESTAMP/DATE without any timezone} AS TIMESTAMP WITH {LOCAL} TIME ZONE)

Predeterminado SESSIONTIMEZONE se puede configurar mediante la variable de entorno ORA_SDTZ o (en Windows) mediante la entrada de registro HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ (para Cliente de 32 bits), resp. HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ (para Cliente de 64 bits).

  1. La zona horaria de la base de datos:DBTIMEZONE

En realidad, esto no es tan importante en el uso diario, solo es relevante para TIMESTAMP WITH LOCAL TIME ZONE columnas de tipo de datos y define el formato de almacenamiento.

Esto NO la zona horaria de SYSDATE o SYSTIMESTAMP !!!

No puede cambiar DBTIMEZONE en su base de datos si la base de datos contiene una tabla con un TIMESTAMP WITH LOCAL TIME ZONE columna y la columna contiene datos. De lo contrario, se puede cambiar con ALTER DATABASE SET TIME_ZONE='...'; . El cambio no surtirá efecto hasta que la base de datos se haya cerrado y reiniciado.

DBTIMEZONE se establece cuando se crea la base de datos. Si no se proporciona una zona horaria durante la creación de la base de datos, Oracle utiliza de manera predeterminada la zona horaria del sistema operativo del servidor.

  1. La zona horaria del sistema operativo del servidor de la base de datos:

Esta zona horaria es relevante para el resultado de

  • SYSDATE

  • SYSTIMESTAMP


Naturalmente, esta zona horaria no se puede cambiar a nivel de base de datos. En caso de que su país de origen utilice el horario de verano, esta zona horaria puede cambiar dos veces al año. Puede interrogarlo con SELECT TO_CHAR(SYSTIMESTAMP, 'tzr') FROM dual; , por ejemplo.

Por lo tanto, si el sistema operativo de su servidor DB está configurado correctamente, debería obtener horarios de verano a partir de la próxima semana (al menos para Europa)