Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment gérer l'heure d'été dans la base de données Oracle

La réponse est :cela dépend.

Au total, votre base de données compte trois fuseaux horaires

  1. Fuseau horaire de votre session :SESSIONTIMEZONE

Vous pouvez le modifier en ALTER SESSION SET TIME_ZONE=... à tout moment. Il est pertinent pour le résultat de

  • CURRENT_DATE

  • LOCALTIMESTAMP

  • CURRENT_TIMESTAMP


C'est également le fuseau horaire cible lorsque vous faites CAST({TIMESTAMP/DATE without any timezone} AS TIMESTAMP WITH {LOCAL} TIME ZONE)

SESSIONTIMEZONE par défaut peut être défini par la variable d'environnement ORA_SDTZ ou (sous Windows) par l'entrée de registre HKLM\SOFTWARE\Wow6432Node\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ (pour Client 32 bits), resp. HKLM\SOFTWARE\ORACLE\KEY_%ORACLE_HOME_NAME%\ORA_SDTZ (pour client 64 bits).

  1. Le fuseau horaire de la base de données :DBTIMEZONE

En fait, ce n'est pas si important dans l'utilisation quotidienne, cela n'est pertinent que pour TIMESTAMP WITH LOCAL TIME ZONE colonnes de type de données et définit le format de stockage.

Ce n'est PAS le fuseau horaire de SYSDATE ou SYSTIMESTAMP !!!

Vous ne pouvez pas modifier DBTIMEZONE sur votre base de données si la base de données contient une table avec un TIMESTAMP WITH LOCAL TIME ZONE colonne et la colonne contient des données. Sinon, il peut être modifié avec ALTER DATABASE SET TIME_ZONE='...'; . La modification ne prend effet qu'une fois la base de données fermée et redémarrée.

DBTIMEZONE est défini lors de la création de la base de données. Si aucun fuseau horaire n'est fourni lors de la création de la base de données, Oracle utilise par défaut le fuseau horaire du système d'exploitation du serveur.

  1. Le fuseau horaire du système d'exploitation du serveur de base de données :

Ce fuseau horaire est pertinent pour le résultat de

  • SYSDATE

  • SYSTIMESTAMP


Naturellement, ce fuseau horaire ne peut pas être modifié au niveau de la base de données. Si votre pays d'origine utilise l'heure d'été, ce fuseau horaire peut changer deux fois par an. Vous pouvez l'interroger avec SELECT TO_CHAR(SYSTIMESTAMP, 'tzr') FROM dual; , par exemple.

Donc, si votre système d'exploitation DB Server est correctement configuré, vous devriez obtenir les heures d'été à partir de la semaine prochaine (au moins pour l'Europe)