В Oracle почему current_timestamp иногда возвращает время сервера, а иногда GMT? - PullRequest
1 голос
/ 10 февраля 2010

У меня есть приложение Java, работающее с базой данных Oracle 9i. База данных имеет триггер для создания записи аудита, которая отслеживает изменения в базовой записи. Триггер использует current_timestamp. Когда я изменяю базовую запись с помощью приложения Java, запись аудита отражает GMT. Однако, если я использую Toad и обновляю базовую запись, запись аудита отражает время сервера (которое установлено на локальное время). Запрос current_timestamp возвращает время сервера. Я не могу найти то, что вызывает разницу. Есть какие-нибудь идеи?

1 Ответ

2 голосов
/ 15 февраля 2010

Значения параметров NLS могут быть установлены в течение сеанса (иногда в триггере входа в систему), унаследованы от среды ОС или установлены при запуске экземпляра, что усложняет их отслеживание.

Следующий запрос показывает отклонение от базы данных, и если вы можете получить этот вывод из двух разных сред, это может помочь:

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

Когда я запускал это на Windows SQL * Plus, я не получал возвращаемых строк, поэтому не было различий между средой моего приложения и настройками по умолчанию для базы данных. Однако, когда я запустил его из среды 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
...