Dans Oracle, pourquoi ne retourne current_timestamp parfois du temps du serveur, d'autres fois GMT?
Question
J'ai une application Java en cours d'exécution contre une base de données Oracle 9i. La base de données a un déclencheur pour créer un enregistrement d'audit, qui permet de suivre les modifications apportées à l'enregistrement de base. Le déclencheur utilise current_timestamp. Quand je modifier l'enregistrement de base avec l'application Java, le dossier d'audit reflète GMT. Cependant, si j'utilise Toad et mettre à jour le dossier de base, le dossier de vérification reflète le temps du serveur (qui est mis à l'heure locale). Interrogation current_timestamp renvoie le temps du serveur. Je ne peux pas sembler trouver ce qui cause la différence. Toutes les idées là-bas?
La solution
valeurs des paramètres NLS peuvent être réglées dans une session (parfois dans un déclencheur de connexion), héritée de l'environnement du système d'exploitation, ou un ensemble au démarrage de l'instance, ce qui les rend le suivi quelque peu délicat.
La requête suivante montre la divergence de la base de données, et si vous pouvez obtenir cette sortie de vos deux environnements divergents, il peut aider:
SELECT * FROM
(
SELECT PARAMETER,
VALUE AS SESSION_VALUE,
(SELECT VALUE FROM NLS_INSTANCE_PARAMETERS NIP
WHERE NIP.PARAMETER = NSP.PARAMETER) INSTANCE_VALUE,
(SELECT VALUE FROM NLS_DATABASE_PARAMETERS NDP
WHERE NDP.PARAMETER = NSP.PARAMETER) DATABASE_VALUE
FROM NLS_SESSION_PARAMETERS NSP
)
WHERE NVL(INSTANCE_VALUE, DATABASE_VALUE) <> DATABASE_VALUE
OR NVL(SESSION_VALUE, NVL(INSTANCE_VALUE, DATABASE_VALUE)) <> DATABASE_VALUE
Quand je courais que sur un ordinateur Windows SQL * Plus, je suis retourné aucune ligne, donc il n'y avait pas de différence entre mon environnement d'applications et de bases de données par défaut là-bas. Cependant, quand je l'ai couru d'un environnement Unix:
PARAMETER SESSION_VALUE INSTANCE_VALUE DATABASE_VALUE
------------------------- ------------------------- ------------------------- -------------------------
NLS_DATE_FORMAT YYYY-MM-DD HH24:MI:SS DD-MON-RR
NLS_TIMESTAMP_TZ_FORMAT YYYY-MM-DD HH24:MI:SS.FF DD-MON-RR HH.MI.SSXFF AM
TZH:TZM TZR