ORA-3113が発生
MTS接続でアクセスを行なう際にクライアント側にORA-3113が発生する場合があります。
その際、初期化パラメータbackground_dump_dest配下にディスパッチャのトレースが以下のように出力されます。
【ディスパッチャのトレース】
*** 2004-07-15 15:30:07.000
error 18 creating virtual circuit
SESSIONSに設定された数よりも多くバーチャル・サーキットが作成されたことが原因です。
バーチャル・サーキットはMTSで接続された場合にカウントされる。
また、別のデータベースに対してMTS接続でDBLINK経由のアクセスを行なうとセッション数が増加せずに
バーチャル・サーキット数だけが増加します。
セッション数よりもバーチャル・サーキット数が先にSESSIONSよりも大きくなる場合に発生する。
バーチャル・サーキットは、マルチスレッド・サーバー(MTS)構成時に使用されます。
MTS構成の場合、ユーザーからの処理要求は、ディスパッチャ・プロセスを通して、
共有サーバー・プロセスに伝えられ、共有サーバー・プロセスが処理を行い、ディスパッチャ・プロセスに応答を返す。
この際に共有プール上に存在するバーチャル・サーキットを通じて、ディスパッチャ・プロセスと共有サーバー・プロセスの
処理要求のやり取りが行われます。
バーチャル・サーキットは、基本的にデータベースへの接続の時に作成され、切断時に解放されます。
select status , count(*) from v$circuit group by status;
STATUS COUNT(*)
---------------- ----------
NORMAL 98 <-- データベースへの接続分
OUTBOUND 0 <-- DBLINKを利用したMTS接続でのアクセス分
初期化パラメータSESSIONSの値を大きく設定して回避します。
SESSIONの初期値:(1.1×processes)+5
SQL> col session_all for a10
SQL> r
select a.db_normal
, b.db_link
, c.db_total
, d.session_all
from ( select count(*) as db_normal from v$circuit where status = 'NORMAL' ) a
, ( select count(*) as db_link from v$circuit where status = 'OUTBOUND' ) b
, ( select count(*) as db_total from v$circuit ) c
, ( select value as session_all from v$parameter where name = 'sessions' ) d
DB_NORMAL DB_LINK DB_TOTAL SESSION_AL
---------- ---------- ---------- ----------
26 223 249 1000