この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 13:11:56

タイトル: プロセス
SEOタイトル: Oracle Database のプロセス完全ガイド(ユーザプロセス / サーバプロセス / バックグラウンドプロセスの違い)

この記事の要点
  • Oracle のプロセスは大きく ユーザプロセスサーバプロセスバックグラウンドプロセスの 3 種類
  • ユーザプロセスはクライアント側 (SQL*Plus・アプリケーション) で動作し、SQL を送信する役割
  • サーバプロセスはサーバ側で SQL を受け取り、共有プール・データバッファを使って実行する
  • バックグラウンドプロセスは DB の運用を裏で支える。SMON / PMON / DBWn / LGWR / CKPT などが代表例
  • 専用サーバ構成と共有サーバ構成でサーバプロセスの同時接続数の扱いが変わる

Oracle における「プロセス」とは

Oracle Database では、データベースインスタンスを構成する要素のひとつとしてプロセスがあります。プロセスとは OS 上で動作する実行単位で、Oracle はインスタンス稼働中に多数のプロセスを協調動作させて SQL の実行や永続化を行っています。

プロセスは目的によってユーザプロセスサーバプロセスバックグラウンドプロセスに分類されます。

3 種類のプロセス

種類動作場所役割
ユーザプロセスクライアント側SQL の送信、結果の受け取り
サーバプロセスDB サーバ側SQL を実際に実行(パース・実行・フェッチ)
バックグラウンドプロセスDB サーバ側インスタンスの維持(書き出し・ログ・回復など)

ユーザプロセス

ユーザプロセスはクライアントアプリケーション(SQL*Plus / SQL Developer / Java / Python など)が Oracle と通信するために生成するプロセスです。SQL を送る側であり、SQL の実行そのものは行いません。

クライアントとサーバが別マシンの場合はクライアント側マシンで動作し、Oracle Net 経由でサーバプロセスと通信します。

サーバプロセス

サーバプロセスはクライアントの代理として SQL を実行するプロセスで、DB サーバ側で動作します。

専用サーバ構成(dedicated)

1 つのユーザプロセスに対して 1 つのサーバプロセスが割り当てられる構成です。シンプルで応答性が高く、多くの環境で既定になっています。同時接続数が増えるとサーバプロセスも増えるため、メモリ消費に注意が必要です。

共有サーバ構成(shared / MTS)

少数のサーバプロセスを複数のユーザプロセスで共有する構成です。DISPATCHER がリクエストを受けて空きサーバプロセスに振り分けます。多接続環境でメモリを節約できる代わりに、トランザクションごとの応答時間にばらつきが出ます。

主なバックグラウンドプロセス

バックグラウンドプロセスはインスタンスの基盤を支える常駐プロセス群です。種類はバージョンで増減しますが、代表的なものは次の通りです。

プロセス正式名役割
SMONSystem Monitorインスタンス回復、一時セグメント整理
PMONProcess Monitor異常終了したユーザプロセスの後始末
DBWnDatabase Writerデータバッファのダーティブロックをデータファイルへ書き出し
LGWRLog WriterREDO ログバッファを REDO ログファイルへ書き出し
CKPTCheckpointチェックポイント発生時にヘッダ情報を更新
ARCnArchiverREDO ログをアーカイブログとしてコピー
MMONManageability MonitorAWR・統計情報の収集
RECORecoverer分散トランザクションの障害回復

プロセスの確認方法

OS から見ると Oracle のプロセスは ora_xxx_SID という名前で見えます。

# Linux でバックグラウンドプロセスを一覧
ps -ef | grep ora_ | grep ORCL

# 例:
# oracle  ora_pmon_ORCL
# oracle  ora_smon_ORCL
# oracle  ora_dbw0_ORCL
# oracle  ora_lgwr_ORCL
# oracle  ora_ckpt_ORCL

Oracle 内部からは v$process / v$session ビューで確認できます。

-- 起動中のプロセス一覧
SELECT pname, spid, program
FROM   v$process
WHERE  pname IS NOT NULL
ORDER  BY pname;

-- セッションとサーバプロセスの紐付け
SELECT s.sid, s.username, s.program, p.spid
FROM   v$session s
JOIN   v$process p ON s.paddr = p.addr
WHERE  s.username IS NOT NULL;

同時接続数とプロセス数の関係

同時接続数の上限は初期化パラメータ processes で決まります。専用サーバ構成では接続ごとに 1 プロセス消費するため、見積もりは余裕を持って設定します。

-- 現在の上限と使用中プロセス数
SHOW PARAMETER processes;
SELECT COUNT(*) FROM v$process;

プロセスとメモリ(SGA / PGA)の関係

Oracle のメモリ領域は共有領域プロセス専用領域に分かれており、それぞれを使うプロセスが異なります。

メモリ領域使うプロセス用途
SGA(System Global Area)全プロセスで共有データバッファ・共有プール・REDO ログバッファ
PGA(Program Global Area)サーバプロセスごとソート領域・カーソル状態・セッション変数

SGA はインスタンス共通、PGA はサーバプロセスごとに独立です。同時接続数を増やすと PGA の合計が膨らむため、メモリ計画では pga_aggregate_target と接続数の積を考慮する必要があります。

プロセスの異常終了とリカバリ

サーバプロセスが何らかの理由でクラッシュした場合、PMON が後始末を行います。

  • 未コミットのトランザクションを自動ロールバック
  • 使っていたロックを解放
  • セッションが保持していた一時資源をクリーンアップ

インスタンスごとクラッシュした場合は SMON が起動時にインスタンス回復を実行し、REDO ログから未反映の変更を再適用します。

関連