忍者ブログ
データベースエンジニアのための実践ブログ。Oracle・PostgreSQL・MySQLなどの環境構築、実行計画の読み方やチューニングといった現場で役立つノウハウ、DB基礎知識までを発信しています。

【問題形式で学ぶOracle】第6回:セッションの番人「PMON」!異常終了したプロセスを速やかに片付けるお掃除役

前回は、データベースの一貫性やクラッシュ・リカバリを担う重要プロセス「SMON」について学んだ。

今回は、それと対をなすもう一つのモニター系プロセス、「PMON(プロセス・モニター・プロセス)」を取り上げる。Oracle 26ai でも変わらず、ユーザーセッションの監視や異常終了時の後始末を一手に引き受けているこのプロセスの役割を、4択の練習問題を通じてスッキリ整理してみよう。


本日の問題

【問】Oracle Database のアーキテクチャにおけるバックグラウンド・プロセス「PMON(Process Monitor)」の主な役割として、最も適切なものを次の選択肢から1つ選べ。

  • A. データベースインスタンスの起動時に、ディスク上の制御ファイルやデータファイルの整合性をチェックし、クラッシュ・リカバリを実行する。
  • B. サーバー上の他のバックグラウンド・プロセス(SMONやLGWRなど)の稼働状況を常時監視し、異常終了時にインスタンス全体を強制停止する。
  • C. 各ユーザーのプロセスを監視し、万が一プロセスが異常終了(クラッシュ)した際に、使用していたリソースの解放やロールバックなどのクリーンアップを行う。
  • D. データベースへの新規接続要求を受け付け、リスナーを介さずに直接最適なサーバー・プロセスへと動的に割り当てる。

正解と解説

【正解】
C. 各ユーザーのプロセスを監視し、万が一プロセスが異常終了(クラッシュ)した際に、使用していたリソースの解放やロールバックなどのクリーンアップを行う。

詳しい解説

PMON(Process Monitor)は、名前の通り「プロセスを監視する」役割を持つバックグラウンド・プロセスだ。

  • ユーザー・プロセスの監視と後始末:
    クライアント側のアプリケーションが突然強制終了したり、ネットワーク障害でプツリと切断されたりすると、サーバー側に残されたサーバー・プロセスやロック、メモリ領域が宙ぶらりんになってしまう。PMONはこれを検知し、未確定のトランザクションをロールバックして、ロックやメモリなどのリソースを綺麗に回収・解放してくれる。
  • リスナーへの動的登録:
    もう一つの重要な役割として、データベース・サービスの情報をネットワークのリスナーに自動で登録(ダイナミック・レジストレーション)する仕事も担っている。

前回学んだ「SMON」がデータベース全体(インスタンス全体)のリカバリや一貫性を監視するのに対し、「PMON」は個々のユーザー・プロセスやセッションの異常時対応を行う、いわば現場の敏腕お掃除役である。この2つの役割の違いは試験でも非常に出やすいポイントなので、セットで押さえておこう。


まとめ

プロセス名主な監視対象おもな仕事・役割
SMON データベース / インスタンス全体 クラッシュ・リカバリ、一貫性の監視、一時セグメントのクリーンアップ
PMON 各ユーザー・プロセス / セッション 異常終了時のプロセス後始末(リソース解放、ロールバック)、リスナーへの動的登録

ユーザーが安心してSQLを投げられるのは、万が一アプリがフリーズしてもPMONが裏でしっかりと後片付けをしてくれるからこそである。

次回もOracleの仕組みがスッキリわかる4択問題をお届けするので、お楽しみに!


PR

【問題形式で学ぶOracle】第5回:サイレントガーディアン「SMON」!データベースの整合性とリカバリを陰で支えるバックグラウンド・プロセス

前回は、ユーザーの代わりに実際にSQLの処理を行う「サーバー・プロセス」について学んだ。

今回は、インスタンスの起動中からバックグラウンドで静かに稼働し、データベースの安全と一貫性を守り続ける最も重要なプロセスのひとつ、「SMON(システム・モニター・プロセス)」を取り上げる。Oracle 26ai でも変わらず活躍するこのプロセスの役割を、4択の練習問題を通じてスッキリ整理してみよう。


本日の問題

【問】Oracle Database のアーキテクチャにおけるバックグラウンド・プロセス「SMON(System Monitor)」の主な役割として、最も適切なものを次の選択肢から1つ選べ。

  • A. ユーザーからのネットワーク経由の接続要求を最初に受け付け、各サーバー・プロセスへの振り分け(リスニング)を行う。
  • B. データベースのメモリ領域(SGA)にある更新データを、定期的にディスク上のデータファイルへ書き込んで同期する。
  • C. データベースの一貫性を監視し、インスタンス障害からの起動時におけるクラッシュ・リカバリや、不要になった一時セグメントのクリーンアップを行う。
  • D. ユーザーがコミットしたトランザクションのRedoログ・バッファへの書き込みをリアルタイムでディスクへ吐き出す。

正解と解説

【正解】
C. データベースの一貫性を監視し、インスタンス障害からの起動時におけるクラッシュ・リカバリや、不要になった一時セグメントのクリーンアップを行う。

詳しい解説

Oracle のバックグラウンド・プロセスにはそれぞれ明確な担当業務がある。SMON(System Monitor)は、まさにデータベースの「健康と安全を守る守護神」のような存在だ。

  • インスタンス・リカバリ(クラッシュ・リカバリ):
    万が一、電源断や異常終了などでデータベースがクラッシュした際、次に STARTUP したときに自動で走って整合性を復旧する。
  • クリーンアップ作業:
    異常終了したセッションが残したデッド・トランザクションのロールバックや、不要になった一時セグメントの解放などをバックグラウンドで自動的に片付ける。

ちなみに、選択肢 B は DBWn(データベース・ライター)、選択肢 D は LGWR(ロガー・ライター)の役割である。Oracle 26ai の最新環境であっても、この基本的なバックグラウンド・プロセスの分担構造は変わっていない。トラブルシューティングや試験対策では、プロセス名と役割の組み合わせを確実に一致させられるようにしておこう。


まとめ

プロセス名正式名称主な役割・特徴
SMON System Monitor インスタンス・リカバリ、一貫性の監視、一時セグメントのクリーンアップ
DBWn Database Writer メモリ(SGA)のダーティデータをデータファイルへ書き込む
LGWR Log Writer Redoログ・バッファの内容をRedoログ・ファイルへ書き込む

データベースが安全に起動し続けられるのは、こうしたバックグラウンド・プロセスが裏でしっかりと働いてくれているおかげである。

次回もOracleの仕組みがスッキリわかる4択問題をお届けするので、お楽しみに!

【問題形式で学ぶOracle】第4回:サーバー・プロセスの正体を暴く!ユーザーの代わりに汗を流す働き者

前回は、ユーザーが実行するSQLやSQL*Plusなどの操作に伴って起動する「ユーザー・プロセス」について学んだ。

今回はそのペアとなるもう一つの重要プロセス、「サーバー・プロセス」を取り上げる。ユーザーが投げた命令を実際に受け止め、データベースの裏側で泥臭く処理を実行してくれるこの仕組みを、4択の練習問題を通じてスッキリ整理してみよう。


本日の問題

【問】Oracle Database のアーキテクチャにおける「サーバー・プロセス」の定義や役割として、最も適切なものを次の選択肢から1つ選べ。

  • A. クライアント側のPC上で常時起動し、ユーザーが入力したキーボード操作やSQLテキストをデータベースへ送信するための専用プロセス。
  • B. インスタンスの起動時に自動でバックグラウンドで立ち上がり、データベース全体のメモリ(SGA)やディスクの同期を管理する専用プロセス。
  • C. ユーザーからのセッションに対応して起動し、受け取ったSQLの解析や実行、データの読み書きなど実際の処理を行って結果を返すプロセス。
  • D. 複数のデータベース(PDB)の間でデータの整合性を保つため、コンテナ構造の切り替えやマウント状態を監視する専用プロセス。

正解と解説

【正解】
C. ユーザーからのセッションに対応して起動し、受け取ったSQLの解析や実行、データの読み書きなど実際の処理を行って結果を返すプロセス。

詳しい解説

前回学んだ「ユーザー・プロセス」と、今回の「サーバー・プロセス」は、いわば二人三脚のコンビである。

  • ユーザー・プロセス(クライアント側):
    私たちが操作する画面やツール(SQL*Plusなど)側で動く。いわば「注文を取るホールスタッフ」のような存在。
  • サーバー・プロセス(サーバー側):
    Oracle データベースのインスタンス側で動く。ユーザー・プロセスからの注文(SQL)を受け取り、メモリ(SGA)やデータファイルにアクセスして実際にSQLの処理やデータの読み書きを行う「厨房の料理人」である。

Oracle にログイン(セッションを確立)すると、このサーバー・プロセスがユーザーごとに割り当てられ、SQLの解析(パース)、実行計画の作成、データのフェッチといった実務をすべて背負って実行してくれる。この「誰がどこで動いているのか(クライアント側か、サーバー側か)」を問う問題は試験でも頻出なので、しっかり区別しておこう。


まとめ

プロセスの種類存在場所役割のイメージ
ユーザー・プロセス クライアント側(PC等) ユーザーの操作やSQLの入口(注文係)
サーバー・プロセス サーバー側(DBインスタンス) セッションに対応してSQLを実際に実行する(実働部隊・料理人)

「ユーザーが命令を出し(ユーザー・プロセス)、サーバー側が実際に汗をかいて処理する(サーバー・プロセス)」という分業体制が分かっていれば、パフォーマンスチューニングやセッション管理の基礎もぐっと理解しやすくなる。

次回も基礎固めにぴったりの4択問題をお届けするので、お楽しみに!


【問題形式で学ぶOracle】第3回:ユーザー・プロセスの正体を暴く!データベースに命令を届ける第一歩

Oracle Database の内部アーキテクチャを語る上で欠かせないのが、プロセス(作業員たち)の役割分担である。
「サーバープロセス」「バックグラウンド・プロセス」、そして今回焦点を当てる「ユーザー・プロセス」など、似たような言葉が多くて混乱しやすいポイントだ。

今回は、Oracleのプロセス構造の基本となる「ユーザー・プロセス」について、4択の練習問題を通じてスッキリ整理してみよう。


本日の問題

【問】Oracle Database のアーキテクチャにおける「ユーザー・プロセス」の定義として、最も適切なものを次の選択肢から1つ選べ。

  • A. データベースのメモリ領域(SGA)を常時監視し、インスタンス異常時の自動リカバリを行うバックグラウンド・プロセスのこと。
  • B. ユーザーが実行するSQL文や各種ユーティリティ(SQL*Plusなど)の操作に伴って起動するプロセスのこと。
  • C. ユーザー・プロセスからの要求を直接受け取り、ディスク上のデータファイルを読み書きするサーバー側の専用プロセスのこと。
  • D. 複数のインスタンス間(RAC環境など)でデータの一貫性を保つために、キャッシュブロックを転送し合う専用の連携プロセスのこと。

正解と解説

【正解】
B. ユーザーが実行するSQL文や各種ユーティリティ(SQL*Plusなど)の操作に伴って起動するプロセスのこと。

詳しい解説

Oracle Database に接続して作業を行うとき、私たちの操作を支えるプロセスにはいくつかの階層がある。

  • ユーザー・プロセス(User Process):
    私たちがクライアント側(PCなど)で sqlplus などのツールを起動したり、SQL文を実行したりしたときに生成されるプロセス。いわば「データベースへの入口・発信源」である。
  • サーバー・プロセス(Server Process):
    ユーザー・プロセスからの要求を受け取り、データベース(インスタンス)のメモリやデータファイルにアクセスして実際に処理を実行するプロセス。
  • バックグラウンド・プロセス(Background Process):
    データベースの全体管理やメモリ・ファイルの同期を行うために、インスタンス起動時に自動で立ち上がるプロセス(DBWn, LGWR, SMON, PMONなど)。

試験や実務のトラブルシューティングでも、「ユーザーが直接操作する側(ユーザー・プロセス)」と「データベース側で裏方として処理を代行する側(サーバー・プロセス)」の区別が問われやすいので、この違いをしっかり押さえておこう。


まとめ

プロセスの種類誰が・何のために起動するか主な役割
ユーザー・プロセス ユーザー(クライアント側) SQLやSQL*Plusなどのユーティリティの実行
サーバー・プロセス Oracle Database(サーバー側) ユーザー・からの要求を受け取り、処理を代行する
バックグラウンド・プロセス Oracle Database(インスタンス起動時) メモリ管理、ロギング、障害監視などの全体管理

普段何気なく打っている sqlplus / as sysdba の裏側でも、こうしたプロセス同士の連携が動いている。仕組みをイメージできるようになると、エラーが出たときも原因の切り分けがぐっとスムーズになるはずだ。

次回も基礎固めに最適な4択問題をお届け予定なのでお楽しみに!


【Oracle 26ai / 環境構築】Intel Mac・旧OS(Ventura等)でも諦めない!Dockerで作る Oracle AI Database 26ai Free 完全構築手順

「古いMacのOS(macOS 13など)のままOracle 26aiの検証環境を入れようとしたら、最新のDockerに『このOSバージョンでは起動できません』と怒られてしまった……」

そんな悩みをお持ちの方、諦めるのはまだ早い! OSを無理にバージョンアップしなくても、ご自身の環境に適合した旧バージョンのDocker Desktopを選択してインストールし、正しくリソースを設定すれば、今でも十分に最新のデータベース環境を手に入れることができる。

今回は、Intel Mac(旧OS環境)を対象にした、Docker版 Oracle AI Database 26ai Free の構築から接続確認までの全手順を徹底解説する。


【前提条件・スペック要件】

  • ハードウェア: Intel製 CPU 搭載 Mac(x86_64 アーキテクチャ)
  • OS: macOS 13 (Ventura) など、最新版Docker Desktopが直接サポート外となっている旧バージョン
  • ディスク空き容量: 30 GB 以上
  • メモリ(RAM): 最低 8 GB 以上(安定動作のため 16 GB 以上を強く推奨)

1. Docker Desktop for Mac のインストール(macOS 13対応版)

Docker公式サイトの通常ダウンロードボタンからは最新版しか取得できないため、macOS 13に対応する公式の旧バージョンインストーラーを直接取得して導入する。

1.1. インストーラーのダウンロード

Web ブラウザのアドレスバーに以下の Docker公式URL を直接入力し、.dmg ファイルをダウンロードする。

https://desktop.docker.com/mac/main/amd64/207573/Docker.dmg

※ 上記は Docker公式が配信している macOS 13 対応バージョン(v4.30.0 等)の正規インストーラーである。

1.2. インストールの実行

  1. ダウンロードした Docker.dmg をダブルクリックして開く。
  2. 表示されたウィンドウで、Docker.app アイコンを Applications フォルダへドラッグ&ドロップする。
  3. アプリケーション一覧から Docker を起動する。
  4. 初回起動時の特権アクセスや利用規約のダイアログで「Accept」および「Finish」を選択し、Mac の管理者パスワードを入力して許可する。
  5. メニューバーに Docker アイコンが表示され、ステータスが 「Docker Desktop is running」 になることを確認する。

1.3. インストールの確認

Mac の「ターミナル」を開き、正しくインストールされたかバージョン情報を確認する。

docker --version

# 出力例(バージョン 28.5.1 等)
Docker version 28.5.1, build e180ab8

2. Docker リソース設定(重要)

Oracle データベースは起動・初期化時に多くのメモリを消費するため、Docker 仮想マシンの割り当てリソースをあらかじめ変更しておく必要がある。

  1. Docker Desktop 画面右上の「歯車(Settings)」アイコンをクリックする。
  2. 左メニューの 「Resources」 > 「Advanced」 を選択する。
  3. リソースの割り当てを以下のように変更する。
    • Memory: 最低 4 GB 以上(安定動作のため 8 GB 以上を強く推奨)
    • Virtual disk limit: 20 GB 以上(推奨 30 GB 以上)
  4. 右下の「Apply & restart」をクリックし、Docker デーモンを再起動する。

3. Oracle 26ai コンテナの作成・起動

3.1. コンテナの起動コマンド実行

ターミナルを開き、以下のコマンドを実行して Oracle Database コンテナをバックグラウンドで起動する。
※ -e ORACLE_PWD= の YourPassword123 部分は、英数字混在の任意のパスワードに変更すること。

docker run -d \
  --name oracle26ai \
  -p 1521:1521 -p 5500:5500 \
  -e ORACLE_PWD=YourPassword123 \
  container-registry.oracle.com/database/free:latest

3.2. 起動状態の確認

初回起動時はデータベースの初期化処理に数分かかる。以下のコマンドで進行状況ログを監視する。

docker logs -f oracle26ai

ログ内に以下の行が表示されればデータベースの準備は完了である。(確認後、Ctrl + C でログ表示を抜ける)

Completed: Pluggable database FREEPDB1 opened read write
Completed: ALTER DATABASE OPEN
(※環境によっては DATABASE IS READY TO USE! と表示される場合もあります)

4. データベース接続確認(SQL*Plus)

外部ツールを使わず、Mac のターミナルから Docker コンテナ内の SQL*Plus を直接起動して接続テストを行う。

4.1. 管理者権限(SYSDBA)でのログイン

ターミナルで以下のコマンドを実行する(※ YourPassword123 は手順 3.1 で設定したパスワード)。

docker exec -it oracle26ai sqlplus sys/YourPassword123@FREEPDB1 as sysdba

接続成功時の出力イメージ:

SQL*Plus: Release 23.26.3.0.0 - Production on Sat Oct 10...
Connected to:
Oracle AI Database 26ai Free Release 23.26.3.0.0...

4.2. 動作確認クエリの実行

SQL> プロンプトが表示されたら、プラガブルデータベースの状態を確認するSQLを実行する。

SELECT name, open_mode FROM v$pdbs;

期待される結果:

NAME                 OPEN_MODE
-------------------- --------------------
FREEPDB1             READ WRITE

上記のように FREEPDB1 が READ WRITE で表示されていれば正常に接続完了である。確認後、exit と入力して SQL*Plus を抜ける。


5. コンテナの基本運用コマンド一覧

操作内容コマンド
コンテナの停止(Mac終了前など) docker stop oracle26ai
コンテナの再起動(2回目以降) docker start oracle26ai
コンテナ内へのシェルログイン docker exec -it oracle26ai /bin/bash
環境の完全破棄(初期化したい時) docker rm -f oracle26ai

これで旧OS環境の Intel Mac であっても、最新の Oracle AI Database 26ai Free をローカル環境に完全無料で構築し、思いのままに検証や学習を進めることができる。ぜひ快適なデータベースライフを満喫してほしい!