En Oracle, ¿por qué no volver current_timestamp veces la hora del servidor, otras veces GMT?
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í?
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