Oracle
 sql >> Database >  >> RDS >> Oracle

Come gestire l'ora legale nel database Oracle

La risposta è:Dipende.

In totale il tuo database ne ha tre fusi orari

  1. Fuso orario della tua sessione:SESSIONTIMEZONE

Puoi cambiarlo con ALTER SESSION SET TIME_ZONE=... in ogni momento. È rilevante per il risultato di

  • CURRENT_DATE

  • LOCALTIMESTAMP

  • CURRENT_TIMESTAMP


È anche il fuso orario target quando esegui CAST({TIMESTAMP/DATE without any timezone} AS TIMESTAMP WITH {LOCAL} TIME ZONE)

SESSIONTIMEZONE predefinito può essere impostato dalla variabile di ambiente ORA_SDTZ o (su Windows) per voce di registro HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ (per client a 32 bit), risp. HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ (per client a 64 bit).

  1. Il fuso orario del database:DBTIMEZONE

In realtà questo non è così importante nell'uso quotidiano, è rilevante solo per TIMESTAMP WITH LOCAL TIME ZONE colonne del tipo di dati e definisce il formato di archiviazione.

Questo è NON il fuso orario di SYSDATE o SYSTIMESTAMP !!!

Non puoi modificare DBTIMEZONE sul tuo database se il database contiene una tabella con un TIMESTAMP WITH LOCAL TIME ZONE colonna e la colonna contiene dati. Altrimenti può essere modificato con ALTER DATABASE SET TIME_ZONE='...'; . La modifica non avrà effetto finché il database non sarà stato arrestato e riavviato.

DBTIMEZONE viene impostato quando viene creato il database. Se non viene fornito alcun fuso orario durante la creazione del database, Oracle utilizza per impostazione predefinita il fuso orario del sistema operativo del server.

  1. Il fuso orario del sistema operativo del server di database:

Questo fuso orario è rilevante per il risultato di

  • SYSDATE

  • SYSTIMESTAMP


Naturalmente questo fuso orario non può essere modificato a livello di database. Nel caso in cui il tuo paese di origine utilizzi l'ora legale, questo fuso orario potrebbe cambiare due volte l'anno. Puoi interrogarlo con SELECT TO_CHAR(SYSTIMESTAMP, 'tzr') FROM dual; , per esempio.

Quindi, se il tuo sistema operativo DB Server è configurato correttamente, dovresti ottenere l'ora legale dalla prossima settimana (almeno per l'Europa)