DBMS_RESOURCE_MANAGER

参考文档:

Database Administrator's Guide

27 Managing Resources with Oracle Database Resource Manager

27.5.5 Creating a Resource Plan

复制代码
BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN    => 'bugdb_plan',
                                    COMMENT => 'Resource plan/method for bug users sessions');
  DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN    => 'maildb_plan',
                                    COMMENT => 'Resource plan/method for mail users sessions');
  DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN    => 'mydb_plan',
                                    COMMENT => 'Resource plan/method for bug and mail users sessions');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Online_group',
                                              COMMENT        => 'Resource consumer group/method for online bug users sessions');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Batch_group',
                                              COMMENT        => 'Resource consumer group/method for batch job bug users sessions');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Bug_Maint_group',
                                              COMMENT        => 'Resource consumer group/method for users sessions for bug db maint');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Users_group',
                                              COMMENT        => 'Resource consumer group/method for mail users sessions');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Postman_group',
                                              COMMENT        => 'Resource consumer group/method for mail postman');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'Mail_Maint_group',
                                              COMMENT        => 'Resource consumer group/method for users sessions for mail db maint');
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'bugdb_plan',
                                              GROUP_OR_SUBPLAN => 'Online_group',
                                              COMMENT          => 'online bug users sessions at level 1',
                                              MGMT_P1          => 80,
                                              MGMT_P2          => 0);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN                     => 'bugdb_plan',
                                              GROUP_OR_SUBPLAN         => 'Batch_group',
                                              COMMENT                  => 'batch bug users sessions at level 1',
                                              MGMT_P1                  => 20,
                                              MGMT_P2                  => 0,
                                              PARALLEL_DEGREE_LIMIT_P1 => 8);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'bugdb_plan',
                                              GROUP_OR_SUBPLAN => 'Bug_Maint_group',
                                              COMMENT          => 'bug maintenance users sessions at level 2',
                                              MGMT_P1          => 0,
                                              MGMT_P2          => 100);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'bugdb_plan',
                                              GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
                                              COMMENT          => 'all other users sessions at level 3',
                                              MGMT_P1          => 0,
                                              MGMT_P2          => 0,
                                              MGMT_P3          => 100);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'maildb_plan',
                                              GROUP_OR_SUBPLAN => 'Postman_group',
                                              COMMENT          => 'mail postman at level 1',
                                              MGMT_P1          => 40,
                                              MGMT_P2          => 0);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'maildb_plan',
                                              GROUP_OR_SUBPLAN => 'Users_group',
                                              COMMENT          => 'mail users sessions at level 2',
                                              MGMT_P1          => 0,
                                              MGMT_P2          => 80);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'maildb_plan',
                                              GROUP_OR_SUBPLAN => 'Mail_Maint_group',
                                              COMMENT          => 'mail maintenance users sessions at level 2',
                                              MGMT_P1          => 0,
                                              MGMT_P2          => 20);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'maildb_plan',
                                              GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
                                              COMMENT          => 'all other users sessions at level 3',
                                              MGMT_P1          => 0,
                                              MGMT_P2          => 0,
                                              MGMT_P3          => 100);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'mydb_plan',
                                              GROUP_OR_SUBPLAN => 'maildb_plan',
                                              COMMENT          => 'all mail users sessions at level 1',
                                              MGMT_P1          => 30);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'mydb_plan',
                                              GROUP_OR_SUBPLAN => 'bugdb_plan',
                                              COMMENT          => 'all bug users sessions at level 1',
                                              MGMT_P1          => 70);
  DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

  DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN    => 'MAXCAP_PLAN',
                                    COMMENT => 'Limit overall database CPU');

  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'MAXCAP_PLAN',
                                              GROUP_OR_SUBPLAN  => 'OTHER_GROUPS',
                                              COMMENT           => 'This group is mandatory',
                                              UTILIZATION_LIMIT => 90);

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

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'START_GROUP',
                                              COMMENT        => 'Sessions start here');

  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'QUARANTINE_GROUP',
                                              COMMENT        => 'Sessions switched here to quarantine them');

  DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN    => 'Quarantine_plan',
                                    COMMENT => 'Quarantine runaway queries');

  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'Quarantine_plan',
                                              GROUP_OR_SUBPLAN => 'START_GROUP',
                                              COMMENT          => 'Max CPU 10 minutes before switch',
                                              MGMT_P1          => 75,
                                              switch_group     => 'QUARANTINE_GROUP',
                                              switch_time      => 600);

  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'Quarantine_plan',
                                              GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
                                              COMMENT          => 'Mandatory',
                                              MGMT_P1          => 25);

  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'Quarantine_plan',
                                              GROUP_OR_SUBPLAN  => 'QUARANTINE_GROUP',
                                              COMMENT           => 'Limited CPU',
                                              MGMT_P2           => 100,
                                              UTILIZATION_LIMIT => 20);

  DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();

  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'APP1_GROUP',
                                              COMMENT        => 'Apps group 1');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'APP2_GROUP',
                                              COMMENT        => 'Apps group 2');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'APP3_GROUP',
                                              COMMENT        => 'Apps group 3');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'APP4_GROUP',
                                              COMMENT        => 'Apps group 4');

  DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN    => 'apps_plan',
                                    COMMENT => 'Application consolidation');

  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'apps_plan',
                                              GROUP_OR_SUBPLAN  => 'APP1_GROUP',
                                              COMMENT           => 'Apps group 1',
                                              UTILIZATION_LIMIT => 30);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'apps_plan',
                                              GROUP_OR_SUBPLAN  => 'APP2_GROUP',
                                              COMMENT           => 'Apps group 2',
                                              UTILIZATION_LIMIT => 30);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'apps_plan',
                                              GROUP_OR_SUBPLAN  => 'APP3_GROUP',
                                              COMMENT           => 'Apps group 3',
                                              UTILIZATION_LIMIT => 30);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'apps_plan',
                                              GROUP_OR_SUBPLAN  => 'APP4_GROUP',
                                              COMMENT           => 'Apps group 4',
                                              UTILIZATION_LIMIT => 30);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'apps_plan',
                                              GROUP_OR_SUBPLAN  => 'OTHER_GROUPS',
                                              COMMENT           => 'Mandatory',
                                              UTILIZATION_LIMIT => 20);

  DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'APP1_GROUP',
                                              COMMENT        => 'Group for application #1');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'APP2_OLTP_GROUP',
                                              COMMENT        => 'Group for OLTP activity in application #2');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'APP2_ADHOC_GROUP',
                                              COMMENT        => 'Group for ad-hoc queries in application #2');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'APP2_REPORT_GROUP',
                                              COMMENT        => 'Group for reports in application #2');
  DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN    => 'APPS_PLAN',
                                    COMMENT => 'Plan for managing 3 applications');
  DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN     => 'APP2_SUBPLAN',
                                    COMMENT  => 'Subplan for managing application #2',
                                    SUB_PLAN => TRUE);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN     => 'APP2_REPORTS_SUBPLAN',
                                    COMMENT  => 'Subplan for managing reports in application #2',
                                    SUB_PLAN => TRUE);

  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'APPS_PLAN',
                                              GROUP_OR_SUBPLAN  => 'APP1_GROUP',
                                              COMMENT           => 'Limit CPU for application #1 to 40%',
                                              UTILIZATION_LIMIT => 40);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'APPS_PLAN',
                                              GROUP_OR_SUBPLAN  => 'APP2_SUBPLAN',
                                              COMMENT           => 'Limit CPU for application #2 to 40%',
                                              UTILIZATION_LIMIT => 40);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'APP2_SUBPLAN',
                                              GROUP_OR_SUBPLAN  => 'APP2_OLTP_GROUP',
                                              COMMENT           => 'Limit CPU for OLTP to 90% of application #2',
                                              UTILIZATION_LIMIT => 90);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'APP2_SUBPLAN',
                                              GROUP_OR_SUBPLAN => 'APP2_REPORTS_SUBPLAN',
                                              COMMENT          => 'Subplan for ad-hoc and normal reports for application #2');
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'APP2_REPORTS_SUBPLAN',
                                              GROUP_OR_SUBPLAN  => 'APP2_ADHOC_GROUP',
                                              COMMENT           => 'Limit CPU for ad-hoc queries to 50% of application #2 reports',
                                              UTILIZATION_LIMIT => 50);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'APP2_REPORTS_SUBPLAN',
                                              GROUP_OR_SUBPLAN  => 'APP2_REPORT_GROUP',
                                              COMMENT           => 'Limit CPU for reports to 50% of application #2 reports',
                                              UTILIZATION_LIMIT => 50);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'APPS_PLAN',
                                              GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
                                              COMMENT          => 'No directives for default users');
  DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/

