以下のコマンドを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
NLS設定はサーバーとクライアントで異なるため、これは正常です。
サーバーの設定に関係なく、NLS変換は常にクライアント側で行われます。これらの出力を比較します。
select * from nls_database_parameters;
select * from nls_session_parameters;
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