Dans cet article nous alors parler d’une erreur qui revient souvent à l’installation de SQL Developer lorsque l’on travaille dans un environnement international. La connexion à la nouvelle base ajoutée ne fonctionne pas à cause de 2 erreurs : 00604 et 01882.
Symptôme de l’erreur : Timezone region not found
L’erreur se produit lorsqu’on ajoute une nouvelle connexion. Au moment du test de la connexion, la connexion à la base est impossible. Une fenêtre indique :
- ERROR ORA-00604 : error occurred at recursive SQL level 1
- ERROR ORA-01882 : timezone region not found
Cette erreur est fréquente lorsque l’on travaille sur des serveurs qui ne sont pas situés dans le même fuseau horaire que celui définit sur poste sur lequel est installé SQL Developer. Les paramètres du serveur ne sont pas modifiables, on va donc plutôt s’orienter vers l’indication à SQL Developer qu’il doit tenir compte d’un autre fuseau horaire. Cette opération qui devrait assez simple à réaliser n’est pas du tout évidente à trouver.
Pour visualiser les propriétés de SQL Developer, ce n’est pas vraiment intuitif. On accède à ces informations par le menu « Aide » puis l’entrée « A propos de ».
On constate que par défaut notre poste n’est pas localisé dans un fuseau horaire particulier. Le paramètre n’est pas modifiable à partir de cet écran.
Ajout d’un fuseau horaire dans SQL Developer
Il faut le forcer au niveau du fichier de configuration le fuseau horaire à utiliser. Le paramètre n’est pas modifiable depuis les préférences de l’outil. Les modifications sont à apporter dans le fichier de configuration du programme sqldeveloper.conf dans le répertoire sqldeveloper\bin (Ici C:\sqldeveloper\sqldeveloper\bin\sqldeveloper.conf).
A la fin du fichier il suffit d’ajouter une ligne avec le décalage horaire de la zone dans laquelle est placée le serveur :
- AddVMOption -Duser.timezone=GMT+11
Ou encore mieux, ajouter directement la zone horaire et laisser Oracle gérer lui-même le décalage horaire :
- AddVMOption -Duser.timezone=Pacific/Noumea
La liste des zones horaires est enregistrée dans la table V$TIMEZONE-NAMES. Si on affiche le contenu de cette table on peut facilement trouver la zone qui correspond à notre serveur.
SELECT * FROM V$TIMEZONE_NAMES; |
On obtient ainsi tous les fuseaux horaires disponibles dans Oracle :
TZNAME | TZABBREV |
---|---|
Pacific/Midway | SST |
Pacific/Niue | LMT |
Pacific/Niue | NUT |
Pacific/Norfolk | LMT |
Pacific/Norfolk | NMT |
Pacific/Norfolk | NFT |
Pacific/Noumea | LMT |
Pacific/Noumea | NCT |
Pacific/Noumea | NCST |
Pacific/Pago_Pago | LMT |
Pacific/Pago_Pago | SAMT |
Pacific/Pago_Pago | NST |
Pour que la modification il faut redémarrer SQL Developer, la connexion fonctionne maintenant sans erreur. Ça y est nous voilà connectés à la base de données. En vérifiant à nouveau dans les propriétés de l’application on constate que le nouveau fuseau horaire a bien été pris en compte par SQL Developer.
Un point n’a pas été vérifié mais aurait mérité qu’on s’y attarde : comment faire pour se connecter à deux serveurs Oracle dans 2 fuseaux horaires différents ?