はじめに。

こんにちは、Oracle Databaseの検証チームです。
今回は、Oracle database 23aiの新機能であるTrue Cacheをご紹介いたします。

Oracle 23aiの新機能については気になっている方が多いのではないでしょうか。

True Cacheについて

キャッシュとは

アプリケーションのパフォーマンス向上のために利用される機能です。
データベースのデータは一時的にキャッシュ上に保存されます。
アプリケーションはキャッシュからデータを読み込む事で、データベースから直接データを読み込む回数を減らすことが出来ます。
その為、読み取り処理を高速化し、データベースやネットワークの負荷を削減することが可能です。

True Cacheとは

True Cacheは、プライマリ・データベースとは別に配置された読み取り専用キャッシュ・インスタンスです。
バッファ・キャッシュにデータを配置し、アプリケーションからの読取り処理に対応します。
Oracle Active DataGuardディスクレスにしたような仕組みを用いています。

従来のキャッシュとの比較

TrueCacheは、従来のキャッシュでは開発者の責任範囲だった以下の動作を、製品機能により自動で行ってくれます。

  • キャッシュへのデータロード
  • キャッシュ・データの一貫性管理
  • キャッシュ・データのリフレッシュ

※JSONを含むすべてのOracle Databaseオブジェクトおよびデータ型がキャッシュの対象です

開発時の設定の手間が減って、より使いやすいキャッシュになったんですね!

接続方式

True Cacheでは、アプリケーションの接続方式が2パターンあります。

  • パターン①:2つの接続を維持しておくパターン
    True Cache への読み取り専用接続と、データベースへの読み取り/書き込み接続の2つの接続を維持しておく
  • パターン②:1つの接続で用途を切り替えるパターン
    Javaアプリケーションは1つの接続を利用し、読み取り専用属性を設定することで、True Cacheとデータベースを動的に切り替えることができる
    ※JDBC 23aiで利用できます。

True Cacheの導入

ここからは、実際にTrue Cacheの導入をします。

構築の流れ

