1.

Oracle ユーザープロセス完全ガイド(クライアント側プロセス / サーバープロセスとの違い / 専用 / 共有 / V$SESSION)

編集
この記事の要点
  • ユーザープロセスとは Oracle に接続するクライアント側のプロセス(例: SQL*Plus / アプリ / JDBC アプリ)
  • DB 内部で SQL を実際に実行するのはサーバープロセスで、両者は別物
  • ユーザープロセスとサーバープロセスは接続が確立されると 1 対 1(専用サーバー構成)で結びつく
  • 共有サーバー構成ではディスパッチャ経由で多数のユーザープロセスを少数のサーバープロセスで処理
  • 稼働状況は V$SESSION / V$PROCESS 動的ビューで確認できる

ユーザープロセスとは

Oracle におけるユーザープロセスとは、Oracle データベースに接続するクライアント側のプロセスを指します。SQL*Plus、Oracle SQL Developer、JDBC アプリケーション、Web アプリケーションサーバなど、データベースに対して SQL を投げる側のプロセスがすべて該当します。

ユーザープロセスは Oracle インスタンス(メモリ + バックグラウンドプロセス群)の外側に存在します。データベースが動いているサーバマシンと同じホストに存在することもあれば、ネットワーク経由で別のホストから接続することもあります。

サーバープロセスとの関係

ユーザープロセスは SQL を「依頼する側」、サーバープロセスは SQL を「実行する側」です。クライアントが接続を確立すると、Oracle 側にそのセッション用のサーバープロセスが用意され、両者がペアでやり取りを行います。

項目ユーザープロセスサーバープロセス
役割SQL を依頼するクライアントSQL を実行する Oracle 側プロセス
存在する場所クライアント側ホスト(同一ホストでも可)DB サーバホスト
起動タイミングアプリ / ツールの起動時クライアント接続時
SQL*Plus / JDBC / OCI アプリoracle プロセス

接続フローの全体像

  1. クライアント側でユーザープロセス(例: SQL*Plus)が起動する
  2. リスナー(LISTENER)に接続要求が送られる
  3. リスナーがサーバープロセスを起動 or 既存プロセスに割り当て
  4. ユーザープロセスとサーバープロセスが直接通信を開始
  5. セッションが終了したらサーバープロセスは終了 or プールに戻る

専用サーバー構成と共有サーバー構成

ユーザープロセスとサーバープロセスの結びつきは Oracle の接続モードで変わります。

構成関係特徴
専用サーバー(Dedicated)1 ユーザープロセス ↔ 1 サーバープロセス標準構成。応答が速いがプロセス数が増える
共有サーバー(Shared)多数のユーザープロセス ↔ ディスパッチャ ↔ 少数のサーバープロセス同時接続数が多いシステム向き。リソース節約

多くの OLTP システムは専用サーバー構成、Web アプリのように大量の短時間接続を捌くシステムは共有サーバー構成またはコネクションプーリングで設計されます。

確認方法

セッション一覧

-- 現在接続中のセッション
SELECT sid, serial#, username, machine, program, status
  FROM v$session
 WHERE type = 'USER';

machine がクライアント側ホスト名、program がユーザープロセスの実行ファイル名(例: sqlplus.exeJDBC Thin Client)になります。

OS プロセスとの突き合わせ

SELECT s.sid, s.serial#, s.username, s.program,
       p.spid AS server_process_id
  FROM v$session s
  JOIN v$process p ON s.paddr = p.addr
 WHERE s.type = 'USER';

SPID は OS 上のサーバープロセス ID(Linux なら ps -ef | grep ora_ で見えるプロセス)です。問題のあるセッションを OS レベルで kill する際にも使います。

ユーザープロセス終了時の挙動

クライアント側のユーザープロセスが落ちると、対応するサーバープロセスも通常は終了します。終了時に未コミットのトランザクションがあれば自動的にロールバックされます。これにより、クライアントクラッシュでもデータの整合性は保たれます。

セッションを強制終了

-- セッションを切断(次回 SQL 実行時に切れる)
ALTER SYSTEM KILL SESSION 'sid,serial#';

-- 即時切断
ALTER SYSTEM KILL SESSION 'sid,serial#' IMMEDIATE;

-- DBA がプロセスを直接切断(11gR2 以降)
ALTER SYSTEM DISCONNECT SESSION 'sid,serial#' IMMEDIATE;

よくある混同

混同しやすい用語正しい意味
ユーザープロセス と バックグラウンドプロセスユーザープロセスはクライアント側、バックグラウンドは DBWR / LGWR など Oracle インスタンスの内部プロセス
ユーザープロセス と サーバープロセスユーザープロセス = クライアント、サーバープロセス = Oracle 側の SQL 実行プロセス
ユーザープロセス と セッションセッションは Oracle 側に作られる論理的な接続単位。1 つのユーザープロセスから複数セッションを張ることもある

FAQ

Q: SQL*Plus を 2 つ起動したら、ユーザープロセスは 2 つ?
A: はい。プロセス単位なので、起動した sqlplus の数だけユーザープロセスが存在します。

Q: コネクションプールを使うと、ユーザープロセスは何個?
A: Web アプリの場合、AP サーバが 1 つのユーザープロセス内で複数の接続を保持します。サーバープロセス(Oracle 側)の数はプールサイズと同等になります。

Q: V$SESSION と V$PROCESS、どちらを見ればいい?
A: 接続情報・クライアント情報は V$SESSION、OS プロセスや使用メモリの情報は V$PROCESS。両方を paddr = addr で結合して見るのが定番です。

関連

  • プロセス — 親カテゴリ
  • サーバープロセス — SQL を実行する Oracle 側プロセス
  • バックグラウンドプロセス — DBWR / LGWR / SMON / PMON など
  • リスナー — クライアント接続要求を受け付ける
  • セッション — V$SESSION による接続単位の管理
編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ユーザープロセス
  2. サーバープロセス

最近更新/作成されたページ