No Oracle, por que current_timestamp, por vezes, o tempo de retorno do servidor, outras vezes GMT?

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

  •  19-09-2019
  •  | 
  •  

Pergunta

Eu tenho um aplicativo Java em execução contra o banco de dados de um Oracle 9i. A base de dados tem um gatilho para criar um registo de auditoria, que controla as alterações para o registo de base. O gatilho utiliza current_timestamp. Quando eu modificar o registro base com o aplicativo Java, o registro de auditoria reflete GMT. No entanto, se eu usar Toad e atualizar o registro base, o registro de auditoria reflete horário do servidor (que é definido para hora local). Consultando CURRENT_TIMESTAMP retorna horário do servidor. Eu não consigo encontrar o que faz a diferença. Todas as idéias lá fora?

Foi útil?

Solução

Os valores dos parâmetros NLS pode ser definida dentro de uma sessão (às vezes em um gatilho login), herdado do ambiente OS, ou set na inicialização da instância, o que torna a rastreá-los um pouco complicado.

A seguir mostra consulta divergência do banco de dados, e se você pode obter esta saída de seus dois ambientes divergentes, que podem ajudar:

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

Quando eu corria que em um Windows SQL * Plus, eu não tenho linhas retornadas, por isso não havia diferenças entre meu ambiente de aplicativos e ali padrões de banco de dados. No entanto, quando eu corri de um ambiente 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top