はじめに
Oracle Database 23ai では、PDBごとに Timezone が固有に設定できるようになりました。
- System Timezone Autonomy for Pluggable Databases
https://docs.oracle.com/en/database/oracle/oracle-database/23/nfcoa/oltp_dbarch.html#GUID-87444-1
PDB単位のTimezone について
21cからはCDBのみ構成可能となり、CDBとして一括での管理性と PDBの独立性をいかにバランス良く保つかが必要になりますが、23aiでPDB個別のTimezone が設定できる事により、さらにきめ細かい設計・運用に寄与するのではないでしょうか。
DGPDBでも Timezone を合わせる必要があるでしょうし、レプリケーション先を1つのCDBに統合・集約する場合などで活用できるでしょう。
ここでは、以下の環境構築を試します。
PDB単位のTimezone 環境構築
- 23ai の新しい初期化パラメータの確認から
SQL> show parameter time_at_dbtimezone
NAME TYPE VALUE
------------------------------------ ----------- ---------------------
time_at_dbtimezone string off
SQL> select name,ISPDB_MODIFIABLE from v$parameter where name='time_at_dbtimezone';
NAME ISPDB
------------------------------------------------------------- -----
time_at_dbtimezone TRUE
PDB単位で変更が可能である事を確認できます。
次にPDBLAおよびPDBTKの2つのPDBを持つCDBを作成します。
Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
Version 23.5.0.24.07に接続されました。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ----------------------------------- ----------
2 PDB$SEED READ ONLY NO
3 PDBLA READ WRITE NO
4 PDBTK READ WRITE NO
各PDB (LA & JP) に接続し、それぞれ以下を実行し、PDBを再起動します。
- PDBLA
SQL>alter system set time_at_dbtimezone = 'DATABASE' scope=spfile;
SQL>alter database set time_zone='America/Los_Angeles';
- PDBTK
SQL>alter system set time_at_dbtimezone = 'DATABASE' scope=spfile;
SQL>alter database set time_zone='Asia/Tokyo';
- CDB$ROOTから以下を実行する
SQL>alter pluggable database all close;
SQL>alter pluggable database all open;
- PDBLA で確認
SQL> show parameter time_at_dbtimezone
NAME TYPE VALUE
------------------------------------ ----------- ---------------------
time_at_dbtimezone string DATABASE
SQL> select DBTIMEZONE from dual;
DBTIMEZONE
-------------------
America/Los_Angeles
SQL> SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" FROM DUAL;
NOW
-------------------
07-18-2024 06:54:50 👈
- PDBTK で確認
<PDBTKで>
SQL> show parameter time_at_dbtimezone
NAME TYPE VALUE
------------------------------------ ----------- ---------------------
time_at_dbtimezone string DATABASE
SQL> select DBTIMEZONE from dual;
DBTIMEZONE
-------------------
Asia/Tokyo
SQL> SELECT TO_CHAR(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW" FROM DUAL;
NOW
-------------------
07-18-2024 22:55:49 👈
最後に
特に国内のシステムにおいて、PDB個別のTimezone 設定は求められる場面は多くないかも知れません。が、様々な拠点を持つ企業データの統合・集約に伴う管理やBCPを踏まえたインフラには必要となるケースも考えられるので、抑えておきたい機能だと思います。