今回は以下のような流れで構築していきます。

    1. Oracle Database 23ai Freeをインストール(両ノード)
    2. データベースの作成(プライマリノード
    3. firewall設定(両ノード)
    4. 環境変数設定(両ノード)
    5. アーカイブ・ログモード設定(プライマリノード
    6. パスワードファイルをコピー(両ノード
    7. True Cacheの構築(True Cacheノード
    8. 事後確認(True Cacheノード)

前提条件

前提条件は以下の通りです。

  • OCIのコンピュートインスタンスを利用すること
  • 作成済みのVCNおよび以下2つのLinuxインスタンスがあること
    • プライマリノード:instance-db23ai
    • True Cacheノード:instance-truecache23ai

1.Oracle Database 23ai Freeをインストール(両ノード)

2つのノードにOracle Database 23ai Freeをインストールします。
DBCAを使う事もできますが、今回はRPMパッケージを使用します。

[root@instance-truecache23ai ~]# dnf -y install oracle-database-preinstall-23ai
Last metadata expiration check: 1 day, 19:55:16 ago on Tue 12 Nov 2024 06:09:16 AM GMT.
Dependencies resolved.
(中略)
libXxf86vm-1.1.4-9.el8.x86_64 libdmx-1.1.4-3.el8.x86_64 oracle-database-preinstall-23ai-1.0-2.el8.x86_64 
xorg-x11-utils-7.5-28.el8.x86_64 xorg-x11-xauth-1:1.0.9-12.el8.x86_64

Complete!

[root@instance-truecache23ai ~]# wget https://download.oracle.com/otn-pub/otn_software/db-free/oracle-database-free-23ai-1.0-1..el8.x86_64.rpm
--2024-11-14 02:05:51-- https://download.oracle.com/otn-pub/otn_software/db-free/oracle-database-free-23ai-1.0-1.el8.x86_64.rpm
(中略)
2024-11-14 02:05:56 (112 MB/s) - ‘oracle-database-free-23ai-1.0-1.el8.x86_64.rpm’ saved [1379391728/1379391728]

[root@instance-db23ai ~]# dnf install -y oracle-database-free*
Last metadata expiration check: 1 day, 20:30:24 ago on Tue 12 Nov 2024 05:35:44 AM GMT.
Dependencies resolved.
(中略)
[INFO] Oracle home installed successfully and ready to be configured.
To configure Oracle Database Free, optionally modify the parameters in '/etc/sysconfig/oracle-free-23ai.conf' and then run '/etc/init.d/oracle-free-23ai configure' as root.

Verifying : oracle-database-free-23ai-1.0-1.x86_64 1/1

Installed:
oracle-database-free-23ai-1.0-1.x86_64

Complete!

2.データベースの作成(プライマリノード

次に、プライマリノードにのみデータベースを作成します。
※True Cacheノードには作成しません

[root@instance-db23 ~]# /etc/init.d/oracle-free-23ai configure
Specify a password to be used for database accounts. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9]. Note that the same password will be used for SYS, SYSTEM and PDBADMIN accounts:

(中略)

Connect to Oracle Database using one of the connect strings:
     Pluggable database: instance-db23ai/FREEPDB1
     Multitenant container database: instance-db23ai

3.firewall設定(両ノード)

プライマリノードとTrue CacheノードはOracle Netで通信を行います。
双方のノードでTCP 1521ポートを開けておきましょう。

[root@instance-db23ai ~]# firewall-cmd --add-port=1521/tcp
success
[root@instance-db23ai ~]# 
[root@instance-db23ai ~]# firewall-cmd --runtime-to-permanent
success
[root@instance-db23ai ~]# 
[root@instance-db23ai ~]# firewall-cmd --reload
success
[root@instance-db23ai ~]# 
[root@instance-db23ai ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens3
  sources: 
  services: dhcpv6-client ssh
  ports: 1521/tcp
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules:

4.環境変数設定(両ノード)

双方のノードにOracleユーザの環境変数を設定します。
今回はOracle Database 23ai Freeのデフォルト値を設定しました。

export ORACLE_SID=FREE 
export ORACLE_BASE=/opt/oracle 
export ORACLE_HOME=/opt/oracle/product/23ai/dbhomeFree 
export PATH=/home/oracle/.local/bin:/home/oracle/bin:/usr/share/Modules/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/oracle/product/23ai/dbhomeFree/bin

5.アーカイブ・ログモード設定(プライマリノード

True Cacheはプライマリ・データベースがアーカイブ・ログモードになっている必要があります。
以下手順で設定を行います。

[oracle@instance-db23ai ~]$ sqlplus / as sysdba

SQL*Plus: Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems on Thu Nov 14 02:14:38 2024
Version 23.6.0.24.10

Copyright (c) 1982, 2024, Oracle.  All rights reserved.

Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.6.0.24.10

SQL> select log_mode from V$DATABASE;

LOG_MODE
------------
NOARCHIVELOG

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount
ORACLE instance started.

Total System Global Area 1603787624 bytes
Fixed Size		    5421928 bytes
Variable Size		  402653184 bytes
Database Buffers	 1191182336 bytes
Redo Buffers		    4530176 bytes
Database mounted.

SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL> select log_mode from V$DATABASE;

LOG_MODE
------------
ARCHIVELOG

LOG_MODEがARCHIVELOGになっている事を確認しましょう。

6.パスワードファイルをコピー(両ノード

プライマリノードにあるパスワードファイルを、True Cacheノードへコピーします。
パスワードファイルはプライマリノードの以下に配置されています(デフォルト)

/opt/oracle/product/23ai/dbhomeFree/dbs/orapwFREE

このファイルをTrue Cacheノードの任意の場所に配置しましょう。

7.True Cacheの構築(True Cacheノード

DBCAコマンドを使用してTrue Cacheを作成します

[oracle@instance-truecache23ai-suda .ssh]$ dbca -createTrueCache -gdbName FREE -sourceDBConnectionString instance-db23ai:1521/FREE -passwordFileFromSourceDB <パスワードファイルのパス> -silent
Enter Remote DB SYS user password:<プライマリデータベース作成時のパスワード>
(中略)
-----------------
Running Reopen_wallet job
Skipping. Job is detected as not applicable.
100% complete
---------- PLUGIN NOTES ----------
Successfully created True Cache.
In order to complete the operation,configure the True Cache database application services from the primary database.
---------- END OF PLUGIN NOTES ----------
Look at the log file "/opt/oracle/cfgtoollogs/dbca/FREE/FREE16.log" for further details.

8.事後確認(True Cacheノード

True Cacheが正常に構築出来ている事を確認します

[oracle@instance-truecache23ai ]$ sqlplus  / as sysdba

SQL*Plus: Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems on Thu Nov 14 02:21:28 2024
Version 23.6.0.24.10

Copyright (c) 1982, 2024, Oracle.  All rights reserved.

Connected to:
Oracle Database 23ai Free Release 23.0.0.0.0 - Develop, Learn, and Run for Free
Version 23.6.0.24.10

SQL> 
SQL> select name, open_mode, database_role from v$database;

NAME	  OPEN_MODE	       DATABASE_ROLE
--------- -------------------- ----------------
FREE	  READ ONLY WITH APPLY TRUE CACHE

SQL> 
SQL> select controlfile_type from v$database;

CONTROLFIL
----------
TRUE CACHE

SQL> 
SQL> col TRUE_CACHE_NAME format a15
SQL> col status format a10 
SQL> col primary_name format a15
SQL> select TRUE_CACHE_NAME, PRIMARY_NAME, STATUS, REMOTE_VERSION, CON_ID from v$true_cache;

TRUE_CACHE_NAME PRIMARY_NAME	STATUS	   REMOTE_VERSION	  CON_ID
--------------- --------------- ---------- ------------------ ----------
FREE		FREE		HEALTHY    23.0.0.0.0		       0

STATUSがHEALTHYになっている事を確認しましょう。

簡単に導入できるところもTrue Cacheの魅力です。皆さんもぜひ導入してみてください!

最後に

以上で、True Cacheの導入は完了です。
実際にTrue Cacheを使用する記事も投稿予定です。そちらも併せてよろしくお願いします。
最後まで読んで頂きありがとうございました!
またどこかでお会いしましょう。

OracleDBについてお困りのことがあれば是非当社へお問い合わせください!

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早6年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆しています!