【Oracle Cloud Free & DB】第3回:JSTに変えても時間が違う?都度切断の罠を「ログオン・トリガー」で根本から美しく解決する
前回、ツール側の地域設定を「日本」に変更しました。これで画面の見た目は日本仕様になりましたが、ここで最大級の罠が立ちはだかります。お馴染みの SELECT SYSDATE FROM DUAL; だけでなく、セッションに従うはずの SELECT CURRENT_DATE FROM DUAL; を実行しても、返ってくるのは相変わらず9時間遅れの「世界標準時(UTC)」のままなのです。ネットにある『ALTER SESSIONを使おう』という泥臭い方法ではなく、データベースの機能を活かして「最もエレガントに根本解決する」現場の定石を解説します。
1. なぜ「ALTER SESSION」を実行しても時間がズレるのか?
Autonomous Database(PaaS)において、SYSDATEがクラウド基盤のOS時刻(UTC)に固定されているのは仕様ですが、なぜ画面上で ALTER SESSION SET TIME_ZONE = 'Asia/Tokyo'; を実行した後に CURRENT_DATE を叩いても時間が戻してしまうのでしょうか?
その原因は、ブラウザ上の開発ツールである「データベース・アクション」の挙動にあります。このツールは、SQLを実行するたびに内部でセッションを一度切断・再接続するような挙動(ステートレスな制御)をとっています。そのため、画面上で手動でALTER SESSIONを実行しても、次のSQLを実行した瞬間にはその効果がリセットされ、初期状態(UTC)へと戻ってしまうのです。
2. 【最高にエレガントな解決策】「AFTER LOGONトリガー」で自動化する
毎回SQLに足し算(+9/24)を書いたり、実行手順を工夫したりするのはスマートではありません。一番エレガントな解決策は、「誰が、どのツールから、いつ接続してきても、ログインした瞬間に自動でタイムゾーンを日本(JST)に書き換える仕組み」をデータベース側に仕込むことです。
Oracleの標準機能である「AFTER LOGONトリガー(ログオン後トリガー)」をADMIN権限で1回作成しておくだけで、システムが自動的にセッションをコントロールしてくれます。
ワークシートで以下のSQLを1度だけ実行します(※この時だけはF5などのスクリプト実行で流します)。
CREATE OR REPLACE TRIGGER SET_JST_AFTER_LOGONAFTER LOGON ON DATABASEBEGINEXECUTE IMMEDIATE 'ALTER SESSION SET TIME_ZONE = ''Asia/Tokyo''';END;/
3. 実機での検証ログ:普通に叩くだけで完璧な日本時間に!
トリガーの作成が完了したら、もう面倒な前処理やF5キーでの一括実行すら不要です。ブラウザをリロードし、ただ普通にいつもの標準関数を通常の実行ボタン(▶)で1行ずつ叩いてみましょう。ツール特有の揮発性に邪魔されることなく、見事に正真正銘の「正しい日本時間」が一発で返ってきます。
SELECT CURRENT_DATE FROM DUAL;CURRENT_DATE
------------------
2026/05/17 19:48:06
経過時間: 00:00:00.002
1行が選択されました。
--------------------------------------------------
SELECT LOCALTIMESTAMP FROM DUAL;LOCALTIMESTAMP
---------------------------
2026-05-17T19:48:06.502281Z
経過時間: 00:00:00.002
1行が選択されました。
4. まとめ:インフラの仕組みで解決するのがプロの定石
開発者が個別にワークアラウンド(回避策)を講じるのではなく、データベースというインフラ側の仕組み(トリガー)で縛る。これこそが、複数人での開発や、将来的なアプリケーション接続も見際据えた、最もスムーズでエレガントなアーキテクチャの形です。
1. ツール側でセッションが都度切断される特性をデータベースの機能でカバーする。
2. ADMIN権限を活かし、「AFTER LOGONトリガー」を仕込んでセッション初期化を完全自動化。
3. 環境が整えば、以降は「CURRENT_DATE」を叩くだけで常にスムーズに日本時間を取得可能。
これで言語、日付書式、そして最も難所だった「自動での日本時間取得」まで、クラウド特有の罠をすべてエレガントに攻略し、完璧な開発ベースが整いました!ストレスが一切なくなったところで、次回第4回は、いよいよもう一つの無料枠を使って「19c」インスタンスを追加し、この最新26aiとの本格的な並走比較検証に入っていきます。どうぞお楽しみに!