Oracleでは、なぜCURRENT_TIMESTAMP時々、他の回GMTをサーバーの時刻を返していますか?

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

  •  19-09-2019
  •  | 
  •  

質問

私は、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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top