2026年4月9日木曜日

環境構築関連資料まとめ

環境構築関連資料まとめ - 2026年4月9日時点

今までに記述した、Oracle Databaseを使用する開発環境の構築手順に関する記事をまとめてみました。

UC Local APEX DevによるOracle APEX環境の作成
コンテナ・イメージを利用したローカル開発環境の作成
ローカル環境はUC Local APEX Devの使用を推奨します。以下の記事ははあくまで参考です。

    ちょっとした設定。UC Local APEX Devにはスクリプトとして含まれているものも多い。

    VirtualBoxを利用したローカルでのOracle APEX環境の作成
    Oracle CloudでのCustomer Managed ORDSの構成
    Oracle AI Database 26ai Free Virtual Appliance
    Autonomous Database Free Container Image
    SQLclのMCPサーバーに関する設定
    ORDS JWT認証 - Oracle APEXアプリケーションとの連携
    Oracle Cloudでのコンテナを利用したOracle APEX環境の作成
    ORDS RESTサービスで実装するリモートMCPサーバー
    リモートMCPサーバーの保護
    OML4Py
    OML4R
    Property Graph
    Spatial
    ロード・バランサ
    アップグレード

    2026年4月8日水曜日

    リモートMCPサーバーのツール実行をリソース・マネージャーで制御する - オンプレミス19c編

    記事「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に含まれるcreate_RESTRICT_RUNAWAY.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 GroupRESTRICT_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サーバーのツール実行時にリソース・コンシューマ・グループを切り替えられることが確認できました。

    今回の記事は以上になります。