導入
「接続ユーザーが増えるとプロセスが増えすぎて重い」「Webアプリの待機時間が長い」——そんな悩みを抱える環境では、共有サーバー接続(Shared Server)が有効です。共有サーバーは、クライアントごとにプロセスを確保するのではなく、プロセスを“共用”して多数の同時接続に対応します。
本記事では、専用サーバー接続との違い、SGAとの関係、正しい設定・確認方法、tnsnames.oraの例、モニタリングまでを図解+実行例で網羅します。記事末尾にはメリット/デメリット、よくある質問、将来リライトすべきポイント、内部リンク案も付けています。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
共有サーバー接続とは(専用サーバー接続との違い)
仕組みの全体像(テキスト図)
(クライアント) (サーバー側:Oracleインスタンス)
HTTP/SQL*Net ──→【ディスパッチャ】──→[共通キュー(SGA)]──→【共有サーバープロセス群】
(複数同時接続を受付) (要求を並べる) (空きが処理)
専用(Dedicated)と共有(Shared)の違い(ざっくり比較)
項目 専用サーバー接続 共有サーバー接続
――――――――――――――――――――――――――――――――――――――――――――
プロセス数 接続ごとに1プロセス 少数の共有プロセスで多数接続を捌く
リソース消費 多め(増えるほど膨張) 少なめ(集約されやすい)
向いている用途 少数ユーザーの重い処理 多数ユーザーの軽い/間欠的処理
接続指定方法 SERVER=DEDICATED SERVER=SHARED
ポイント
- 共有サーバーはディスパッチャが受けた要求をSGA上の共通キューに積み、空いている共有サーバープロセスが処理します。
- データベースは常に専用サーバー接続を許可します。共有サーバー接続は明示的な構成が必要です。
専用サーバー接続についてはこちら。
SGAと共有サーバー:なぜ関係が深いのか
共有サーバーでは、ユーザーごとのUGA(User Global Area)の一部がSGA側(Shared PoolやLarge Pool)に置かれるため、SGAサイズ設計が重要です。代表的に見るのは以下です。
- Shared Pool:SQL解析結果やディクショナリ情報のキャッシュ。
- Large Pool:共有サーバーやバックアップ処理などの大きめUGAを逃がすのに有用。
- 共通キュー(V$QUEUE):要求待ち行列の長さ・滞留を監視。
- 監視ビュー:
V$DISPATCHER/V$DISPATCHER_RATE/V$SHARED_SERVER/V$CIRCUIT/V$QUEUE/V$SGASTATなど。
共有サーバーの設定手順(最小から段階的に)
1) 最小構成(有効化)
ALTER SYSTEM SET SHARED_SERVERS = 5;
2) ディスパッチャの明示設定(必要に応じて)
ALTER SYSTEM SET DISPATCHERS = '(PROTOCOL=TCP)(DISPATCHERS=3)';
3) 上限の制御
ALTER SYSTEM SET MAX_SHARED_SERVERS = 20;
ALTER SYSTEM SET SHARED_SERVER_SESSIONS = 500;
ALTER SYSTEM SET CIRCUITS = 2000;
4) 無効化(元に戻す)
ALTER SYSTEM SET SHARED_SERVERS = 0;
ALTER SYSTEM SET DISPATCHERS = '';
補足:
SHARED_SERVERS=0を設定すると、新規の共有サーバー接続はできなくなります。既存の接続が終了するまで待機し、その後は共有サーバープロセスが停止します。
実際に新規接続を試みると以下のようにエラーとなります。
[oracle@orcl19c ~]$ sqlplus app_user/StrongPass123@ORCL_SHARED
SQL*Plus: Release 19.0.0.0.0 - Production on Sat Aug 16 03:23:30 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
ERROR:
ORA-12520: TNS:listener could not find available handler for requested type of
server
この挙動は正常であり、「共有サーバーが無効化されているため、リスナーがSHAREDモードの接続先を見つけられない」ことを意味します。専用サーバーであれば接続可能です。
クライアント側設定(tnsnames.ora)
共有サーバーで接続する例
ORCL_SHARED =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <dbhost>)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
(SERVER = SHARED)
)
)
専用サーバーで接続する例
ORCL_DEDICATED =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = <dbhost>)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
(SERVER = DEDICATED)
)
)
監視とチューニングの基本
- 方式確認:
V$SESSION.SERVERでDEDICATED/SHARED/NONEを判別。- DEDICATED:専用サーバー接続。常にDEDICATED表示。
- SHARED:共有サーバープロセスに割り当てられて実行中。
- NONE:共有サーバー接続だが、処理を行っていないアイドル状態。
- 待ち行列:
V$QUEUEの COMMON/SHARED キュー長や滞留時間。 - ディスパッチャ:
V$DISPATCHER,V$DISPATCHER_RATEの利用率・件数。 - 共有サーバー:
V$SHARED_SERVERの稼働数・処理数。 - SGAの状況:
V$SGASTAT(Shared Pool / Large Pool の消費)など。
実行例(ユーザー作成→テーブル作成→接続確認まで)
環境:Oracle Database 19c / シングル構成
操作できる環境が無い方は以下の手順で環境の作成が可能です。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
1) 管理者で接続
sqlplus / as sysdba
2) 業務ユーザーを作成・権限付与
CREATE USER app_user IDENTIFIED BY "StrongPass123";
GRANT CREATE SESSION, CREATE TABLE TO app_user;
ALTER USER app_user QUOTA UNLIMITED ON USERS;
3) サンプル表を作成・データ投入
CONN app_user/StrongPass123@ORCL_DEDICATED
CREATE TABLE t_demo (
id NUMBER PRIMARY KEY,
note VARCHAR2(100)
);
INSERT INTO t_demo VALUES (1,'hello');
COMMIT;
4) 共有サーバーを有効化(DBA)
CONN / AS SYSDBA
ALTER SYSTEM SET SHARED_SERVERS = 5;
ALTER SYSTEM SET DISPATCHERS = '(PROTOCOL=TCP)(DISPATCHERS=3)';
5) 共有サーバーで接続・方式確認(別セッションでSYSDBAから実行)
-- 【セッションA】app_userで共有サーバーに接続
sqlplus app_user/StrongPass123@ORCL_SHARED
SELECT * FROM t_demo WHERE id = 1; -- アプリ用の処理を実行
-- 【セッションB】SYSDBAで確認
sqlplus / as sysdba
SET LINES 200
COL username FOR A20
SELECT sid, serial#, username, server
FROM v$session
WHERE username = 'APP_USER';
/*
SID SERIAL# USERNAME SERVER
----- --------- ---------- ---------
65 27197 APP_USER NONE ← アイドル状態
66 28122 APP_USER SHARED ← 実行中に変化する
*/
使うべき場面と避けるべき場面(メリット/デメリット)
メリット
- 接続あたりのプロセス削減でリソース効率化
- 多数同時接続のスケーラビリティ向上
- 動的調整が可能
デメリット・注意点
- バッチやRMANは専用サーバー推奨
- SGA設計が前提
- キュー滞留の監視が必要
SHARED_SERVERS=0に設定すると新規の共有接続は ORA-12520 エラーで失敗する
よくある質問
Q1. DISPATCHERS を設定しなくても共有サーバーは使えますか?
A. はい。SHARED_SERVERS>0 なら既定のTCPディスパッチャが1つ起動します。
Q2. 共有サーバーの“数”はいくつが目安?
A. 接続10本につき共有サーバー1本程度から開始し、監視しながら調整します。
Q3. NONE と表示されるのは失敗ですか?
A. いいえ。共有サーバー接続は、処理中のみ SHARED と表示され、アイドル中は NONE となります。問題ありません。
Q4. SHARED_SERVERS=0 で接続するとどうなる?
A. 新規の共有サーバー接続は失敗し、ORA-12520 が発生します。専用サーバー接続なら可能です。
まとめ(要点)
- 多数同時接続に向くのが共有サーバー、重い処理は専用サーバーを使い分け。
- 有効化は
SHARED_SERVERS>0、制御はDISPATCHERSや上限パラメータ。 - 監視は V$SESSION/V$QUEUE/V$DISPATCHER%/V$SGASTAT を活用。
V$SESSION.SERVERは、DEDICATED/SHARED/NONE と変化することを理解しておく。SHARED_SERVERS=0にすると新規の共有サーバー接続は不可(ORA-12520)、専用サーバーであれば接続可能。- tnsnames.oraで SERVER=SHARED / SERVER=DEDICATED を切替可能。
[参考]
Oracle Database Net Services 管理者ガイド 19c
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント