web-dev-qa-db-ja.com

Oracle systimestampの結果がDBサーバーとクライアントで異なる

以下のコマンドをdbサーバーと同じdbサーバーに接続されているクライアントマシンで実行すると、奇妙な出力が表示されます。

DBサーバー上

SQL> select systimestamp from dual;

systimestamp

25-JUN-15 06.16.13.424135 PM +08:00

クライアントマシン上

SQL> select systimestamp from dual;

SYSTIMESTAMP

25-JUN-15 02.16.57.936662 AM -08:00

参考のために以下の出力

SQL>  select dbtimezone, sessiontimezone from dual;

DBTIMEZONE                     SESSIONTIMEZONE

+00:00                            +08:00
1
Nitesh Kumar

NLS設定はサーバーとクライアントで異なるため、これは正常です。

サーバーの設定に関係なく、NLS変換は常にクライアント側で行われます。これらの出力を比較します。

select * from nls_database_parameters;
select * from nls_session_parameters;
1
BLT

SYSTIMESTAMPのタイムゾーンはオペレーティングシステムから取得されます。ただし、オペレーティングシステムでは、これはユーザー固有の場合があります。

DBサーバーでこれを行うと、異なる結果が得られますか?

$ su Oracle

$ setenv TZ America/Winnipeg
$ sqlplus / as sysdba

SQL> select systimestamp from dual;
...
SQL> exit

$ setenv TZ Europe/Zurich
$ sqlplus / as sysdba

SQL> select systimestamp from dual;
...
SQL> exit
0