記事「MCPを話すOracle Databaseを作成する - オンプレミス19c編」にそって作成した環境で、リモートMCPサーバーのツール実行をリソース・マネージャで制御します。
リソース・マネージャのコンシューマ・グループの作成までは、以下の記事の作業と同じです。
MCPサーバーのツールに作成したコンシューマ・グループを紐づける作業は、Autonomous AI Databaseでの作業と同じです。
相互参照を避けるためと手順自体の確認のために、以下より実施した作業を記録します。
CDBの構成
最初にCDBに接続して作業します。
sql sys@orcl_tls as sysdba
apex-arm % sql sys@orcl_tls as sysdba
SQLcl: 水 4月 08 13:13:20 2026のリリース25.4 Production
Copyright (c) 1982, 2026, Oracle. All rights reserved.
パスワード (**********?) ******
接続先:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
SQL>
CDBに設定されているリソース・マネージャ・プランを確認します。
show parameter resource_manager_plan
VALUEは空白なので、リソース・マネージャ・プランは未適用です。
SQL> show parameter resource_manager_plan
NAME TYPE VALUE
--------------------- ------ -----
resource_manager_plan string
SQL>
念の為、V$RSRC_PLANビューも確認します。
select name, is_top_plan, cpu_managed from v$rsrc_plan where is_top_plan = 'TRUE';SQL> select name, is_top_plan, cpu_managed from v$rsrc_plan where is_top_plan = 'TRUE';
NAME IS_TOP_PLAN CPU_MANAGED
________________________ ______________ ______________
ORA$INTERNAL_CDB_PLAN TRUE OFF
INTERNAL_PLAN TRUE OFF
INTERNAL_PLAN TRUE OFF
SQL>
CDBについてはリソース・マネージャ・プランが設定されていればよいので、デフォルトで作成されているDEFAULT_CDB_PLANを、リソース・マネージャ・プランとして設定します。
DEFAULT_CDB_PLANの有無を確認します。
select * from dba_cdb_rsrc_plans where plan = 'DEFAULT_CDB_PLAN';
SQL> select * from dba_cdb_rsrc_plans where plan = 'DEFAULT_CDB_PLAN';
PLAN_ID PLAN COMMENTS STATUS MANDATORY
__________ ___________________ ___________________ _________ ____________
20248 DEFAULT_CDB_PLAN Default CDB plan YES
SQL>
CDBのリソース・マネージャ・プランとして、DEFAULT_CDB_PLANを設定します。
alter system set resource_manager_plan = 'DEFAULT_CDB_PLAN' scope=both;
SQL> alter system set resource_manager_plan = 'DEFAULT_CDB_PLAN' scope=both;
Systemが変更されました。
SQL>
再度、リソース・マネージャ・プランを表示し、CDBにリソース・マネージャ・プランが設定されたことを確認します。
SQL> show parameter resource_manager_plan
NAME TYPE VALUE
--------------------- ------ ----------------
resource_manager_plan string DEFAULT_CDB_PLAN
SQL> select name, is_top_plan, cpu_managed from v$rsrc_plan where is_top_plan = 'TRUE';
NAME IS_TOP_PLAN CPU_MANAGED
___________________ ______________ ______________
DEFAULT_CDB_PLAN TRUE ON
INTERNAL_PLAN TRUE ON
INTERNAL_PLAN TRUE ON
SQL>
CDBのリソース・マネージャ・プランとして、DEFAULT_CDB_PLANが設定されました。
PDBの構成
続いて、PDBのリソース・マネージャ・プランを構成します。
ORCLPDB1に接続して作業します。
sql sys@orclpdb1_tls as sysdba
apex-arm % sql sys@orclpdb1_tls as sysdba
SQLcl: 水 4月 08 13:19:10 2026のリリース25.4 Production
Copyright (c) 1982, 2026, Oracle. All rights reserved.
パスワード (**********?) ******
接続先:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.19.0.0.0
SQL>
PDBに設定されているリソース・マネージャ・プランを確認します。
show parameter resource_manager_plan
VALUEは空白なので、リソース・マネージャ・プランは未適用です。
SQL> show parameter resource_manager_plan
NAME TYPE VALUE
--------------------- ------ -----
resource_manager_plan string
SQL>
コンシューマ・グループとして
RESTRICT_RUNAWAY、リソース・マネージャ・プランとして
MY_PDB_PLANを作成し、
経過時間の上限を
20秒、
CPU時間の上限を
10秒として、SQLを中断するプラン・ディレクティブを作成します。
@mcp-app/rm-setup/create_RESTRICT_RUNAWAY.sql
リソース・マネージャー・プランMY_PDB_PLANとコンシューマ・グループRESTRICT_RUNAWAYが作成されます。
SQL> @mcp-app/rm-setup/create_RESTRICT_RUNAWAY.sql
resource consumer group created RESTRICT_RUNAWAY
resource manager plan created MY_PDB_PLAN
plan directives created RESTRICT_RUNAWAY for MY_PDB_PLAN
default plan directive created OTHER_GROUPS for MY_PDB_PLAN
pending area submitted successfully.
PL/SQLプロシージャが正常に完了しました。
SQL>
作成したコンシューマ・グループ
RESTRICT_RUNAWAYを、MCPサーバーの実行ユーザー
APEXDEVが使用できるように権限を与えます。
begin
dbms_resource_manager_privs.grant_switch_consumer_group (
grantee_name => 'APEXDEV',
consumer_group => 'RESTRICT_RUNAWAY',
grant_option => FALSE
);
end;
/
SQL> begin
2 dbms_resource_manager_privs.grant_switch_consumer_group (
3 grantee_name => 'APEXDEV',
4 consumer_group => 'RESTRICT_RUNAWAY',
5 grant_option => FALSE
6 );
7 end;
8* /
PL/SQLプロシージャが正常に完了しました。
SQL>
ビューを検索して設定を確認します。
プランMY_PDB_PLANの存在を確認します。
select * from dba_rsrc_plans where plan = 'MY_PDB_PLAN';
SQL> select * from dba_rsrc_plans where plan = 'MY_PDB_PLAN';
PLAN_ID PLAN NUM_PLAN_DIRECTIVES CPU_METHOD MGMT_METHOD ACTIVE_SESS_POOL_MTH PARALLEL_DEGREE_LIMIT_MTH QUEUEING_MTH SUB_PLAN COMMENTS STATUS MANDATORY
__________ ______________ ______________________ _____________ ______________ ____________________________ _________________________________ _______________ ___________ ___________ _________ ____________
79741 MY_PDB_PLAN 2 EMPHASIS EMPHASIS ACTIVE_SESS_POOL_ABSOLUTE PARALLEL_DEGREE_LIMIT_ABSOLUTE FIFO_TIMEOUT NO NO
SQL>
コンシューマ・グループRESTRICT_RUNAWAYの存在を確認します。
select * from dba_rsrc_consumer_groups where consumer_group = 'RESTRICT_RUNAWAY';
SQL> select * from dba_rsrc_consumer_groups where consumer_group = 'RESTRICT_RUNAWAY';
CONSUMER_GROUP_ID CONSUMER_GROUP CPU_METHOD MGMT_METHOD INTERNAL_USE COMMENTS CATEGORY STATUS MANDATORY
____________________ ___________________ ______________ ______________ _______________ ___________ ___________ _________ ____________
79742 RESTRICT_RUNAWAY ROUND-ROBIN ROUND-ROBIN NO OTHER NO
SQL>
設定されているプラン・ディレクティブを確認します。
select plan, group_or_subplan, switch_group, switch_for_call, switch_time_in_call, switch_elapsed_time
from dba_rsrc_plan_directives
where plan = 'MY_PDB_PLAN' and group_or_subplan = 'RESTRICT_RUNAWAY';SQL> select plan, group_or_subplan, switch_group, switch_for_call, switch_time_in_call, switch_elapsed_time
2 from dba_rsrc_plan_directives
3* where plan = 'MY_PDB_PLAN' and group_or_subplan = 'RESTRICT_RUNAWAY';
PLAN GROUP_OR_SUBPLAN SWITCH_GROUP SWITCH_FOR_CALL SWITCH_TIME_IN_CALL SWITCH_ELAPSED_TIME
______________ ___________________ _______________ __________________ ______________________ ______________________
MY_PDB_PLAN RESTRICT_RUNAWAY CANCEL_SQL TRUE 10 20
SQL>
以上で、リソース・マネージャ・プランの構成は完了です。
リソース・マネージャ・プランの有効化し、確認します。
alter system set resource_manager_plan = 'MY_PDB_PLAN' scope=both;select name, is_top_plan, cpu_managed from v$rsrc_plan where is_top_plan = 'TRUE';
SQL> alter system set resource_manager_plan = 'MY_PDB_PLAN' scope=both;
Systemが変更されました。
SQL> select name, is_top_plan, cpu_managed from v$rsrc_plan where is_top_plan = 'TRUE';
NAME IS_TOP_PLAN CPU_MANAGED
______________ ______________ ______________
MY_PDB_PLAN TRUE ON
SQL>
ツールへのコンシューマ・グループの適用
MCP App HelperのAPEXアプリケーションを実行し、ナビゲーション・メニューのToolsを開きます。
一覧にあるrun_sqlを編集します。
Resource Consumer GroupにRESTRICT_RUNAWAYを設定し、変更の適用をクリックします。
以上でツールrun_sqlの実行時にコンシューマ・グループがRESTRICT_RUNAWAYに切り替わり、SELECT文のCPU時間が10秒、経過時間が20秒に達すると切断されるように設定されました。
動作確認
MCP Inspectorを起動します。
npx @modelcontextprotocol/inspector
リモートMCPサーバーsampleserverに接続し、ツールrun_sqlを呼び出します。
sqlとして以下を記述し、Run Toolを実行します。
select count(*) from all_objects, all_objects
コンシューマ・グループRESTRICT_RUNAWAYが割当たっているため、処理時間が10秒を超えたところで以下のエラーが発生します。CPU時間の上限が10秒、経過時間が20秒の設定なので、先にCPU時間の上限が適用されているようです。
"ORA-00040: アクティブな時間制限を超えました - コールは異常終了しました"
SELECT文実行時に割り当てられているリソース・コンシューマー・グループを、以下のSELECT文を実行して確認します。
select resource_consumer_group from v$session where audsid = sys_context('USERENV','SESSIONID')
Tool Resultから、ツールrun_sqlの実行時にコンシューマ・グループとしてRESTRICT_RUNAWAYが割り当たっていることが確認できます。
以上のように、リモートMCPサーバーのツール実行時にリソース・コンシューマ・グループを切り替えられることが確認できました。
今回の記事は以上になります。
完