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 手順の流れ(本書の進め方)
- OS の更新と基本設定
- Oracle Preinstall パッケージの導入(
oracle
ユーザー作成/limits・sysctl 自動設定。ログ:.../orakernel.log
) - Oracle Database 23ai Free RPM のインストール
/etc/init.d/oracle-free-23ai configure
を実行して初期DB作成(CDB=FREE / PDB=FREEPDB1)- ファイアウォール(1521/TCP)と SELinux の方針を調整
- systemd による自動起動設定(
oracle-free-23ai
をenable
) - (必要に応じて)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_user
やappuser
)を作成済み - 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.conf
(LISTENER_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 を取得する際は、
curl
やdnf
にプロキシ設定が必要です(例:/etc/dnf/dnf.conf
にproxy=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 /swapfile
→swapon /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/config
をSELINUX=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.conf
にproxy=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.conf
や curl
のプロキシ設定が必要です。
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_PORT
、CHARSET
=AL32UTF8 既定、DBFILE_DEST
など)。
7.5 よくあるつまずきと対処
- 依存関係の解決に失敗する: OS リポジトリへの到達性を確認。プロキシ経由なら
/etc/dnf/dnf.conf
にproxy=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=FREE と PDB=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_TDE:
true
で 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=FREE
、ORACLE_HOME
、PATH
等)を読み込みます。ワンライナーでも、ログイン時の自動反映(~/.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 の作成と起動を完了- oraenv で
ORACLE_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
出力の FREEPDB1
が READ 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 status
で Services 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)
sqlplus
や lsnrctl
の「コマンドが見つからない」を防ぐため、最初に 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 Summary に
PORT=1521
が表示されていること - Services Summary に
FREE
とFREEPDB1
が表示されていること
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.ora
の NAMES.DIRECTORY_PATH
に EZCONNECT
が含まれているかを確認してください(通常は既定で有効です)。
10.5 代表的なエラーと切り分け(この章で確認できる範囲)
- TNS-03505(名前解決失敗)
→ EZCONNECT 形式(//host:1521/service
)で試す。
→sqlnet.ora
のNAMES.DIRECTORY_PATH
にEZCONNECT
が含まれているか確認。 - ORA-12514(サービス未登録)
→lsnrctl status
の Services Summary にFREEPDB1
が表示されているか確認。表示されない場合は第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 により、
system
やwls_user
でFREEPDB1
へ接続・簡易クエリを実行 - 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 の手順で
OPEN
とSAVE 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-23ai を enable 済み、起動・停止・状態確認は
systemctl
で実施 - PDB 自動 OPEN:FREEPDB1 に SAVE STATE を設定済み(再起動後も READ WRITE)
12.2 手順全体の要点(ダイジェスト)
- OS 更新・FQDN・時刻同期 → swap 4GB → SELinux(Permissive/無効)→ firewalld 1521/TCP
- Preinstall 導入(ユーザー/グループ、limits、sysctl、THP 調整など)
- 23ai Free RPM 導入(EL9 向け)
- /etc/sysconfig/oracle-free-23ai.conf を必要に応じて調整(例:
LISTENER_PORT
、CHARSET=AL32UTF8
、DBFILE_DEST
など) - configure 実行で FREE / FREEPDB1 を自動作成 → oraenv で環境設定 → EZCONNECT で接続確認
- PDB(FREEPDB1)にアプリ用スキーマを作成(最小権限+クォータ)
- systemd(
oracle-free-23ai
)で自動起動を有効化 → PDB に SAVE STATE - ログの所在を把握:アラートログ、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_DEST
、CONFIGURE_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 status
の Services Summary にFREEPDB1
が出ているか確認。出ていなければ第8章の構成やアラートログを確認 - 名前解決エラー(TNS-03505): 別名定義がなくても EZCONNECT 形式(
//host:1521/FREEPDB1
)で接続可。sqlnet.ora
のNAMES.DIRECTORY_PATH
にEZCONNECT
が含まれているか確認 - 起動しているのに PDB が閉じている:
sqlplus / as sysdba
→show 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)も検討してください。