Oracleデータベースの共有サーバー接続をやさしく・正確に解説(専用サーバー接続との違い/設定手順/監視まで)

Oracle Master Silver

導入

「接続ユーザーが増えるとプロセスが増えすぎて重い」「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$DISPATCHERV$DISPATCHER_RATEV$SHARED_SERVERV$CIRCUITV$QUEUEV$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.SERVERDEDICATED / 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専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました