| この記事の要点 |
|
ユーザープロセスとは
Oracle におけるユーザープロセスとは、Oracle データベースに接続するクライアント側のプロセスを指します。SQL*Plus、Oracle SQL Developer、JDBC アプリケーション、Web アプリケーションサーバなど、データベースに対して SQL を投げる側のプロセスがすべて該当します。
ユーザープロセスは Oracle インスタンス(メモリ + バックグラウンドプロセス群)の外側に存在します。データベースが動いているサーバマシンと同じホストに存在することもあれば、ネットワーク経由で別のホストから接続することもあります。
サーバープロセスとの関係
ユーザープロセスは SQL を「依頼する側」、サーバープロセスは SQL を「実行する側」です。クライアントが接続を確立すると、Oracle 側にそのセッション用のサーバープロセスが用意され、両者がペアでやり取りを行います。
| 項目 | ユーザープロセス | サーバープロセス |
|---|---|---|
| 役割 | SQL を依頼するクライアント | SQL を実行する Oracle 側プロセス |
| 存在する場所 | クライアント側ホスト(同一ホストでも可) | DB サーバホスト |
| 起動タイミング | アプリ / ツールの起動時 | クライアント接続時 |
| 例 | SQL*Plus / JDBC / OCI アプリ | oracle<SID> プロセス |
接続フローの全体像
- クライアント側でユーザープロセス(例: SQL*Plus)が起動する
- リスナー(
LISTENER)に接続要求が送られる - リスナーがサーバープロセスを起動 or 既存プロセスに割り当て
- ユーザープロセスとサーバープロセスが直接通信を開始
- セッションが終了したらサーバープロセスは終了 or プールに戻る
専用サーバー構成と共有サーバー構成
ユーザープロセスとサーバープロセスの結びつきは Oracle の接続モードで変わります。
| 構成 | 関係 | 特徴 |
|---|---|---|
| 専用サーバー(Dedicated) | 1 ユーザープロセス ↔ 1 サーバープロセス | 標準構成。応答が速いがプロセス数が増える |
| 共有サーバー(Shared) | 多数のユーザープロセス ↔ ディスパッチャ ↔ 少数のサーバープロセス | 同時接続数が多いシステム向き。リソース節約 |
多くの OLTP システムは専用サーバー構成、Web アプリのように大量の短時間接続を捌くシステムは共有サーバー構成またはコネクションプーリングで設計されます。
確認方法
セッション一覧
-- 現在接続中のセッション
SELECT sid, serial#, username, machine, program, status
FROM v$session
WHERE type = 'USER';
machine がクライアント側ホスト名、program がユーザープロセスの実行ファイル名(例: sqlplus.exe、JDBC 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 による接続単位の管理
子ページはありません
- ユーザープロセス
- サーバープロセス
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Git pushした変更の取消し|revert・履歴変更と保護の注意点 2026-10-15 23:49:01
- Gitでローカルを戻す前に|reset・restoreの違いと退避範囲 2026-10-15 23:49:01
- Git rebaseの使い方|対象範囲・競合解決・pushの判断 2026-10-15 22:50:59
- Git pullの使い方|取込み先・ff-only・競合とstashの注意点 2026-10-15 22:50:59
- Git pushの使い方|送信先・タグ・force-with-leaseの条件 2026-10-15 22:12:47
- Git remoteの設定・確認・削除|SSH URLとfetch/pushの違い 2026-10-15 22:12:47
- Gitリモートリポジトリの作成|初回push・既存履歴・mirrorの注意 2026-10-15 15:48:16
- Gitのuser.name・user.email設定|local/global・確認と過去履歴の注意 2026-10-15 15:30:07
- LinuxにGitをインストール|配布元・初期設定・TLSと認証の確認 2026-10-15 15:30:06
- Git導入と初回push|Linuxサーバー・Windows/macOS・SSH設定 2026-10-15 14:51:54
- Db2のCREATE INDEX|索引定義・INCLUDEと実行計画の確認 2026-10-15 14:10:22
- Db2の自動採番|IDENTITY・ID取得とRESTARTの注意点 2026-10-15 14:10:22
- 【DB2】特定スキーマの全テーブルの全カラム情報を取得する方法 2026-10-15 13:53:15
- Db2のシーケンスとIDENTITYの違い|採番とカタログの確認SQL 2026-10-15 13:53:15
- Db2で複数カラムをUPDATEする方法|SET・WHEREと更新前の値 2026-10-15 13:53:15