Dans Oracle, pourquoi ne retourne current_timestamp parfois du temps du serveur, d'autres fois GMT?

StackOverflow https://stackoverflow.com/questions/2238782

  •  19-09-2019
  •  | 
  •  

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?

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top