En Oracle, ¿por qué no volver current_timestamp veces la hora del servidor, otras veces GMT?

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

  •  19-09-2019
  •  | 
  •  

Pregunta

Tengo una aplicación Java que se ejecuta contra una base de datos Oracle 9i. La base de datos tiene un disparador para crear un registro de auditoría, que rastrea los cambios en el registro de la base. El disparador utiliza current_timestamp. Cuando modifico el registro de la base con la aplicación Java, el registro de auditoría refleja GMT. Sin embargo, si uso sapo y actualizar el registro de la base, el registro de auditoría refleja la hora del servidor (que se ajusta a la hora local). Consulta current_timestamp devuelve la hora del servidor. Parece que no puedo encontrar lo que causa la diferencia. Cualquier idea por ahí?

¿Fue útil?

Solución

Los valores de los parámetros de NLS se pueden ajustar dentro de una sesión (a veces en un disparador de inicio de sesión), heredada del entorno de sistema operativo o puesta a instancia de inicio, lo que les hace el seguimiento de abajo un poco complicado.

La siguiente consulta muestra divergencia con respecto a la base de datos, y si se puede obtener esta salida de sus dos entornos divergentes, puede ayudar a:

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

Cuando me encontré con que en un Windows SQL * Plus, no tengo filas devueltas, por lo que no hubo diferencias entre mi entorno de aplicación y allá por defecto de base de datos. Sin embargo, cuando me encontré con él desde un entorno 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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top