リソース・マネージャの管理

リソース・マネージャの管理用パッケージ

管理権限
  • データベース・リソース・マネージャを管理するには、システム権限ADMINISTER_RESOURCE_MANAGERが必要である。
  • 通常、データベース管理者(DBA)は、DBAロール(またはそれと等価のロール)の一部として、ADMINオプション付きでこの権限を持っている。
  • ADMINオプションを持つ管理者は、必要に応じて管理権限を他のユーザーまたはロールに付与できる。
  • DBMS_RESOURCE_MANAGER_PRIVSを使用して管理権限を他のユーザーまたはロールに付与できる。

DBMS_RESOURCE_MANAGER_PRIVSの仕様

プロシージャ 説明
GRANT_SYSTEM_PRIVILEGE ユーザーまたはロールに、ADMINISTER_RESOURCE_MANAGERシステム権限を付与する。
REVOKE_SYSTEM_PRIVILEGE ユーザーまたはロールから、ADMINISTER_RESOURCE_MANAGERシステム権限を取り消す。
GRANT_SWITCH_CONSUMER_GROUP ユーザー、ロールまたはPUBLICに、指定したリソース・コンシューマ・グループに切り替える許可を付与する。
REVOKE_SWITCH_CONSUMER_GROUP ユーザー、ロールまたはPUBLICから、指定したリソース・コンシューマ・グループに切り替える許可を取り消す。
EXEC DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SYSTEM_PRIVILEGE -
    (GRANTEE_NAME => 'scott', PRIVILEGE_NAME => 'ADMINISTER_RESOURCE_MANAGER', -
     ADMIN_OPTION => FALSE);
DBMS_RESOURCE_MANAGERパッケージ
プロシージャ 説明
CREATE_SIMPLE_PLAN 最大8個のコンシューマ・グループを含む単純なリソース・プランを1ステップで作成する。
CREATE_PLAN リソース・プランを作成し、その割当て方法を指定する。
UPDATE_PLAN リソース・プランを更新する。
DELETE_PLAN リソース・プランとそのディレクティブを削除
DELETE_PLAN_CASCADE リソース・プランとそのすべての子を削除
CREATE_CONSUMER_GROUP リソース・コンシューマ・グループを作成
UPDATE_CONSUMER_GROUP コンシューマ・グループを更新
DELETE_CONSUMER_GROUP コンシューマ・グループを削除
CREATE_PLAN_DIRECTIVE プラン内のリソース・コンシューマ・グループまたはサブプランにリソースを割り当てるリソース・プラン・ディレクティブを指定
UPDATE_PLAN_DIRECTIVE プラン・ディレクティブを更新
DELETE_PLAN_DIRECTIVE プラン・ディレクティブを削除
CREATE_PENDING_AREA プラン・スキーマを変更できるペンディング・エリア(スクラッチ領域)を作成
VALIDATE_PENDING_AREA プラン・スキーマに対する保留中の変更の妥当性をチェック
CLEAR_PENDING_AREA 保留中のすべての変更をペンディング・エリアから消去する
SUBMIT_PENDING_AREA プラン・スキーマに対してすべての変更を発行
SET_INITIAL_CONSUMER_GROUP このプロシージャは廃止された。SET_CONSUMER_GROUP_MAPPINGプロシージャの使用を薦める
SWITCH_CONSUMER_GROUP_FOR_SESS 特定セッションのコンシューマ・グループを切り替える
SWITCH_CONSUMER_GROUP_FOR_USER 特定ユーザーに属しているすべてのセッションのコンシューマ・グループを切り替える
SET_CONSUMER_GROUP_MAPPING セッションをコンシューマ・グループにマッピングする
SET_CONSUMER_GROUP_MAPPING_PRI セッション属性のマッピングの優先順位を設定する

リソース・マネージャの管理

作成要件

リソースプラン:MY_PLAN

グループ CPU割当て アクティブ・セッション・プール 自動切替え 最大見積り実行時間 UNDOプール
OLTP_GRP レベル1:80% - 切替え先:batch 時間:3 短い問合せ:TRUE - サイズ: 200KB
BATCH_GRP レベル2:100% 5,タイムアウト: 600 - - -
OTHER_GROUPS レベル3:100% - - - -
ペンディング・エリアの管理

プラン・スキーマを作成または変更する場合は、最初にペンディング・エリアを作成する必要がある。これは、段階的な変更を加え、アクティブにする前に妥当性をチェックできるスクラッチ領域である。
ペンディング・エリアの作成

EXEC DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;

変更の妥当性チェック
EXEC DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;

変更の発行
EXEC DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;

ペンディング・エリアの消去
EXEC DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA;
リソース・プランの管理

プランの作成

EXEC DBMS_RESOURCE_MANAGER.CREATE_PLAN( -
    PLAN => 'MY_PLAN', -
    COMMENT => 'Resource plan/method for My Database', -
    CPU_MTH => 'EMPHASIS' -
);

CPU_MTH
  • デフォルトの方法EMPHASISは、コンシューマ・グループ間でのCPUの分配方法の指定にパーセンテージを使用する複数レベルのプラン用である。
  • RATIOは、CPUの分配方法の指定に割合を使用する単一レベルのプラン用である。

プランの更新

EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN(PLAN => 'MY_PLAN',NEW_COMMENT => NULL);

プランの削除
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN(PLAN => 'MY_PLAN');
リソース・コンシューマ・グループの管理

常にデータ・ディクショナリ内に存在する2つの特別なコンシューマ・グループがあり、このグループは変更または削除できない。

  • DEFAULT_CONSUMER_GROUP
  • OTHER_GROUPS

コンシューマ・グループの作成

EXEC DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'OLTP_GRP', COMMENT => '', CPU_MTH => 'ROUND-ROBIN');

CPU_MTH
  • デフォルトはROUND-ROBINで、ラウンドロビン・スケジューラを使用して、セッションの適切な実行を保証する。
  • RUN-TO-COMPLETIONでは、最大のアクティブ時間のセッションを他のセッションより先にスケジュールすることを指定する。

コンシューマ・グループの更新

EXEC DBMS_RESOURCE_MANAGER.UPDATE_CONSUMER_GROUP(CONSUMER_GROUP => 'OLTP_GRP', NEW_CPU_MTH => 'RUN-TO-COMPLETION');

コンシューマ・グループの削除
EXEC DBMS_RESOURCE_MANAGER.DELETE_CONSUMER_GROUP(CONSUMER_GROUP => 'OLTP_GRP');
リソース・プラン・ディレクティブの管理

リソース・プラン・ディレクティブの作成

BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
        PLAN => 'MY_PLAN',
        GROUP_OR_SUBPLAN => 'OLTP_GRP',
        COMMENT => '',
        CPU_P1 => 80, CPU_P2 => NULL, CPU_P3 => 100, CPU_P4 => NULL,
        CPU_P5 => NULL, CPU_P6 => NULL, CPU_P7 => NULL, CPU_P8 => NULL,
        PARALLEL_DEGREE_LIMIT_P1 => NULL,
        ACTIVE_SESS_POOL_P1 => 10,
        QUEUEING_P1 => 600,
        SWITCH_GROUP => 'BATCH_GRP',
        SWITCH_TIME => 3,
        SWITCH_ESTIMATE => TRUE,
        MAX_EST_EXEC_TIME => NULL,
        UNDO_POOL => 200,
        MAX_IDLE_TIME => NULL,
        MAX_IDLE_BLOCKER_TIME => NULL,
        SWITCH_TIME_IN_CALL => NULL
    );
END;

リソース・プラン・ディレクティブの更新
EXEC DBMS_RESOURCE_MANAGER.UPDATE_PLAN_DIRECTIVE(PLAN => 'MY_PLAN',GROUP_OR_SUBPLAN => 'OLTP_GRP',NEW_CPU_P1 => 75);

リソース・プラン・ディレクティブの更新
EXEC DBMS_RESOURCE_MANAGER.DELETE_PLAN_DIRECTIVE(PLAN => 'MY_PLAN',GROUP_OR_SUBPLAN => 'OLTP_GRP');
コンシューマ・グループとセッションのマッピング

セッションのマッピングは、セッションとコンシューマ・グループとの一致方法を決定する、属性とコンシューマ・グループとの組合せのセットで構成される。
DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPINGプロシージャの属性

