Résumé : Procédure de mise à jour du fichier DST (Daylight Saving Time) d'Oracle Database, nécessaire lors d'une évolution des règles de changement d'heure dans les pays couverts par la base.

Environnement : Oracle Database 19c


Contexte

Oracle distribue ses règles de fuseau horaire (DST) dans des fichiers timezlrg_XX.dat embarqués dans $ORACLE_HOME/oracore/zoneinfo. Lorsqu'une nouvelle version du fichier est disponible (ex. : DSTv43), les colonnes de type TIMESTAMP WITH TIME ZONE stockées avec l'ancienne version peuvent devenir incohérentes.

Oracle fournit deux scripts pour gérer la mise à jour sans réinstallation du binaire :

Script Rôle
utltz_upg_check.sql Analyse et prépare la mise à jour (lecture seule)
utltz_upg_apply.sql Applique la mise à jour (redémarre la base 2 fois)

Attention : utltz_upg_apply.sql redémarre la base deux fois sans confirmation. Planifier une fenêtre de maintenance.

Prérequis

Procédure

1. Vérifier la version DST actuelle et détecter la version disponible

@?/rdbms/admin/utltz_upg_check.sql

Exemple de sortie :

INFO: Database version is 19.0.0.0 .
INFO: Database RDBMS DST version is DSTv40 .
INFO: No known issues detected.
INFO: Newest RDBMS DST version detected is DSTv43 .
INFO: Now run utltz_upg_apply.sql to do the actual RDBMS DST update.

Le script confirme que la base est en DSTv40 et qu'une mise à jour vers DSTv43 est disponible. Aucune modification n'est effectuée à cette étape.

2. Appliquer la mise à jour DST

Attention : la base va redémarrer deux fois automatiquement.

@?/rdbms/admin/utltz_upg_apply.sql

Le script effectue les opérations suivantes :

  1. Redémarre la base en mode UPGRADE pour migrer les données SYS TSTZ
  2. Redémarre la base en mode NORMAL pour migrer les données non-SYS TSTZ
  3. Met à jour le fichier de timezone actif

Exemple de sortie (fin de script) :

INFO: Your new Server RDBMS DST version is DSTv43 .
INFO: The RDBMS DST update is successfully finished.
INFO: Make sure to exit this SQL*Plus session.
INFO: Do not use it for timezone related selects.

3. Vérifier la mise à jour

Ouvrir une nouvelle session SQL*Plus et exécuter :

select * from v$timezone_file;

Résultat attendu :

FILENAME                VERSION     CON_ID
-------------------- ---------- ----------
timezlrg_43.dat              43          0

Notes

Yacine Oumghar · DBA Oracle depuis 1998 Retour au blog