記事「MCPを話すOracle Databaseを作成する - オンプレミス19c編」にそって作成した環境で、リモートMCPサーバーのツール実行をリソース・マネージャで制御します。
リソース・マネージャのコンシューマ・グループの作成までは、以下の記事の作業と同じです。
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>
show parameter resource_manager_plan
SQL> show parameter resource_manager_plan
NAME TYPE VALUE
--------------------- ------ -----
resource_manager_plan string
SQL>
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>
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>
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>
PDBの構成
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>
show parameter resource_manager_plan
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
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>
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>
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>
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;
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>
ツールへのコンシューマ・グループの適用
動作確認
"ORA-00040: アクティブな時間制限を超えました - コールは異常終了しました"
Tool Resultから、ツールrun_sqlの実行時にコンシューマ・グループとしてRESTRICT_RUNAWAYが割り当たっていることが確認できます。




