AlmaLinuxで構築する Oracle Database 23ai Free インストール & 構築マニュアル

AlmaLinuxで構築する Oracle Database 23ai Free インストール & 構築マニュアル

1. はじめに

本マニュアルは、AlmaLinux 9.6(最小構成) 上に Oracle Database 23ai Free をコマンドラインで導入し、CDB=FREE / PDB=FREEPDB1 が動作する状態まで構築するための実践ガイドです。
重要: 23ai Free の初期データベース作成は dbca -createDatabase では行いません。インストール後に実行する /etc/init.d/oracle-free-23ai configure によって CDB=FREE / PDB=FREEPDB1 が自動作成されます。
以降、追加の PDB を作成する場合のみ dbca -createPluggableDatabase を使用します。サービスの自動起動は systemd(サービス名:oracle-free-23ai) で管理します。

1.1 対象読者

  • Linux の基本操作(ログイン、ファイル編集、サービス操作)ができる初級エンジニア
  • はじめて Oracle Database を構築する方
  • アプリケーション(例:WebLogic / Spring など)から Oracle へ接続する検証環境を短時間で用意したい方

1.2 想定環境と前提

  • OS: AlmaLinux 9.6(Minimal)
  • DB: Oracle Database 23ai Free
    ORACLE_BASE=/opt/oracle
    ORACLE_HOME=/opt/oracle/product/23ai/dbhomeFree
    ORACLE_SID=FREE
  • 初期DB作成: /etc/init.d/oracle-free-23ai configure を実行して CDB=FREE / PDB=FREEPDB1 を自動作成(dbca -createDatabase は使わない)
  • 追加PDB: 必要時のみ dbca -createPluggableDatabase を使用
  • 文字セット: 既定は AL32UTF8(必要なら /etc/sysconfig/oracle-free-23ai.conf で事前変更可能)
  • 自動起動: systemctl enable oracle-free-23ai(起動/停止/状態確認も systemctl で統一)
  • ネットワーク: 1521/TCP を firewalld で許可(本番はゾーン/許可元IPで制限)
  • SELinux: 本手順はPermissive(本番はポリシー調整の上で有効化を検討
  • swap: 4GB を付与(/etc/fstab 追記は重複防止の手順で)
  • Preinstall: oracle-database-preinstall-23ai を先に導入(oracle ユーザー/グループ、limits・sysctl を自動設定。結果は
    /var/log/oracle-database-preinstall-23ai/results/orakernel.log で確認)
  • ディスク要件: /opt 直下に 10GB 以上の空きを確保(目安:約9GB使用)。/opt/oracle のシンボリックリンクは不可
  • インターネット接続: Oracle 公式サイトから RPM を取得できること(プロキシ利用時は curl/dnf のプロキシ設定が必要)
  • 23ai Free の主な制限: CPU 2、メモリ上限 2GB(SGA+PGA)、ユーザーデータ上限 12GB、1 ホスト= 1 インスタンス

1.3 手順の流れ(本書の進め方)

  1. OS の更新と基本設定
  2. Oracle Preinstall パッケージの導入(oracle ユーザー作成/limits・sysctl 自動設定。ログ:.../orakernel.log
  3. Oracle Database 23ai Free RPM のインストール
  4. /etc/init.d/oracle-free-23ai configure を実行して初期DB作成(CDB=FREE / PDB=FREEPDB1)
  5. ファイアウォール(1521/TCP)と SELinux の方針を調整
  6. systemd による自動起動設定(oracle-free-23aienable
  7. (必要に応じて)DBCA で追加 PDB を作成/アプリ接続用ユーザーを作成し接続確認

23ai Free は 初期CDB/PDB を configure で自動作成し、dbca は追加PDB作成にのみ使用します。

1.4 記法と約束事(読み方)

  • 実行ユーザーは、各コマンドの直前に引用ブロックで明記します(root / oracle)。
  • コードブロックは上から順に実行します。読みやすさのため、要点は直前直後に解説します。

実行ユーザー: root

# 例:サービス一覧からユニット名を確認
systemctl list-unit-files | grep oracle

なお、oracle ユーザーの環境変数は以下を基本とします(第8章で設定)。
必要に応じて oraenv も利用できます(対話を抑止する例を併記)。

実行ユーザー: oracle

# 基本環境変数(例)
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/23ai/dbhomeFree
export ORACLE_SID=FREE
export PATH=$ORACLE_HOME/bin:$PATH

# oraenv の利用(任意:対話抑止)
export ORAENV_ASK=NO; export ORACLE_SID=FREE; . /usr/local/bin/oraenv

1.5 セキュリティと運用上の注意

  • SELinux: 本書ではPermissiveで進めますが、本番では Permissive → ポリシー調整 → 有効化 の順で検討してください。
  • Firewall: 1521/TCP を許可しますが、本番は ゾーン分離/許可元IP制限 を推奨します。
  • 機密情報: アカウントやパスワード、Wallet/TDE の鍵素材は安全に管理してください。
  • Free 版の制限: 設計・負荷試験の前に CPU/メモリ/データ容量/インスタンス数 制限を必ず確認してください。

1.6 事前に用意しておくと良いもの

  • 管理者権限(root ログイン)
  • curl / wget などのダウンロードツール(dnf で導入可)
  • Oracle 公式サイトへのアウトバウンド通信(必要に応じてプロキシ設定)
  • サーバーの FQDN/ホスト名(公式推奨に従って設定すること)

1.7 ゴール(この章以降を完了すると到達する状態)

  • AlmaLinux 9.6 上に Oracle Database 23ai Free をインストール済み
  • configure により CDB=FREE / PDB=FREEPDB1 を作成・稼働(文字セット:AL32UTF8)
  • 1521/TCP でのリモート接続が可能(firewalld 設定済み)
  • 必要に応じて追加 PDB を作成し、SAVE STATE で自動 OPEN を設定
  • アプリ接続用ユーザー(例:wls_userappuser)を作成済み
  • systemd(oracle-free-23ai) による自動起動が有効

接続のコツ(初学者向け):
既定サービスは FREE(CDB)/ FREEPDB1(PDB) です。
EZCONNECT を使えば、tnsnames.ora が無くても接続確認ができます。

実行ユーザー: oracle

# PDB へ疎通(tnsnames.ora 不要)
tnsping localhost:1521/FREEPDB1

# SQL*Plus 接続例(PDB)
sqlplus system/<password>@//localhost:1521/FREEPDB1

ログ・設定ファイル(トラブルシュートで参照):

  • Preinstall 結果ログ:/var/log/oracle-database-preinstall-23ai/results/orakernel.log
  • DB 作成ログ(configure 内部で利用する DBCA ログ):/opt/oracle/cfgtoollogs/dbca/FREE/FREE.log
  • アラートログ:/opt/oracle/diag/rdbms/free/FREE/trace/alert_FREE.log(環境によりパス差異あり)
  • 事前設定ファイル:/etc/sysconfig/oracle-free-23ai.confLISTENER_PORT / CHARSET など)

2. OS の更新

この章では、Oracle Database 23ai Free を導入する前提として AlmaLinux 9.6 を最新化し、基本的な動作環境(ネットワーク・時刻同期)を整えます。
ポイント: OS を最新にして再起動することで、後続の RPM インストールや /etc/init.d/oracle-free-23ai configure 実行時の思わぬエラーを避けられます。加えて、IP/FQDN の解決NTP(chrony)による時刻同期 を先に整えると、リスナー設定や認証・ログの整合でつまずきにくくなります。
なお、Oracle の公式手順は主に Oracle Linux / RHEL を対象としています。本書は RHEL 互換の AlmaLinux で検証していますが、ベンダーサポートの対象OSではない点、ご承知おきください。

2.1 dnf によるシステム更新

まずは OS 全体を最新化します。カーネルが更新されることがあるため、この後に再起動します。

実行ユーザー: root

# すべてのパッケージを最新化(確認プロンプトを自動許可)
dnf -y update

# キャッシュを整理(メタデータ不整合の予防)
dnf clean all

2.2 再起動

新しいカーネルやライブラリを有効化するため、必ずここで OS を再起動します。

実行ユーザー: root

# 再起動
reboot

2.3 バージョン確認

再起動後にバージョンを確認し、想定どおり AlmaLinux 9.6 で新カーネルが反映されているかをチェックします。

実行ユーザー: root

# AlmaLinux のバージョン
cat /etc/redhat-release

# カーネルのバージョン
uname -r

2.4 ネットワークの基本確認(IP / FQDN)

Oracle Net(リスナー)や configure 実行時には、グローバルIPが割り当てられFQDN が正しく名前解決できることが重要です。ここで必ず確認しておきましょう。

実行ユーザー: root

# IP アドレスの確認(グローバルIPが付与されているか)
ip a

# サーバーの FQDN(完全修飾ドメイン名)
hostname -f

# FQDN の名前解決(DNS もしくは /etc/hosts)
getent hosts "$(hostname -f)" || echo "※FQDN の名前解決を確認してください(/etc/hosts か DNS を設定)"

もし DNS を使わずにローカル解決する場合は、/etc/hosts に最小限のエントリを用意します(例):

# /etc/hosts(例)
192.168.1.10   dbserver.example.com   dbserver

補足: 後続章ではホスト名やリスナーで FQDN を用いるため、ここでの解決確認は特に重要です。

2.5 時刻同期の設定(chrony 推奨)

証明書の有効期限や監査ログの整合性確保のため、NTP による正確な時刻同期を有効化します。AlmaLinux では chrony を使うのが一般的です。

実行ユーザー: root

# chrony をインストールして起動・自動起動を有効化
dnf -y install chrony
systemctl enable --now chronyd

# 同期状況の確認(上位NTPサーバやオフセットを表示)
chronyc sources

# 時刻サービスの状態(参考)
timedatectl status

2.6 作業用ユーティリティの導入

以降の手順でダウンロードやネットワーク確認、ファイル展開を行いやすくするため、よく使うユーティリティを入れておくと便利です。

実行ユーザー: root

# ダウンロード/ネットワーク調査・展開系ツール/SElinuxポリシー操作ツール
dnf -y install curl wget tar unzip net-tools bind-utils vim policycoreutils-python-utils

2.7 トラブルシュートメモ

  • dnf update でエラー: リポジトリのメタデータ不整合時は dnf clean all を実施し、再度 dnf -y update を試します。
  • プロキシ環境: 公式サイトから RPM を取得する際は、curldnf にプロキシ設定が必要です(例:/etc/dnf/dnf.confproxy=http://proxy:port)。
  • 名前解決に失敗: getent hosts で FQDN が解決できるかを確認し、必要に応じて DNS か /etc/hosts を整備します。

以上で OS 側の準備は完了です。次章では、Oracle 推奨の Preinstall パッケージ を導入し、oracle ユーザーやカーネルパラメータ・limits を自動整備します。

3. スワップ領域の設定

Oracle Database の導入では、メモリ不足によるインストール失敗や動作不安定を避けるために、十分なスワップ領域を確保しておくことが重要です。
本手順では 4GB のスワップファイル を作成し、OS 再起動後も自動的に有効化されるように設定します。

サイズの目安(公式推奨の考え方)
一般的に RAM が 2〜16GB の場合は、スワップ=物理 RAM と同量を目安にします。
例:RAM 4GB の VM ⇒ スワップ 4GB(本章の設定)

3.1 既存スワップの有無を確認

まず、現在のスワップ状況を確認します。

実行ユーザー: root

# 現在有効なスワップの一覧を表示
swapon --show

# 合計メモリとスワップ量を見やすく確認
free -h

出力にスワップが表示されない、またはサイズが不足している場合は、次の手順で 4GB のスワップファイルを作成します。

3.2 スワップファイル(4GB)を作成

互換性と再現性を重視し、dd を使ってゼロ埋めファイルを作成します(推奨)。
※ 環境に合わせて count= を変更するとサイズを調整できます(count=4096 は 1MiB×4096=約 4GiB)。

実行ユーザー: root

# 4GB のスワップファイルを作成(時間はかかるが最も互換性が高い方法)
dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress

# セキュリティのため、root のみ読み書き可能にする
chmod 600 /swapfile

3.3 スワップとして初期化して有効化

作成したファイルをスワップ領域として初期化し、即時有効化します。

実行ユーザー: root

# スワップ領域として初期化
mkswap /swapfile

# ただちにスワップを有効化
swapon /swapfile

3.4 恒久化(/etc/fstab に安全に登録)

再起動後も自動でスワップが有効になるよう /etc/fstab に登録します。
重複登録を防ぐため、存在チェックを行ってから追記します(none swap の表記を使用)。

実行ユーザー: root

# 既に /swapfile のエントリが無い場合のみ追記
grep -qE '^\s*/swapfile\s' /etc/fstab || echo '/swapfile none swap defaults 0 0' >> /etc/fstab

3.5 反映確認

スワップが正しく有効化されているか、サイズと使用状況を確認します。

実行ユーザー: root

# スワップの状態を再確認(ファイル名・サイズ・優先度など)
swapon --show

# メモリ合計とスワップ合計を確認(-h で人間に読みやすい表示)
free -h

ここでスワップが 約 4.0G と表示されていれば設定完了です。

3.6(任意)systemd のスワップユニットで管理する

ルートボリュームの再展開やテンプレート差し替えが多いクラウド運用では、/etc/fstab ではなく systemd の swap ユニット で管理すると復元手順が明確になります。
重複管理を避けるため、ユニット管理に切り替える場合は /etc/fstab/swapfile 行を削除してください。

実行ユーザー: root

# ユニットファイルを作成
cat > /etc/systemd/system/swapfile.swap <<'EOF'
[Unit]
Description=Swapfile

[Swap]
What=/swapfile

[Install]
WantedBy=multi-user.target
EOF

# 反映して自動起動を有効化(即時起動も行う)
systemctl daemon-reload
systemctl enable --now swapfile.swap

# 状態確認(Active: active (running) であればOK)
systemctl status swapfile.swap

3.7 よくあるエラーと対処

  • mkswap: /swapfile: insecure permissions 0644
    chmod 600 /swapfile を実行してから mkswap /swapfile をやり直してください。
  • swapon: /swapfile: swapon failed: Invalid argument
    mkswap を実行していない、またはファイルが穴あき(まれ)などが原因です。
    いったん swapoff /swapfile(有効化済みなら)→ mkswap /swapfileswapon /swapfile の順でやり直します。
  • 再起動後にスワップが無効
    /etc/fstab の行に誤記がないか(スペース/タブや none swap の順序)を確認し、
    修正後に mount -a で検証してから再起動します。systemd ユニット管理に切り替える方法も有効です。
  • クラウドでスワップファイルが消えた
    → イメージ再作成に伴いファイルが欠落するケースがあります。
    ユーザーデータ(cloud-init)や構成管理ツールで「スワップ作成処理」を起動時に再適用するか、
    本節の systemd ユニット方式に切り替える運用を検討してください。

3.8 補足:fallocate を使う場合

高速に空間を確保できる fallocate を使う方法もありますが、ファイルシステムやカーネルによっては希に不整合が発生し、swapon が失敗する事例があります。
再現性重視の観点から、本手順では dd を推奨しています。参考までに例を記します(成功しない場合は dd 方式に切り替えてください)。

実行ユーザー: root

# 参考:fallocate で 4GB のスワップファイルを作成(推奨は dd)
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

4. SELinux の方針

Oracle Database 23ai Free の構築において、SELinux を完全無効化(disabled)する必然性はありません
構築中のトラブルを避ける観点から Permissive(許可+ログ)を基本とし、運用に入ったらログを確認しつつ Enforcing(強制)へ段階的に戻す方針が安全です。
既定のリスナーポート 1521/TCP を使う限り、追加の SELinux 例外設定は通常不要です。
ただし カスタムポート を使う場合は、SELinux のポート許可(semanage port)が必要になる点に注意してください。

4.1 現在の SELinux 状態を確認

まずは現在の状態(Enforcing / Permissive / Disabled)を把握します。

実行ユーザー: root

# 現在の SELinux モード(Enforcing / Permissive / Disabled)
getenforce

# 詳細情報(モジュールやポリシー、設定ファイルの状態など)
sestatus

ここで Enforcing または Permissive と表示されれば SELinux は有効です。
すでに Disabled の場合は、Permissive/Enforcing への切り替えには設定ファイルの修正と再起動が必要です(後述)。

4.2 構築作業中は一時的に Permissive にする(推奨)

インストール〜初期構成(/etc/init.d/oracle-free-23ai configure)中の予期しないブロックを避けるため、作業中のみ一時的に Permissive にします。再起動すると元のモードに戻ります。

実行ユーザー: root

# 一時的に Permissive に切り替え(再起動で元に戻る)
setenforce 0

# 確認(Permissive と表示されればOK)
getenforce

4.3 恒久的に Permissive へ設定(必要に応じて)

しばらく検証運用を Permissive で継続する場合は、設定ファイルを修正して再起動後も Permissive が維持されるようにします。

実行ユーザー: root

# 設定ファイルを書き換え(既存の SELINUX= 行を permissive に更新)
sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config

# 再起動して設定を反映
reboot

再起動後に状態を確認します。

実行ユーザー: root

getenforce    # → Permissive になっていればOK
sestatus

4.4 カスタムポートを使う場合の追加設定(必要時のみ)

既定ポート 1521/TCP を使用する場合は通常不要です。
たとえば 15210/TCP などのカスタムポートでリスナーを待ち受けたい場合、SELinux にそのポートを Oracle 用のポート型として登録します(型名はディストリビューションにより oracledb_port_t 等)。

実行ユーザー: root

# まずは登録済みの Oracle 関連ポート型を確認
semanage port -l | grep -i oracle || true

# 例:TCP 15210 を Oracle 用ポート型(例 oracle_port_t)として追加
semanage port -a -t oracle_port_t -p tcp 15210

# 反映確認
semanage port -l | grep -E '15210|oracle'

併せて firewalld 側の許可も必要です(第5章参照)。例として次のように設定します。

実行ユーザー: root

# 例:firewalld に 15210/TCP を恒久追加し、即時反映
firewall-cmd --permanent --add-port=15210/tcp
firewall-cmd --reload

4.5 運用移行時に Enforcing へ戻す(段階的)

Permissive で十分に動作確認できたら、ログ(AVC)に基づいて Enforcing へ段階的に戻します。
まずは一時的に Enforcing へ切り替え、問題がなければ恒久化します。

実行ユーザー: root

# 一時的に Enforcing(再起動で元に戻る)
setenforce 1

# 恒久化(再起動後も Enforcing)
sed -i 's/^SELINUX=.*/SELINUX=enforcing/' /etc/selinux/config
reboot

もし Enforcing でブロックが発生した場合は、/var/log/audit/audit.log を確認して許可ルールの追加や設定調整を行います。必要に応じて短期間 Permissive に戻して原因を切り分けてください。

4.6 よくあるエラーと対処

  • setenforce: SELinux is disabled
    → すでに Disabled のため、Permissive/Enforcing へ変更できません。
    /etc/selinux/configSELINUX=permissive または enforcing に修正し、再起動してください。
  • setenforce: command not found
    → 管理ツールが不足している可能性があります。以下を導入してください。

    実行ユーザー: root

    dnf -y install policycoreutils policycoreutils-python-utils
  • カスタムポートで接続不可
    両方を確認します:
    1) firewalld の許可(firewall-cmd --list-ports
    2) SELinux のポート登録(semanage port -l | grep <port>
    どちらかが欠けていると接続できません。

4.7 まとめ

  • 構築時は Permissive を基本にして手戻りを防止、運用時はログを根拠に Enforcing へ戻す。
  • 既定ポート 1521/TCP を使う限り、SELinux の追加設定は多くの環境で不要。
  • カスタムポート使用時は semanage port で Oracle 用ポート型に登録し、firewalld も開放する。
  • 問題発生時は /var/log/audit/audit.log を確認し、必要に応じて一時的に Permissive に戻して切り分ける。

5. ファイアウォール設定

本章では、Oracle Database への外部接続で標準的に使用する TCP 1521 番ポートfirewalld で許可します。
重要: firewalld には「ゾーン」の概念があります。NIC(例:eth0)が所属するゾーンに対してポートを開放しないと効果が出ません。まずアクティブなゾーンを確認し、そのゾーンを指定して設定します。
なお、この章ではデータベースやリスナーの操作は行いません(後続章で実施)。ここで行う設定は OS 側のネットワーク許可のみです。

5.1 firewalld の状態とゾーンの確認

firewalld が有効(active)で、インターフェースがどのゾーンに所属しているかを確認します。

実行ユーザー: root

# firewalld の稼働状態(running であれば有効)
firewall-cmd --state

# アクティブなゾーンと、それに属するインターフェースを表示
firewall-cmd --get-active-zones

# 参考:デフォルトゾーン(--zone を省略した場合に適用されるゾーン)
firewall-cmd --get-default-zone

出力例:public ゾーンに eth0 がぶら下がっていれば、以降は --zone=public を指定して設定します。
以降のコマンド中の public は、実際のアクティブゾーン名に置き換えてください。

5.2 1521/TCP をゾーンに恒久開放し、反映する

データベース接続のための 1521/TCP を、アクティブゾーンに恒久追加します。

実行ユーザー: root

# 例:public ゾーンで 1521/TCP を恒久追加
firewall-cmd --zone=public --permanent --add-port=1521/tcp

# 反映(再読み込み)
firewall-cmd --reload

# 検証:当該ゾーンに 1521/tcp が登録されているか
firewall-cmd --zone=public --list-ports

ここで 1521/tcp が表示されれば設定は OS に反映されています。
この時点では DB リスナーはまだ起動していなくても問題ありません(後続章で構成します)。

5.3(任意)接続元を制限する(rich rule)

実運用では、任意の送信元から 1521 を開放するのではなく、特定のネットワークやホストに限定するのが安全です。以下は CIDR 単位で許可する例です。

実行ユーザー: root

# 例:10.0.0.0/24 からの 1521/TCP のみ許可(public ゾーン)
firewall-cmd --zone=public --permanent \
  --add-rich-rule='rule family="ipv4" source address="10.0.0.0/24" port protocol="tcp" port="1521" accept'

# 反映
firewall-cmd --reload

# 検証:rich rule が登録されているか
firewall-cmd --zone=public --list-rich-rules

既に --add-port=1521/tcp で全開放している場合、併用すると意図どおりに制限されないことがあります。全開放を削除してから rich rule で限定する場合は、以下のコマンドで削除できます。

実行ユーザー: root

# 例:public ゾーンの 1521/tcp の全開放を削除
firewall-cmd --zone=public --permanent --remove-port=1521/tcp
firewall-cmd --reload

5.4(将来の変更に備えるメモ)ポートを 1521 以外にする場合

後続章で行うデータベース初期構成の前に LISTENER の待受ポートを変更する設計とする場合は、この章のコマンド内の 1521 を新しいポート番号に置き換えて開放してください。
例:待受ポートを 15210 にするなら --add-port=15210/tcp を使用します。
なお、本章では LISTENER の設定変更や起動は行いません(後続章で実施)。

5.5 まとめと確認ポイント

  • アクティブゾーンを必ず確認し、そのゾーンに対して --zone=<実ゾーン> を指定して開放する。
  • --permanent で永続化し、--reload で即時反映する。
  • 必要に応じて rich rule で送信元を限定する(全開放との併用に注意)。
  • この時点で DB リスナーが未構成でも問題なし(後続章で設定)。

5.6 トラブルシュート(この章で確認できる範囲)

実行ユーザー: root

# ゾーンの全体像(サービス/ポート/rich ルール)
firewall-cmd --zone=public --list-all

# アクティブゾーンとインターフェースの再確認
firewall-cmd --get-active-zones

期待するゾーンにポートが入っていない、あるいは NIC が別ゾーンにぶら下がっている場合は、ゾーンの指定ミスが原因です。ゾーンを正しく指定し直して再度 --permanent--reload を行ってください。

6. Oracle Preinstall パッケージの導入

以降の Oracle Database 本体インストールに先立ち、oracle-database-preinstall-23ai を導入します。
このパッケージは、必要な依存パッケージの自動導入oracle ユーザー/主要グループ(oinstall, dba 等)の作成カーネル・リソース制限(sysctl / limits)の設定Transparent HugePages を madvise に調整 などを一括で行います。
AlmaLinux 環境では、Oracle 公式サイトから RPM を手動ダウンロードし、サーバへ配置後に dnf localinstall で導入する方法が確実です(ネットワークの事情で dnf install が失敗しやすいため)。

6.1 事前チェック(手動作成した oracle ユーザーが無いこと)

Preinstall は oracle ユーザー/関連グループを自動作成します。
すでに手動作成済みだと不整合の原因になるため、存在しないことを確認してください。

実行ユーザー: root

# oracle ユーザーの有無を確認(存在しなければ "no such user" 等)
id oracle || echo "※oracle ユーザーは未作成で OK(Preinstall が自動作成します)"

6.2 取得と配置

管理端末で Oracle 公式の RPM(EL9 向け)をダウンロードし、サーバの /tmp などへ配置します。
例:oracle-database-preinstall-23ai-<ver>.el9.x86_64.rpm<ver> は更新されます。最新ファイル名を公式サイトで確認してください)。

ネット接続が可能なら、サーバ側から直接ダウンロードしても構いません(例は <ver> が 1.0-2 のケースです)。

実行ユーザー: root

# 作業ディレクトリへ移動
cd /tmp

# 例:Oracle 公式から RPM を直接取得(バージョンは都度更新されます)
curl -O https://yum.oracle.com/repo/OracleLinux/OL9/appstream/x86_64/getPackage/oracle-database-preinstall-23ai-1.0-3.el9.x86_64.rpm

# (任意)ハッシュを比較して整合性チェック
sha256sum oracle-database-preinstall-23ai-1.0-3.el9.x86_64.rpm

もしサーバからインターネットへ直接出られない場合は、管理端末で取得 → WinSCP 等で /tmp へ転送してください。

6.3 インストール(dnf localinstall)

ローカルに配置した RPM を dnf localinstall で導入します。依存パッケージは AlmaLinux のリポジトリから自動解決されます(オフライン環境では依存 RPM も事前に持ち込みが必要)。

実行ユーザー: root

# ローカル RPM をインストール
dnf localinstall -y oracle-database-preinstall-23ai-1.0-3.el9.x86_64.rpm

6.4 導入結果の確認

Preinstall が想定どおり動作したか、ユーザー/グループ/設定ファイル/ログを確認します。

実行ユーザー: root

# パッケージ導入の確認
rpm -qa | grep -i oracle-database-preinstall-23ai

# oracle ユーザーと主要グループの作成確認
id oracle
getent group oinstall
getent group dba

# 反映された sysctl の代表値を確認(出力されることが重要)
sysctl -a | egrep 'kernel.sem|fs.file-max|shmmax|shmall'

# 設定ファイルの配置場所(23ai では sysctl.d/ 配下)
ls -l /etc/sysctl.d/ | grep -i oracle || true
cat /etc/sysctl.d/99-oracle-database-server-23ai-preinstall-sysctl.conf 2>/dev/null || true

# limits 設定(ファイルディスクリプタ等)
cat /etc/security/limits.d/oracle-database-preinstall-23ai.conf

# 適用ログ(何を変更したかの記録)
tail -n 50 /var/log/oracle-database-preinstall-23ai/results/orakernel.log 2>/dev/null || true

# Transparent HugePages のモード([madvise] が選択されていれば期待どおり)
cat /sys/kernel/mm/transparent_hugepage/enabled 2>/dev/null || true

6.5 よくあるつまずきと対処

  • 依存パッケージの解決に失敗する: OS リポジトリへのアクセスが必要です。プロキシ環境なら /etc/dnf/dnf.confproxy=http://host:port を設定、もしくはオフライン用に依存 RPM を持ち込んでください。
  • 既に oracle ユーザーを手動作成してしまった: Preinstall が想定する UID/GID・グループ構成と競合する可能性があります。原則として Preinstall に任せる前提で進め、不要な手動作成は避けてください。
  • sysctl を /etc/sysctl.conf に直書きしていた: 23ai 世代は /etc/sysctl.d/ にファイルを分離して管理します。将来の保守性を考慮し、直書きは避けるのが推奨です。

6.6 この章の到達点

  • oracle-database-preinstall-23ai の導入完了
  • oracle ユーザー/主要グループの自動作成を確認
  • カーネル・リソース制限(sysctl / limits)が 23ai 方針で適用済み(madvise を含む)
  • 適用ログの所在を把握(/var/log/oracle-database-preinstall-23ai/results/orakernel.log

次章では、Oracle Database 23ai Free 本体の RPM を導入します(この時点では DB 本体の操作はまだ行いません)。

7. Oracle Database 本体のインストール(23ai Free の RPM 導入)

この章では、Oracle Database 23ai Free(EL9 向け)RPM をサーバへ導入します。
重要: この章では インストール(RPM の展開)のみを行い、データベース作成や起動は行いません
初期データベース(CDB=FREE / PDB=FREEPDB1)の作成は、次章で実行する /etc/init.d/oracle-free-23ai configure にて実施します。

7.1 事前チェック(ディスク要件と配置先)

23ai Free は /opt 配下(/opt/oracle など)を使用します。
10GB 以上の空きがあるか、シンボリックリンクを使っていないかを確認しておきます。

実行ユーザー: root

# /opt の使用量と空き容量を確認
df -h /opt

# /opt/oracle が存在する場合はディレクトリであること(シンボリックリンクでないこと)を確認
test -L /opt/oracle && echo "※/opt/oracle がシンボリックリンクです。非推奨のため解除を検討してください。" || echo "/opt/oracle はシンボリックリンクではありません。"

7.2 RPM の取得と配置

Oracle の公式ダウンロードページから、EL9 向けの最新版 RPM を取得してください。
ファイル名は更新されるため、<ver> は実際に取得した最新のものへ置き換えてください。

  • 例)oracle-database-free-23ai-23.9-1.el9.x86_64.rpm(あくまで例。最新版を使用)
  • ブラウザでダウンロード → WinSCP 等でサーバの /tmp へ転送、またはサーバ側から curl 取得でも構いません。

実行ユーザー: root

# 作業ディレクトリへ移動
cd /tmp

# (例)サーバ側から直接ダウンロードする場合(<ver> は最新に読み替え)
# curl -O <公式ダウンロードURL>/oracle-database-free-23ai-<ver>.el9.x86_64.rpm
curl -O https://download.oracle.com/otn-pub/otn_software/db-free/oracle-database-free-23ai-23.9-1.el9.x86_64.rpm

# (任意)ダウンロードファイルの整合性チェック(公開されたハッシュと照合)
sha256sum oracle-database-free-23ai-23.9-1.el9.x86_64.rpm

※ プロキシ環境では /etc/dnf/dnf.confcurl のプロキシ設定が必要です。

7.3 RPM のインストール

取得した RPM をローカルからインストールします。依存関係は AlmaLinux の標準リポジトリから解決されます。

実行ユーザー: root

# ローカルの RPM をインストール(ファイル名は取得した最新版に合わせて変更)
dnf localinstall -y /tmp/oracle-database-free-23ai-23.9-1.el9.x86_64.rpm

7.4 導入結果の確認(この章で実行可能な範囲のみ)

この段階では「パッケージが入ったか」「設定ファイル・ユニットが存在するか」を確認します。
データベースの作成・起動はまだ行いません(次章)。

実行ユーザー: root

# パッケージが導入されたか確認
rpm -qa | grep -i 'oracle-database-free-23ai'

# systemd ユニット(サービス名)の存在確認(有効化/起動はまだしない)
# その前にいったんサービス再読み込みしないとサービス名が表示されない
systemctl daemon-reload
systemctl list-unit-files | grep -i oracle-free-23ai

# 事前設定ファイルの有無(configure 実行<前>に編集可能)
ls -l /etc/sysconfig/oracle-free-23ai.conf

# Oracle Home のディレクトリ例(存在確認のみ)
ls -ld /opt/oracle/product/23ai/dbhomeFree 2>/dev/null || echo "※Oracle Home は後続の構成で作成・展開される場合があります。"

/etc/sysconfig/oracle-free-23ai.conf は、次章の configure 実行前に編集可能です(LISTENER_PORTCHARSET=AL32UTF8 既定、DBFILE_DEST など)。

7.5 よくあるつまずきと対処

  • 依存関係の解決に失敗する: OS リポジトリへの到達性を確認。プロキシ経由なら /etc/dnf/dnf.confproxy=http://host:port を設定するか、必要な依存 RPM を事前に持ち込んでください。
  • ファイル名の不一致: ダウンロードした RPM の実際のファイル名をコマンドに反映してください(<ver> は随時更新されます)。
  • ハッシュ不一致: ダウンロードが壊れている可能性があります。再取得して sha256sum を再確認してください。

7.6 この章の到達点と次章

  • EL9 向けの Oracle Database 23ai Free RPM の導入が完了しました。
  • /etc/sysconfig/oracle-free-23ai.conf などの設定ファイルの所在を把握しました(次章configure 実行前に必要に応じて編集)。
  • サービス(oracle-free-23ai)の自動起動設定や起動操作はまだ行っていません(次章・以降で実施)。

次章では、/etc/sysconfig/oracle-free-23ai.conf を必要に応じて調整したうえで、/etc/init.d/oracle-free-23ai configure を実行し、CDB=FREE / PDB=FREEPDB1 の作成とリスナー構成を行います。

8. データベース作成(23ai Free)

この章では、前章までに導入した RPM を基に /etc/init.d/oracle-free-23ai configure を実行し、CDB=FREEPDB=FREEPDB1 を自動作成します。
併せて、事前調整用ファイル /etc/sysconfig/oracle-free-23ai.conf の代表パラメータを確認し、作成後の 環境変数設定(oraenv)稼働確認PDB の自動 OPEN(SAVE STATE) まで行います。
※ 自動起動(systemd enable)や他章の設定には触れません(第11章で実施)。

8.1 事前調整:/etc/sysconfig/oracle-free-23ai.conf の代表パラメータ

configure 実行のに、必要なら以下を調整できます。未設定の場合は既定値で作成されます(CHARSET は AL32UTF8 が既定)。

  • LISTENER_PORT:リスナーの待受ポート(既定 1521)
  • CHARSET:データベース文字セット(既定 AL32UTF8
  • DBFILE_DEST:データファイル配置先(例:/opt/oracle/oradata
  • CONFIGURE_TDEtrue で TDE を簡易有効化(要件に応じて)
  • SKIP_VALIDATIONS:検証スキップ(通常は変更不要)

必要に応じて、設定ファイルをバックアップして編集します。

実行ユーザー: root

# 事前設定ファイルのバックアップを取得
cp -a /etc/sysconfig/oracle-free-23ai.conf /etc/sysconfig/oracle-free-23ai.conf.bak.$(date +%F-%H%M%S)

# エディタで開いて必要な行のみ変更(例:LISTENER_PORT、DBFILE_DEST、CHARSET など)
vi /etc/sysconfig/oracle-free-23ai.conf

# 例:LISTENER_PORT を 15210 に変更したい場合(vi を使わない一例)
# sed -i 's/^#\?LISTENER_PORT=.*/LISTENER_PORT=15210/' /etc/sysconfig/oracle-free-23ai.conf

注意: firewalld/SELinux もカスタムポートに合わせて調整が必要です(第4・5章参照)。既定の 1521 を使う場合は追加作業は通常不要です。

8.2 初期構成の実行(CDB=FREE / PDB=FREEPDB1 の自動作成)

以下を実行すると、リスナー構成(既定 1521)と CDB/PDB の作成が自動で進み、最後に DB が起動した状態になります。途中で SYS / SYSTEM / PDBADMIN のパスワード入力が求められます。

実行ユーザー: root

# 初期構成の実行(進捗が表示されます)
/etc/init.d/oracle-free-23ai configure

実行が完了すると、/opt/oracle/oradata/FREE 配下にデータが作成され、ora_pmon_FREE などのプロセスが起動します。作成ログとアラートログの主な場所は以下です。

  • DBCA ログ/opt/oracle/cfgtoollogs/dbca/FREE/FREE.log
  • アラートログ/opt/oracle/diag/rdbms/free/FREE/trace/alert_FREE.log

8.3 環境変数の設定(oraenv で一括)

以降の操作は oracle ユーザーで行い、oraenv を使って環境変数(ORACLE_SID=FREEORACLE_HOMEPATH 等)を読み込みます。ワンライナーでも、ログイン時の自動反映(~/.bash_profile)でも構いません。

実行ユーザー: oracle

# 一時反映(現在のシェルだけ)— 推奨:まずはこれで実行
export ORACLE_SID=FREE
export ORAENV_ASK=NO
. /usr/local/bin/oraenv

# (任意)ログイン時に自動反映させたい場合:~/.bash_profile に追記
grep -q 'oraenv' ~/.bash_profile || cat <<'EOF' >> ~/.bash_profile

# --- Oracle environment ---
export ORACLE_SID=FREE
export ORAENV_ASK=NO
. /usr/local/bin/oraenv
# -------------------------
EOF

8.4 稼働確認(プロセス/リスナー/DB&PDB)

作成直後に DB は起動済みです。プロセス、リスナー、DB の状態を確認します。

実行ユーザー: oracle

# プロセス確認(FREE の PMON が動作していること)
ps -ef | grep -i pmon | grep FREE || echo "※ db_pmon_FREE が見えない場合はアラートログを確認"

# リスナー確認(Listening Endpoints に PORT:1521、Services に FREE / FREEPDB1 が出るのが目安)
lsnrctl status

# DB & PDB の状態確認(SYSDBA で接続)
sqlplus / as sysdba <<'SQL'
select name, open_mode from v$database;
show pdbs;
SQL

PDB に対して EZCONNECT(推奨) でアプリ接続の動作を簡易確認できます(system は 8.2 で設定したパスワード)。

実行ユーザー: oracle

# 例:ローカルホスト上の PDB=FREEPDB1 に接続(EZCONNECT)
sqlplus system@//localhost:1521/FREEPDB1

8.5 PDB の自動 OPEN 設定(SAVE STATE)

再起動後も PDB を自動で READ WRITE で開きたい場合は、SAVE STATE を設定します(初期作成直後の FREEPDB1 に対して必要なら実施)。

実行ユーザー: oracle

sqlplus / as sysdba <<'SQL'
-- 念のため OPEN(既に OPEN の場合はスキップ可)
alter pluggable database FREEPDB1 open;
-- 自動 OPEN を保存
alter pluggable database FREEPDB1 save state;
-- 状態確認
show pdbs;
SQL

8.6(任意)追加 PDB の作成

追加の PDB が必要な場合は、DBCA もしくは SQL のどちらでも作成できます。ここでは DBCA のサイレント作成例を示します(パスワードは要件に応じて設定)。

実行ユーザー: oracle

# 例:PDB2 を作成(テンプレートは DEFAULT)
dbca -silent -createPluggableDatabase \
  -sourceDB FREE \
  -pdbName PDB2 \
  -createPDBFrom DEFAULT \
  -pdbAdminPassword 'YourPdbAdminPassw0rd'

# 作成後に OPEN と SAVE STATE を実施
sqlplus / as sysdba <<'SQL'
alter pluggable database PDB2 open;
alter pluggable database PDB2 save state;
show pdbs;
SQL

補足: 旧バージョンの PDB をプラグインする用途は Free では制限があります。新規作成(上記のような手順)であれば問題ありません。

8.7 ログの場所(トラブルシュートの入口)

  • DBCA ログ:/opt/oracle/cfgtoollogs/dbca/FREE/FREE.log
  • アラートログ:/opt/oracle/diag/rdbms/free/FREE/trace/alert_FREE.log

実行ユーザー: oracle

# よく使う確認例
tail -n 100 /opt/oracle/diag/rdbms/free/FREE/trace/alert_FREE.log
less /opt/oracle/cfgtoollogs/dbca/FREE/FREE.log

8.8 この章の到達点

  • /etc/init.d/oracle-free-23ai configure により、FREE / FREEPDB1 の作成と起動を完了
  • oraenvORACLE_SID=FREE 等の環境変数を反映(必要なら ~/.bash_profile に登録)
  • EZCONNECT による接続確認(例:system@//localhost:1521/FREEPDB1)を実施
  • 必要に応じて SAVE STATE を設定し、再起動後も PDB を自動で OPEN
  • (任意)追加 PDB の作成手順(DBCA サイレント)を提示

次章では、アプリケーション用スキーマの作成や接続確認(JDBC 文字列の確認含む)を進めます。

9. アプリケーション用スキーマの作成

本章では、PDB=FREEPDB1 内にアプリケーション専用ユーザーを作成し、最小権限を個別に付与します。
以降の接続は EZCONNECT(//host:port/service) を基本とし、RESOURCE ロールは使用しません(非推奨のため)。
前章(第8章)で /etc/init.d/oracle-free-23ai configure 済み(FREE/FREEPDB1 作成・起動済み)であることを前提とします。

9.1 前提確認(PDB の状態と作業方針)

まず、FREEPDB1 が OPEN(READ WRITE) であることを確認します。
作業方針:ユーザー作成は必ず PDB 側(FREEPDB1)で実施します。CDB$ROOT で作ると意図せず共通ユーザー(C##)になるため注意してください。

実行ユーザー: oracle

# (念のため)Oracle 環境変数を反映
export ORACLE_SID=FREE
export ORAENV_ASK=NO
. /usr/local/bin/oraenv

# CDB$ROOT へ管理者接続して PDB の状態を確認
sqlplus / as sysdba <<'SQL'
show pdbs;
SQL

出力の FREEPDB1READ WRITE であれば以降の作業を続行できます(第8章で SAVE STATE 済みであれば通常 OPEN です)。

9.2 SYS で PDB(FREEPDB1)へ接続

以降のユーザー作成・権限付与は、PDB 側へ直接接続して行います(EZCONNECT を使用)。

実行ユーザー: oracle

# 例:ローカルホスト上の PDB=FREEPDB1 へ SYSDBA 接続
sqlplus sys/【SYSパスワード】@//localhost:1521/FREEPDB1 as sysdba

9.3 アプリケーション用ユーザーの作成(最小権限付与)

ローカルユーザー(C## なし)を作成し、アプリが一般的に必要とする最小権限を個別に付与します。
併せて、表領域クォータ(ここでは USERS 表領域)を設定しないと、テーブル作成時に ORA-01950 が発生します。

実行ユーザー: oracle(SYSDBA で FREEPDB1 に接続中)

-- アプリケーション専用ユーザーの作成(ローカルユーザー)
CREATE USER wls_user IDENTIFIED BY "Welcome1"
  DEFAULT TABLESPACE USERS
  TEMPORARY TABLESPACE TEMP;

-- 最小権限を個別に付与(RESOURCE ロールは使用しない)
GRANT CREATE SESSION TO wls_user;
GRANT CREATE TABLE TO wls_user;
GRANT CREATE VIEW TO wls_user;
GRANT CREATE SEQUENCE TO wls_user;
GRANT CREATE PROCEDURE TO wls_user;
-- (必要に応じて)GRANT CREATE TRIGGER TO wls_user;

-- USERS 表領域に対するクォータ(作成物の格納を許可)
ALTER USER wls_user QUOTA UNLIMITED ON USERS;

9.4 一般ユーザーでの接続と動作確認(DDL→DML→SELECT→DROP)

作成した一般ユーザーで PDB に接続し、最小の DDL→DML の往復で動作を確認します。

実行ユーザー: oracle

# 一般ユーザーで PDB=FREEPDB1 へ接続(EZCONNECT)
sqlplus wls_user/"Welcome1"@//localhost:1521/FREEPDB1 <<'SQL'
-- ログイン確認
SELECT USER FROM dual;

-- テーブル作成(DDL)
CREATE TABLE t_conn_check (
  id   NUMBER PRIMARY KEY,
  note VARCHAR2(50)
);

-- データ登録(DML)→ 確認 → 後始末
INSERT INTO t_conn_check VALUES (1, '接続確認');
COMMIT;
SELECT * FROM t_conn_check;
DROP TABLE t_conn_check;

EXIT
SQL

9.5 よくあるエラーと対処(この章で対応可能な範囲)

  • ORA-01950: 表領域 ‘USERS’ に対する権限がありません
    ALTER USER wls_user QUOTA UNLIMITED ON USERS; を実行してクォータを付与します。
  • ORA-01017: ユーザー名/パスワード無効
    → ユーザー名・パスワードを再確認。シェルで特殊文字を含む場合は、"ダブルクォート"で囲ってください。
  • ORA-12514: リスナーに接続先サービスが登録されていない
    → サービス名 FREEPDB1 を誤っていないか確認。lsnrctl statusServices Summary に FREEPDB1 が出ているか確認します(第8章参照)。
  • ORA-65096: 公共ユーザーまたはロール名が無効
    → CDB$ROOT でユーザー作成しようとした可能性。PDB=FREEPDB1 に直接接続して作成してください。

9.6 参考:JDBC 接続文字列(実行不要)

アプリケーションからの接続例(Thin Driver / EZCONNECT 形式)です。
実行は不要、設定時の参考としてご利用ください。

jdbc:oracle:thin:@//<host>:1521/FREEPDB1

9.7 この章の到達点

  • PDB=FREEPDB1 にアプリ専用ユーザー wls_user を作成
  • 最小権限を個別付与(CREATE SESSION / TABLE / VIEW / SEQUENCE / PROCEDURE 等)
  • USERS 表領域への クォータ設定 を実施
  • 一般ユーザーでの接続・DDL/DML/SELECT の往復により動作確認

次章(第10章)では、接続確認の強化(tnsping の注意点、EZCONNECT の再確認)や簡易トラブルシュートを整理します。

10. 接続確認

本章では、EZCONNECT//host:port/service)を用いて Oracle Database 23ai Free への接続を確認します。
まず oraenv で環境を通し、lsnrctl status でリスナーとサービス(FREE / FREEPDB1)の登録を確認した上で、sqlplus による接続テストを行います。
なお tnsping はリスナー到達性のみを確認するツールで、DB 認証や PDB の登録状態までは検証しません(本章では補助的に扱います)。

10.1 Oracle 環境変数の読み込み(oraenv)

sqlpluslsnrctl の「コマンドが見つからない」を防ぐため、最初に oraenv を実行して環境変数を読み込みます。

実行ユーザー: oracle

# Oracle 環境を現在のシェルに反映
export ORACLE_SID=FREE
export ORAENV_ASK=NO
. /usr/local/bin/oraenv

10.2 リスナーとサービスの確認

リスナーが 1521/TCP で待受し、サービスに FREE / FREEPDB1 が登録されているか確認します。

実行ユーザー: oracle

# リスナーの状態を確認
lsnrctl status

確認ポイント:

  • Listening Endpoints SummaryPORT=1521 が表示されていること
  • Services SummaryFREEFREEPDB1 が表示されていること

10.3 SQL*Plus による接続確認(SYS・一般ユーザー)

まず管理者で DB 全体の状態を確認し、その後アプリ用ユーザーで PDB に接続して最小クエリを実行します。
※ PDB へはサービス名を必ず指定します(既定サービス:FREEPDB1)。

実行ユーザー: oracle

# 1) 管理者(SYSDBA)で接続し、PDB の状態を確認
sqlplus / as sysdba <<'SQL'
show pdbs;
SQL

# 2) システムユーザーで PDB=FREEPDB1 に接続(EZCONNECT)
sqlplus system@//localhost:1521/FREEPDB1 <<'SQL'
SELECT USER FROM dual;
EXIT
SQL

# 3) (第9章で作成済みの一般ユーザー例)アプリ用ユーザーで接続
sqlplus wls_user/"Welcome1"@//localhost:1521/FREEPDB1 <<'SQL'
SELECT USER FROM dual;
EXIT
SQL

10.4 tnsping による疎通確認(任意)

tnsping はリスナー到達性のみを確認します。
別名(tnsnames.ora のエントリ)が無くても、EZCONNECT 形式で疎通確認が可能です。

実行ユーザー: oracle

# EZCONNECT 形式での疎通確認(リスナー到達性のみ)
tnsping //localhost:1521/FREEPDB1

もし TNS-03505(名前解決失敗)が出る場合は、sqlnet.oraNAMES.DIRECTORY_PATHEZCONNECT が含まれているかを確認してください(通常は既定で有効です)。

10.5 代表的なエラーと切り分け(この章で確認できる範囲)

  • TNS-03505(名前解決失敗)
    → EZCONNECT 形式(//host:1521/service)で試す。
    sqlnet.oraNAMES.DIRECTORY_PATHEZCONNECT が含まれているか確認。
  • ORA-12514(サービス未登録)
    lsnrctl statusServices SummaryFREEPDB1 が表示されているか確認。表示されない場合は第8章の構成とアラートログを確認。
  • ORA-01017(ユーザー名/パスワード無効)
    → ユーザー名・パスワードを再確認。特殊文字は引用符(例:"Welcome1")で囲う。
  • 接続タイムアウト(ORA-12170 など)
    → 同一サーバからの接続で再現するか確認。ネットワーク経由の場合は第5章のファイアウォール開放(1521/TCP)を再確認。

10.6 参考:JDBC 接続文字列(実行不要)

アプリケーションからの接続例(Thin / EZCONNECT 形式)です。設定時の参照用で、ここでは実行不要です。

jdbc:oracle:thin:@//<host>:1521/FREEPDB1

10.7 この章の到達点

  • oraenv で環境を読み込み、lsnrctl status で 1521/TCP の待受と FREE/FREEPDB1 の登録を確認
  • sqlplus により、systemwls_userFREEPDB1 へ接続・簡易クエリを実行
  • tnsping を補助的に使用し、到達性のみを確認

次章(第11章)では、OS 起動時にデータベースを自動起動させるための systemd 設定を行います。

11. 自動起動設定

本章では、サーバ再起動時に Oracle Database 23ai Free(CDB=FREE / PDB=FREEPDB1)が自動で起動するよう、systemd を用いて設定します。
23ai Free のサービス名(ユニット名)は oracle-free-23ai です。
なお、/etc/init.d/oracle-free-23ai構成(configure)と状態確認(status)の用途に限り使用し、起動・停止は systemd で行います。

11.1 ユニットの存在確認

まず、systemd に oracle-free-23ai ユニットが登録されているかを確認します。

実行ユーザー: root

# ユニット定義の再読込(念のため)
systemctl daemon-reload

# サービス一覧からユニット名を確認
systemctl list-unit-files | grep -i oracle-free-23ai

ここで何も表示されない場合は、第7章の RPM 導入が完了しているかを確認してください。

11.2 自動起動の有効化(enable)

ユニットが存在することを確認したら、自動起動を有効化します。

実行ユーザー: root

# ブート時の自動起動を有効化
systemctl enable oracle-free-23ai

エラーが出なければ有効化完了です。

11.3 即時起動・停止・状態確認

その場でサービスを起動/停止し、状態を確認できます。

実行ユーザー: root

# サービスの起動
systemctl start oracle-free-23ai

# サービスの状態確認(Active: active (running) が目安)
systemctl status oracle-free-23ai

# 参考:init.d スクリプトでの状態確認(configure/status 用)
/etc/init.d/oracle-free-23ai status

# 必要に応じて停止・再起動
systemctl stop oracle-free-23ai
systemctl restart oracle-free-23ai

11.4 再起動テスト(任意)

自動起動が機能するか、実際に OS を再起動して確認します(任意)。
再起動後にサービス状態とデータベースの状態を確認します。

実行ユーザー: root

# OS を再起動(任意)
reboot

起動後、以下を確認します。

実行ユーザー: root

# サービス状態
systemctl status oracle-free-23ai

# 直近ブートのログを確認(起動トラブル時に有用)
journalctl -u oracle-free-23ai -b --no-pager | tail -n 100

11.5 PDB の自動 OPEN(SAVE STATE)確認

自動起動後、PDB(FREEPDB1)が READ WRITE で自動 OPENしているかを確認します。第8章で SAVE STATE を設定していれば通常は自動で OPEN します。未設定だった場合は、以下の手順で設定できます。

実行ユーザー: oracle

# Oracle 環境を反映(sqlplus/lsnrctl のパスが通っていない場合)
export ORACLE_SID=FREE
export ORAENV_ASK=NO
. /usr/local/bin/oraenv

# PDB の状態確認 → 必要に応じて OPEN と SAVE STATE を実施
sqlplus / as sysdba <<'SQL'
show pdbs;
-- (FREEPDB1 が MOUNTED などで開いていない場合)
alter pluggable database FREEPDB1 open;
alter pluggable database FREEPDB1 save state;
show pdbs;
SQL

11.6 ログの場所(トラブルシュートに必須)

  • サービス起動ログ(直近ブート)journalctl -u oracle-free-23ai -b
  • アラートログ/opt/oracle/diag/rdbms/free/FREE/trace/alert_FREE.log
  • DBCA ログ/opt/oracle/cfgtoollogs/dbca/FREE/FREE.log

実行ユーザー: oracle

# 代表的な確認コマンド
tail -n 100 /opt/oracle/diag/rdbms/free/FREE/trace/alert_FREE.log
less /opt/oracle/cfgtoollogs/dbca/FREE/FREE.log

11.7 よくあるつまずきと対処

  • ユニットが見つからない: systemctl list-unit-files | grep -i oracle-free-23ai で未登録なら、第7章の RPM 導入からやり直してください。
  • サービスは起動するが接続できない: 第5章のファイアウォール(標準は 1521/TCP)と、第8章で設定した LISTENER_PORT の一致を確認してください。
  • PDB が開かない/READ ONLY になる: 本章 11.5 の手順で OPENSAVE STATE を設定してください。

11.8 この章の到達点

  • systemd での自動起動(enable)が完了し、手動の起動・停止・状態確認ができる
  • (任意)再起動後も サービスが自動で起動することを確認
  • FREEPDB1 の自動 OPEN(SAVE STATE) を確認/設定し、再起動後も READ WRITE で利用可能
  • トラブル時に参照すべき journalctl・アラートログ・DBCA ログ の所在を把握

以上で、自動起動の設定は完了です。次章では、構築全体のまとめと運用時のチェックポイントを整理します。

12. 構築作業のまとめ

本章では、本手順書(第1章〜第11章)で実施してきた内容を 運用視点で再整理します。
すぐに活用できる 到達点の確認要点のダイジェストFree 版の制限日常運用チェックリスト代表的なトラブルの初動 をまとめています。
ここに掲載するコマンドは、すべて「第11章まで完了した現行環境」で そのまま実行可能です。

12.1 ここまでの到達点(確認リスト)

  • OS:AlmaLinux 9.6(最小構成)を最新化、swap 4GB 設定済み
  • セキュリティ:SELinux は Permissive または無効firewalld で 1521/TCP を許可
  • 前提:oracle-database-preinstall-23ai 導入により oracle ユーザーやカーネル/limits が自動設定
  • DB 本体:Oracle Database 23ai Free(EL9) を RPM で導入
  • 初期構成:/etc/init.d/oracle-free-23ai configure を実行し、CDB=FREE / PDB=FREEPDB1 を自動作成・起動
  • 接続方式:EZCONNECT(//host:1521/service) を基本。PDB 接続は FREEPDB1 を使用
  • アプリ用:PDB=FREEPDB1 に wls_user を作成、最小権限USERS 表領域クォータ を付与
  • 自動起動:systemd ユニット名 = oracle-free-23aienable 済み、起動・停止・状態確認は systemctl で実施
  • PDB 自動 OPEN:FREEPDB1 に SAVE STATE を設定済み(再起動後も READ WRITE)

12.2 手順全体の要点(ダイジェスト)

  1. OS 更新・FQDN・時刻同期 → swap 4GB → SELinux(Permissive/無効)→ firewalld 1521/TCP
  2. Preinstall 導入(ユーザー/グループ、limits、sysctl、THP 調整など)
  3. 23ai Free RPM 導入(EL9 向け)
  4. /etc/sysconfig/oracle-free-23ai.conf を必要に応じて調整(例:LISTENER_PORTCHARSET=AL32UTF8DBFILE_DEST など)
  5. configure 実行で FREE / FREEPDB1 を自動作成 → oraenv で環境設定 → EZCONNECT で接続確認
  6. PDB(FREEPDB1)にアプリ用スキーマを作成(最小権限+クォータ)
  7. systemdoracle-free-23ai)で自動起動を有効化 → PDB に SAVE STATE
  8. ログの所在を把握:アラートログDBCA ログjournalctl

12.3 Oracle Database 23ai Free の主な制限(運用上の注意)

  • メモリ上限: おおむね 2GB(SGA+PGA 合算の目安)。大規模ワークロードには不向きです。
  • ユーザーデータ上限: 約 12GB(実運用では表領域設計と監視が重要)。
  • インスタンス数: 1 論理環境あたり 1 インスタンス(同一ホストで複数起動は不可)。

上記制限に該当する可能性がある場合は、要件・規模に応じて Standard Edition / Enterprise Edition の検討をおすすめします。

12.4 重要設定の復習(変更ポイントの再確認)

  • /etc/sysconfig/oracle-free-23ai.conf: LISTENER_PORT(既定 1521)、CHARSET(既定 AL32UTF8)、DBFILE_DESTCONFIGURE_TDE など
  • ネットワーク: PDB 接続は サービス名必須(例://db-host:1521/FREEPDB1
  • firewalld: 1521/TCP を許可。カスタムポートを設定した場合は合わせて開放
  • SELinux: 本書では Permissive/無効で進めました。要件に応じてポリシー整備のうえ有効化運用も検討

12.5 日常運用チェックリスト(即実行可)

起動直後や定期点検で最低限確認しておきたいコマンド群です。

実行ユーザー: root

# サービスの自動起動・状態
systemctl is-enabled oracle-free-23ai
systemctl status oracle-free-23ai

# 直近ブートのサービスログ(起動失敗時の切り分け)
journalctl -u oracle-free-23ai -b --no-pager | tail -n 100

実行ユーザー: oracle

# 環境(sqlplus / lsnrctl のパスを通す)
export ORACLE_SID=FREE
export ORAENV_ASK=NO
. /usr/local/bin/oraenv

# リスナーの待受・サービス登録状況(FREE / FREEPDB1)
lsnrctl status

# CDB / PDB の状態(FREEPDB1 が READ WRITE であること)
sqlplus / as sysdba <<'SQL'
show pdbs;
SQL

# アラートログ(直近行)
tail -n 100 /opt/oracle/diag/rdbms/free/FREE/trace/alert_FREE.log

12.6 代表的なトラブルの初動(一次切り分け)

  • 接続できない(ORA-12514 など): lsnrctl statusServices SummaryFREEPDB1 が出ているか確認。出ていなければ第8章の構成やアラートログを確認
  • 名前解決エラー(TNS-03505): 別名定義がなくても EZCONNECT 形式(//host:1521/FREEPDB1)で接続可。sqlnet.oraNAMES.DIRECTORY_PATHEZCONNECT が含まれているか確認
  • 起動しているのに PDB が閉じている: sqlplus / as sysdbashow pdbs; → 必要に応じて alter pluggable database FREEPDB1 open;save state;
  • アプリの DDL が失敗(ORA-01950): 表領域クォータ不足。ALTER USER <ユーザー> QUOTA UNLIMITED ON USERS; を実行

12.7 参考(引き渡し用ひな形)

  • JDBC URL: jdbc:oracle:thin:@//<db-host>:1521/FREEPDB1
  • 主なログ: アラートログ /opt/oracle/diag/rdbms/free/FREE/trace/alert_FREE.log / DBCA ログ /opt/oracle/cfgtoollogs/dbca/FREE/FREE.log
  • サービス操作: systemctl start|stop|status oracle-free-23ai

12.8 まとめ

本書の手順により、AlmaLinux 9.6(最小構成)上で Oracle Database 23ai Free を安全に構築し、FREE / FREEPDB1 の稼働・アプリ接続・自動起動までを確実に整備できました。
以降は、アプリ要件に沿った スキーマ設計・容量管理(12GB 制限の考慮)・バックアップ/監視 を進めてください。必要に応じて、上位エディション(SE/EE)も検討してください。