В Oracle, почему current_timestamp иногда возвращает серверное время, в другое время GMT?

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

  •  19-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Значения параметров 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top