Oracle9iデータベースに対してJavaアプリケーションを実行しています。データベースには、基本レコードへの変更を追跡する監査レコードを作成するトリガーがあります。トリガーはcurrent_timestampを利用します。Javaアプリケーションでベースレコードを変更すると、監査レコードにGMTが反映されます。ただし、Toadを使用してベースレコードを更新すると、監査レコードにはサーバー時間(現地時間に設定されている)が反映されます。current_timestampをクエリすると、サーバー時間が返されます。違いの原因がわからないようです。そこに何かアイデアはありますか?
質問する
462 次
1 に答える
2
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
これをWindowsSQL* 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
于 2010-02-15T17:11:27.383 に答える