※ 本記事は、Martin Bachによる”Creating a True Cache setup using Oracle Database 23ai Free container images“を翻訳したものです。

2024年10月9日


Oracle True Cacheは、Oracle Database 23aiで利用できる多くのエキサイティングな機能の1つです。どんな感じか試してみたい方は、Oracle Database 23ai Freeを使用して試してみてください。この記事では、次のスタックを使用して正確にこれを行う方法について説明します:

始めましょう

Oracle Database 23aiコンテナ・イメージは、稼働中のTrue Cacheシステムを設定するために使用されます。最終的には2つのインスタンスがあります

  • pri-db-free
  • tru-cc-free

True Cacheの設定は、自動的に実行されます。時間を節約するために、この投稿では、podman volumeに格納されているデータベース・インスタンスの事前構築済データベース・イメージを使用します。ただし、True Cacheインスタンスでは、host volumesを使用する必要があります。

rootless Podmanの使い方に気づくでしょう。Rootless Podmanには、Dockerを使用した場合に通常実行する必要のない追加のステップがいくつか必要です。Rootless natureは、追加のセキュリティを追加し、あなたの間にそれを価値のあるものにするべきです。より堅牢で安全な設定が悪いということはまずありません。

--userns=keep-id フラグがpodman runコマンドに渡されます。これにより、コンテナはボリュームのローカル・ユーザーの設定を継承します(詳細情報)。コンテナは、uidが54321でgidが54321のoracleでボリュームを所有することを想定しています。ここでは、ホスト・ユーザーがこの記事に対してどのように構成されているかを確認します:

[oracle@devbox testing]$ hostname
devbox

[oracle@devbox testing]$ id -a
uid=54321(oracle) gid=54321(dba) groups=54321(dba) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[oracle@devbox testing]$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Memory protection checking:     actual (secure)
Max kernel policy version:      33

[oracle@devbox testing]$ cat /etc/oracle-release 
Oracle Linux Server release 9.4

SELinuxは、セキュリティ態勢全体を改善することを目的として再度有効です。

補助構造

開始する前に、いくつかの追加の前提条件を満たす必要があります。次のものがあります:

  • データベース・インスタンスのPodman volume
  • True Cacheインスタンスのデータを格納するホスト・ディレクトリ
  • データベースとTrue Cacheインスタンスの通信を可能にするネットワーク

問題が発生した場合は、最初から作業を開始することをお薦めします。少なくとも、クリーン・スタートのためにボリュームおよびホスト・ディレクトリの名前を変更することを検討してください。

記事全体で一貫性を保つために、次のbash変数が定義されています:

DB_DATA_VOL=db-pri-vol
TC_DATA_DIR=$(pwd)/data/tc
SECRETS_DIR=$(pwd)/data/secrets
TC_NETWORK=tc-network
TAG=23.5.0.0

podmanリソースの作成は、次のコマンドの実行と同じくらい簡単です:

mkdir -vp "${TC_DATA_DIR}"
podman network create "${TC_NETWORK}"
podman volume create "${DB_DATA_VOL}"

後で、podman runコマンドにIPアドレスを指定する必要があります。ネットワークが作成されたら、podman inspect ${TC_NETWORK}を使用してその詳細を取得できます。そのネットワークから2つのランダムIPアドレスを選択します。jqが使用可能な場合は、次のような情報を抽出できます:

podman network inspect "${TC_NETWORK}" | jq -r '.[].subnets[0]'

IPアドレスをそれぞれのシェル変数に保持するのが最も簡単です。データベース・コンテナ・インスタンスのIPアドレスはDB_IPとして使用できますが、True CacheインスタンスのIPはTC_IPに保存されます。

次に、yopuはpodman secretsを次のように作成する必要があります。secret namesは変更しないでください。コンテナは、oracle_pwdおよびoracle_pwd_privkeyという名前を付ける必要があります。

mkdir -vp "${SECRETS_DIR}" && cd "${SECRETS_DIR}"
openssl genrsa -out key.pem
openssl rsa -in key.pem -out key.pub -pubout
read -s -p "enter the password: " pwd
echo -n $pwd > pwdfile.txt
openssl pkeyutl -in ./pwdfile.txt -out ./pwdfile.enc -pubin -inkey ./key.pub -encrypt

podman secret create oracle_pwd  ./pwdfile.enc
podman secret create oracle_pwd_privkey ./key.pem

これらの両方のsecretsは、後でコンテナ/opt/oracle/decryptPassword.shによって暗号化されていないパスワードを抽出するために使用されます。

データベース・インスタンスの起動

パスワード、ネットワークおよびボリュームを所定の位置に配置して、データベース・インスタンスを起動します:

podman run --rm -d --name pri-db-free \
--hostname pri-db-free \
--net="${TC_NETWORK}" \
--ip "${DB_IP}" \
-p :1521 \
--secret=oracle_pwd \
--secret=oracle_pwd_privkey \
--add-host="tru-cc-free:${TC_IP}" \
-e ENABLE_ARCHIVELOG=true \
-e ENABLE_FORCE_LOGGING=true \
-v "${DB_DATA_VOL}":/opt/oracle/oradata \
container-registry.oracle.com/database/free:"${TAG}"

ダウンロードが完了すると、データベースの起動に約10秒から20秒かかります。podman logs pri-db-freeを使用して、データベースのalert.logを調整できます。DATABASE OPENが表示されたら、次のステップに進むことができます。

True Cacheインスタンスの起動

次のようにTrue Cacheインスタンスを起動し、必要に応じてPDB_TC_SVCSを調整します。

podman run --rm -d --name tru-cc-free \
--hostname tru-cc-free \
--net="${TC_NETWORK}" \
--ip "${TC_IP}" \
-p :1521 \
--secret=oracle_pwd \
--secret=oracle_pwd_privkey \
--add-host="pri-db-free:${DB_IP}" \
-e TRUE_CACHE=true \
-e PRIMARY_DB_CONN_STR=${DB_IP}:1521/FREE \
-e PDB_TC_SVCS="FREEPDB1:sales1:sales1_tc;FREEPDB1:sales2:sales2_tc;FREEPDB1:sales3:sales3_tc;FREEPDB1:sales4:sales4_tc" \
-v ${TC_DATA_DIR}:/opt/oracle/oradata:Z --userns=keep-id \
container-registry.oracle.com/database/free:"${TAG}"

このコマンドは、True Cacheインスタンスをスターリングし、すべてを自動化して構成します。コンテナの開始と健全性の両方が表示されるまで少し待ちます:

$ podman ps
CONTAINER ID  IMAGE                                                 COMMAND               CREATED         STATUS                   PORTS                    NAMES
8e4e54833991  container-registry.oracle.com/database/free:23.5.0.0  /bin/bash -c $ORA...  49 minutes ago  Up 49 minutes (healthy)  0.0.0.0:36637->1521/tcp  pri-db-free
1e873dd723a4  container-registry.oracle.com/database/free:23.5.0.0  bash                  49 minutes ago  Up 49 minutes (healthy)  0.0.0.0:38113->1521/tcp  tru-cc-free

まとめ

この投稿では、Oracle Linux 9.4 x86-64でrootless Podmanを使用してTrue Cacheを設定する方法について説明します。True Cacheを使用する場合は、ライセンス・ガイドを確認してください。