在Oracle中,为什么有时CURRENT_TIMESTAMP返回服务器时,其他时间GMT?

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

  •  19-09-2019
  •  | 
  •  

我有运行针对Oracle 9i数据库的Java应用程序。该数据库的触发器来创建一个审计记录,跟踪更改库记录。触发利用CURRENT_TIMESTAMP。当我修改库记录与Java应用程序,审计记录反映GMT。但是,如果我用蟾蜍和更新库记录,审核记录反映服务器的时间(这是设置为本地时间)。查询CURRENT_TIMESTAMP返回服务器时间。我似乎无法找出是什么原因导致的差异。任何想法了吗?

有帮助吗?

解决方案

NLS参数值可以在会话(有时在登录触发器)内进行设定,从OS环境中继承,或在实例启动时,这使得跟踪下来设置有点棘手。

下面的查询显示从数据库中发散,如果你可以从你的两个分叉环境得到这个输出,它可以帮助:

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