RDS for Oracle のタイムゾーンを変更する

前回の記事「PowerShell で RDS for Oracle へファイル転送(PUT_RAW)」の最後で、RDS for Oracle のタイムゾーンが UTC であることが判明しました。 「Amazon RDS DB インスタンスのタイムゾーンを変更する方法を教えてください」 にも書いてますね。今回は、これを日本時間に変えてみましょう。

現状のタイムゾーンの確認

まずは、現状の確認です。DBTIMEZONE を確認すると… UTC ですね。

SELECT DBTIMEZONE FROM DUAL;
現状のタイムゾーンの確認(1)

SYSTIMESTAMP と接続しているクライアントの時間と比べてみても、ちょうど9時間ずれてますね。

現状のタイムゾーンの確認(2)

タイムゾーンの変更

ではタイムゾーンを変更してみます。前述のFAQから辿ると英語版に行ってしまうのですが、日本語版はここにあります。ここから辿ると「Oracle のタイムゾーン」に設定方法がありますので、こちらに沿って実施します。

まず、AWS 管理コンソールより、「RDS」→「オプショングループ」を選択します。

タイムゾーンの変更(1)

デフォルトのオプショングループは変更できないので、新しく「グループを作成」を実行します。名前と作成した RDS と同じバージョンを選択して「作成」します。

タイムゾーンの変更(2)

作成されたオプショングループ「my-option-group」を選択して「オプションを追加」を実行します。

タイムゾーンの変更(3)

オプションは「TIMEZONE」、値は「Asia/Tokyo」を選択し「オプションの追加」を実行します。

タイムゾーンの変更(4)

次に作成したオプショングループとインスタンスを紐づけします。「RDS」→「データベース」から該当するインスタンスを選択し「変更」を実行します。

タイムゾーンの変更(5)

最後の方の「追加設定」セクションでオプショングループを作成した my-option-group に変更します。

タイムゾーンの変更(6)

変更のサマリーを確認して「すぐに適用」してみます。

タイムゾーンの変更(7)

変更後のタイムゾーンの確認

まずは DBTIMEZONE を確認です。変わってますね。

変更後のタイムゾーンを確認(1)

次に SYSTIMESTAMP を確認します。日本時間になりましたね。

変更後のタイムゾーンを確認(2)

Oracle Scheduler タイムゾーンの変更

これで RDS 全体のタイムゾーンは変わったのですが、実は Oracle Scheduler のタイムゾーンまでは変わってません。

SELECT OWNER,WINDOW_NAME,NEXT_START_DATE FROM DBA_SCHEDULER_WINDOWS WHERE ENABLED='TRUE'
Oracle Scheduler タイムゾーンの変更(1)

Oracle Scheduler のタイムゾーン変更については、「Oracle DB インスタンスの一般的なデータベースタスクの実行」の「Oracle Scheduler ジョブのタイムゾーンの設定」の項に記載がある通り、DBMS_SCHEDULER パッケージを利用して変更します。

EXEC DBMS_SCHEDULER.SET_SCHEDULER_ATTRIBUTE('DEFAULT_TIMEZONE','Asia/Tokyo');

Oracle Scheduler Window を再度確認してみます。日本時間になりましたね。

Oracle Scheduler タイムゾーンの変更(2)

RDSADMIN_UTIL.ALTER_DB_TIME_ZONE

冒頭でご紹介したユーザーガイドには、今回設定を変更したタイムゾーンの変更に併記して、Amazon RDS プロシージャの利用についてが言及されています。

・Timezone オプション
Timezone オプションは、ホストレベルでタイムゾーンを変更し、SYSDATE など、すべての日付列と値に影響します。詳細については、「Oracle のタイムゾーン」を参照してください。

・Amazon RDS プロシージャ rdsadmin.rdsadmin_util.alter_db_time_zone
alter_db_time_zone プロシージャは、特定のデータ型のみのタイムゾーンを変更し、SYSDATE は変更しません。タイムゾーンの設定に関する他の制限については、Oracle ドキュメントに示されています。

Amazon Relational Database Service ユーザーガイド

ですが、正直2点目の「特定のデータ型」って全く意味がわかりません、、、ちょっと追跡調査が必要な気がします。