属性 タイプ 説明
ORACLE_USER ログイン Oracle Databaseユーザー名。
SERVICE_NAME ログイン クライアントによって接続の確立に使用されたサービス名。
CLIENT_OS_USER ログイン ログインしているクライアントのオペレーティング・システム・ユーザー名。
CLIENT_PROGRAM ログイン サーバーへのログインに使用されるクライアント・プログラム名。
CLIENT_MACHINE ログイン クライアントが接続に使用しているマシン名。
MODULE_NAME ランタイム 現在実行されているアプリケーション内のモジュール名。
MODULE_NAME_ACTION ランタイム 現行モジュールと処理の組み合わせ。
SERVICE_MODULE ランタイム サービス名およびモジュール名の組合せ。
SERVICE_MODULE_ACTION ランタイム サービス名、モジュール名および処理名の組合せ。

コンシューマ・グループとセッションのマッピング設定

BEGIN
    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
        ATTRIBUTE => DBMS_RESOURCE_MANAGER.ORACLE_USER,
        VALUE => 'TOM', 
        CONSUMER_GROUP => 'OLTP_GRP');
END;

属性マッピングの優先順位の作成
BEGIN
    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING_PRI(
        EXPLICIT => 1,
        SERVICE_MODULE_ACTION => 2,
        SERVICE_MODULE => 3,
        MODULE_NAME_ACTION => 4,
        MODULE_NAME => 5,
        SERVICE_NAME => 6,
        ORACLE_USER => 7,
        CLIENT_PROGRAM => 8,
        CLIENT_OS_USER => 9,
        CLIENT_MACHINE => 10);
END;
作成要件に従ってMY_PLANの作成
BEGIN
    DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA();
    DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

    DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN => 'MY_PLAN', COMMENT => NULL);

    DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'OLTP_GRP', COMMENT => NULL);
    DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'BATCH_GRP', COMMENT => NULL);

    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
        PLAN => 'MY_PLAN', 
        GROUP_OR_SUBPLAN => 'OLTP_GRP', COMMENT => NULL, CPU_P1 => 80, 
        SWITCH_GROUP => 'BATCH_GRP', SWITCH_TIME => 3,SWITCH_ESTIMATE => TRUE, 
        UNDO_POOL => 200
    );

    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'MY_PLAN', 
        GROUP_OR_SUBPLAN => 'BATCH_GRP', COMMENT => NULL, CPU_P2 => 100, 
        ACTIVE_SESS_POOL_P1 => 5, QUEUEING_P1 => 600, 
        MAX_EST_EXEC_TIME => 3600);

    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN => 'MY_PLAN', 
        GROUP_OR_SUBPLAN => 'OTHER_GROUPS', COMMENT => NULL, CPU_P3 => 100);

    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING_PRI(
        EXPLICIT => 1,
        SERVICE_MODULE_ACTION => 2,
        SERVICE_MODULE => 3,
        MODULE_NAME_ACTION => 4,
        MODULE_NAME => 5,
        SERVICE_NAME => 6,
        ORACLE_USER => 7,
        CLIENT_PROGRAM => 8,
        CLIENT_OS_USER => 9,
        CLIENT_MACHINE => 10);

    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
        ATTRIBUTE => DBMS_RESOURCE_MANAGER.ORACLE_USER,
        VALUE => 'TOM', 
        CONSUMER_GROUP => 'OLTP_GRP');

    DBMS_RESOURCE_MANAGER.SET_CONSUMER_GROUP_MAPPING(
        ATTRIBUTE => DBMS_RESOURCE_MANAGER.ORACLE_USER,
        VALUE => 'BAT', 
        CONSUMER_GROUP => 'BATCH_GRP');

    DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
    DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();

    DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP(
            GRANTEE_NAME => 'TOM',
            CONSUMER_GROUP => 'OLTP_GRP',
            GRANT_OPTION => FALSE
        );
       DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP(
            GRANTEE_NAME => 'BAT',
            CONSUMER_GROUP => 'BATCH_GRP',
            GRANT_OPTION => FALSE
        );
    DBMS_RESOURCE_MANAGER.SWITCH_PLAN('MY_PLAN');

END;
リソース・マネージャの使用可能化

データベース・リソース・マネージャを使用可能にするには、RESOURCE_MANAGER_PLAN初期化パラメータを設定する。
ALTER SYSTEM句

ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='MY_PLAN' SCOPE=BOTH;

リソース・マネージャを解除する
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='' SCOPE=BOTH;

DBMS_RESOURCE_MANAGER.SWITCH_PLANを使用
EXEC DBMS_RESOURCE_MANAGER.SWITCH_PLAN(PLAN_NAME => 'MY_PLAN' , SID => 'TESTDB' );
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License