はじめに
Autonomous DatabaaseでSYSDATE_AT_DBTIMEZONEがALTER SYSTEMで設定できるようになったということで、早速試してみました。
従来はALTER SESSIONのみの対応だったため、sysdate、systimestampが日本時間を返すようにするにはログオントリガーによるALTER SESSION文の実行等が必要でしたが、今回のアップデートにより、トリガーの作成等が不要になりました。
1. 事前確認
dateコマンドで現在時刻を確認します。
[opc@tools ~]$ date
Wed Oct 12 11:01:13 JST 2022
[opc@tools ~]$
SQL*PlusやDatabase Actions等のクライアントからadminユーザとしてAutonomous Databaseに接続します。
[opc@tools ~]$ sqlplus admin/adminユーザのパスワード@adb_medium
SQL*Plus: Release 19.0.0.0.0 - Production on 水 10月 12 11:02:15 2022
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.17.0.1.0
に接続されました。
SQL>
sysdateとsystimestampの戻り値を確認します。
SQL> SELECT systimestamp FROM dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
22-10-12 02:02:38.812911 +00:00
SQL> SELECT TO_CHAR(sysdate,'YYYY/MM/DD HH24:MI:SS') FROM dual;
TO_CHAR(SYSDATE,'YY
-------------------
2022/10/12 02:03:42
SQL>
プロビジョニング後のデフォルトの状態のAutonomous Databaseでは、sysdate、systimestampの戻り値がUTCになっています。
2. sysdate、systimestampが日本時間を返すようにするための設定
ALTER DATABASE SET TIME_ZONE文で、Autonomous Databaseのタイムゾーンを日本のタイムゾーン(+9:00)に設定します。
SQL> ALTER DATABASE SET TIME_ZONE='+09:00';
データベースが変更されました。
SQL>
ALTER SYSTEM SET SYSDATE_AT_DBTIMEZONE文でSYSDATE_AT_DBTIMEZONEパラメータをTRUEに設定します。
この設定により、Autonomous Databaseがsysdateとsystimestampをデータベースのタイムゾーンで返すようになります。
SQL> ALTER SYSTEM SET SYSDATE_AT_DBTIMEZONE=TRUE;
システムが変更されました。
SQL>
SQL*Plusを終了します。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.17.0.1.0との接続が切断されました。
[opc@tools ~]$
設定を反映するために、Autonomous Databaseを再起動します。
3. 動作確認
再度、現在時刻を確認します。
[opc@tools ~]$ date
Wed Oct 12 11:07:37 JST 2022
[opc@tools ~]$
SQL*PlusやDatabase Actions等のクライアントからAutonomous Databaseに接続します。
[opc@tools ~]$ sqlplus admin/adminユーザのパスワード@adb_medium
SQL*Plus: Release 19.0.0.0.0 - Production on 水 10月 12 11:07:41 2022
Version 19.16.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
最終正常ログイン時間: 水 10月 12 2022 11:07:01 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.17.0.1.0
に接続されました。
SQL>
改めて、sysdateとsystimestampの戻り値を確認します。
SQL> SELECT systimestamp FROM dual;
SYSTIMESTAMP
---------------------------------------------------------------------------
22-10-12 11:07:48.582872 +09:00
SQL> SELECT TO_CHAR(sysdate,'YYYY/MM/DD HH24:MI:SS') FROM dual;
TO_CHAR(SYSDATE,'YY
-------------------
2022/10/12 11:07:53
SQL>
sysdate、systimestampの戻り値が日本時間になっていることが確認できました。