2010-02-10 13 views
1

J'ai une application Java exécutée sur une base de données Oracle 9i. La base de données comporte un déclencheur permettant de créer un enregistrement d'audit, qui suit les modifications apportées à l'enregistrement de base. Le déclencheur utilise current_timestamp. Lorsque je modifie l'enregistrement de base avec l'application Java, l'enregistrement d'audit reflète GMT. Toutefois, si j'utilise Toad et mettez à jour l'enregistrement de base, l'enregistrement d'audit reflète l'heure du serveur (qui est définie sur l'heure locale). L'interrogation de current_timestamp renvoie l'heure du serveur. Je n'arrive pas à trouver ce qui cause la différence. Des idées là-bas?Dans Oracle, pourquoi current_timestamp renvoie parfois l'heure du serveur, d'autres fois GMT?

Répondre

2

Les valeurs de paramètre NLS peuvent être définies au sein d'une session (parfois dans un déclencheur de connexion), héritées de l'environnement du système d'exploitation ou définies au démarrage de l'instance, ce qui rend leur suivi un 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 j'ai couru que sur un ordinateur Windows SQL * Plus, je suis aucune ligne renvoyée, il n'y avait donc pas de différences entre mon environnement d'application et ses paramètres par défaut. Cependant, quand je l'ai couru à partir 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 
+0

Adam - merci beaucoup. C'est très utile. Désolé je ne peux pas augmenter le compteur "Cette réponse est utile" - je n'ai pas encore assez de réputation. – Jim