Oracleでは、なぜCURRENT_TIMESTAMP時々、他の回GMTをサーバーの時刻を返していますか?
質問
私は、Oracle 9iデータベースに対して実行中のJavaアプリケーションを持っています。データベースベースレコードへの変更を追跡、監査レコードを作成するためのトリガーを有しています。トリガーは、CURRENT_TIMESTAMPを利用しています。私は、Javaアプリケーションをベースレコードを変更すると、監査レコードは、GMTを反映しています。私はヒキガエルを使用してベース・レコードを更新する場合は、監査レコードは、(現地時間に設定されている)サーバの時刻を反映します。 CURRENT_TIMESTAMPをクエリすると、サーバーの時刻を返します。私は違いの原因を見つけることができないようです。そこに任意のアイデア?
解決
NLSパラメータ値が(時々ログイン・トリガで)セッション内で設定することができ、多少トリッキーそれらを追跡することができるれ、OSの環境から継承された、またはインスタンス起動時に設定されます。
次のクエリでは、データベースからの乖離を示しており、あなたが2つの発散の環境からこの出力を得ることができれば、それが役立つことがあります:
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