BEGIN
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.CREATE_PLAN(PLAN    => 'erp_plan',
                                    COMMENT => 'Resource plan/method for ERP Database');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'oltp',
                                              COMMENT        => 'Resource consumer group/method for OLTP jobs');
  DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(CONSUMER_GROUP => 'batch',
                                              COMMENT        => 'Resource consumer group/method for BATCH jobs');
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN              => 'erp_plan',
                                              GROUP_OR_SUBPLAN  => 'oltp',
                                              COMMENT           => 'OLTP sessions',
                                              MGMT_P1           => 60,
                                              SWITCH_GROUP      => 'batch',
                                              SWITCH_TIME       => 3,
                                              UNDO_POOL         => 200,
                                              SWITCH_FOR_CALL   => TRUE,
                                              SESSION_PGA_LIMIT => 20);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN                   => 'erp_plan',
                                              GROUP_OR_SUBPLAN       => 'batch',
                                              COMMENT                => 'BATCH sessions',
                                              MGMT_P1                => 30,
                                              PARALLEL_SERVER_LIMIT  => 8,
                                              PARALLEL_QUEUE_TIMEOUT => 600,
                                              MAX_EST_EXEC_TIME      => 3600);
  DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(PLAN             => 'erp_plan',
                                              GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
                                              COMMENT          => 'mandatory',
                                              MGMT_P1          => 10);
  DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA();
  DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/

END

相关推荐
@LetsTGBot搜索引擎机器人31 分钟前
2025 Telegram 最新免费社工库机器人(LetsTG可[特殊字符])搭建指南(含 Python 脚本)
数据库·搜索引擎·机器人·开源·全文检索·facebook·twitter
计算机毕设VX:Fegn08951 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
冉冰学姐1 小时前
SSM校园排球联赛管理系统y513u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架应用·开题报告、
Tony Bai2 小时前
【分布式系统】03 复制(上):“权威中心”的秩序 —— 主从架构、一致性与权衡
大数据·数据库·分布式·架构
wb043072013 小时前
SQL工坊不只是一个ORM框架
数据库·sql
至善迎风3 小时前
Redis完全指南:从诞生到实战
数据库·redis·缓存
QQ_4376643145 小时前
Redis协议与异步方式
数据库·redis·bootstrap
纪莫5 小时前
技术面:MySQL篇(InnoDB事务执行过程、事务隔离级别、事务并发异常)
数据库·java面试⑧股
Nerd Nirvana5 小时前
数据库模型全景:从原理到实践的系统性指南
数据库·oracle·电力行业
SelectDB5 小时前
从 Greenplum 到 Doris:集群缩减 2/3、年省数百万,度小满构建超大规模数据分析平台经验
数据库·数据分析·apache