在Oracle中,为什么有时CURRENT_TIMESTAMP返回服务器时,其他时间GMT?
题
我有运行针对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
不隶属于 StackOverflow