インフラエンジニアの羅針盤

インフラエンジニア1〜3年目のための技術ガイド

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

公開更新

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

目次
  1. 1. はじめに
    1. 1.1 対象読者
    2. 1.2 想定環境と前提
    3. 1.3 手順の流れ(本書の進め方)
    4. 1.4 記法と約束事(読み方)
    5. 1.5 セキュリティと運用上の注意
    6. 1.6 事前に用意しておくと良いもの
    7. 1.7 ゴール(この章以降を完了すると到達する状態)
  2. 2. OS の更新
    1. 2.1 dnf によるシステム更新
    2. 2.2 再起動
    3. 2.3 バージョン確認
    4. 2.4 ネットワークの基本確認(IP / FQDN)
    5. 2.5 時刻同期の設定(chrony 推奨)
    6. 2.6 作業用ユーティリティの導入
    7. 2.7 トラブルシュートメモ
  3. 3. スワップ領域の設定
    1. 3.1 既存スワップの有無を確認
    2. 3.2 スワップファイル(4GB)を作成
    3. 3.3 スワップとして初期化して有効化
    4. 3.4 恒久化(/etc/fstab に安全に登録)
    5. 3.5 反映確認
    6. 3.6(任意)systemd のスワップユニットで管理する
    7. 3.7 よくあるエラーと対処
    8. 3.8 補足:fallocate を使う場合
  4. 4. SELinux の方針
    1. 4.1 現在の SELinux 状態を確認
    2. 4.2 構築作業中は一時的に Permissive にする(推奨)
    3. 4.3 恒久的に Permissive へ設定(必要に応じて)
    4. 4.4 カスタムポートを使う場合の追加設定(必要時のみ)
    5. 4.5 運用移行時に Enforcing へ戻す(段階的)
    6. 4.6 よくあるエラーと対処
    7. 4.7 まとめ
  5. 5. ファイアウォール設定
    1. 5.1 firewalld の状態とゾーンの確認
    2. 5.2 1521/TCP をゾーンに恒久開放し、反映する
    3. 5.3(任意)接続元を制限する(rich rule)
    4. 5.4(将来の変更に備えるメモ)ポートを 1521 以外にする場合
    5. 5.5 まとめと確認ポイント
    6. 5.6 トラブルシュート(この章で確認できる範囲)
  6. 6. Oracle Preinstall パッケージの導入
    1. 6.1 事前チェック(手動作成した oracle ユーザーが無いこと)
    2. 6.2 取得と配置
    3. 6.3 インストール(dnf localinstall)
    4. 6.4 導入結果の確認
    5. 6.5 よくあるつまずきと対処
    6. 6.6 この章の到達点
  7. 7. Oracle Database 本体のインストール(23ai Free の RPM 導入)
    1. 7.1 事前チェック(ディスク要件と配置先)
    2. 7.2 RPM の取得と配置
    3. 7.3 RPM のインストール
    4. 7.4 導入結果の確認(この章で実行可能な範囲のみ)
    5. 7.5 よくあるつまずきと対処
    6. 7.6 この章の到達点と次章
  8. 8. データベース作成(23ai Free)
    1. 8.1 事前調整:/etc/sysconfig/oracle-free-23ai.conf の代表パラメータ
    2. 8.2 初期構成の実行(CDB=FREE / PDB=FREEPDB1 の自動作成)
    3. 8.3 環境変数の設定(oraenv で一括)
    4. 8.4 稼働確認(プロセス/リスナー/DB&PDB)
    5. 8.5 PDB の自動 OPEN 設定(SAVE STATE)
    6. 8.6(任意)追加 PDB の作成
    7. 8.7 ログの場所(トラブルシュートの入口)
    8. 8.8 この章の到達点
  9. 9. アプリケーション用スキーマの作成
    1. 9.1 前提確認(PDB の状態と作業方針)
    2. 9.2 SYS で PDB(FREEPDB1)へ接続
    3. 9.3 アプリケーション用ユーザーの作成(最小権限付与)
    4. 9.4 一般ユーザーでの接続と動作確認(DDL→DML→SELECT→DROP)
    5. 9.5 よくあるエラーと対処(この章で対応可能な範囲)
    6. 9.6 参考:JDBC 接続文字列(実行不要)
    7. 9.7 この章の到達点
  10. 10. 接続確認
    1. 10.1 Oracle 環境変数の読み込み(oraenv)
    2. 10.2 リスナーとサービスの確認
    3. 10.3 SQL*Plus による接続確認(SYS・一般ユーザー)
    4. 10.4 tnsping による疎通確認(任意)
    5. 10.5 代表的なエラーと切り分け(この章で確認できる範囲)
    6. 10.6 参考:JDBC 接続文字列(実行不要)
    7. 10.7 この章の到達点
  11. 11. 自動起動設定
    1. 11.1 ユニットの存在確認
    2. 11.2 自動起動の有効化(enable)
    3. 11.3 即時起動・停止・状態確認
    4. 11.4 再起動テスト(任意)
    5. 11.5 PDB の自動 OPEN(SAVE STATE)確認
    6. 11.6 ログの場所(トラブルシュートに必須)
    7. 11.7 よくあるつまずきと対処
    8. 11.8 この章の到達点
  12. 12. 構築作業のまとめ
    1. 12.1 ここまでの到達点(確認リスト)
    2. 12.2 手順全体の要点(ダイジェスト)
    3. 12.3 Oracle Database 23ai Free の主な制限(運用上の注意)
    4. 12.4 重要設定の復習(変更ポイントの再確認)
    5. 12.5 日常運用チェックリスト(即実行可)
    6. 12.6 代表的なトラブルの初動(一次切り分け)
    7. 12.7 参考(引き渡し用ひな形)
    8. 12.8 まとめ

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)も検討してください。

前の記事
次の記事