• 十九、dbms_resource_manager(用于维护资源计划,资源使用组和资源计划指令)


    1、概述


    作用:用于维护资源计划,资源使用组和资源计划指令;包dbms_resource_manager_privs用于维护与资源管理相关的权限.


    2、包的组成


    1)、dbms_resource_manager.create_plan
    作用:建立资源计划
    语法:dbms_resource_manager.create_plan(plan in varchar2,comment in varchar2,cpu_mth in varchar2 default 'EMPHASIS',
    active_sess_pool_mth in varchar2 default 'ACTIVE_SESS_POOL_ABSOLUTE',
    parallele_degree_limit_mth in varchar2 default 'PARALLEL_DEGREE_LIMIT_ABSOLUTE',
    queueing_mth in varchar2 default 'FIFO_TIMEOUT');
    其中plan指定资源计划名,comment指定用户注释信息,cpu_mth指定cpu资源的分配方法,active_sess_pool_mth指定最大活动会话的分配方法,
    parallele_degree_limit_mth指定并行度的分配方法,queueing_mth指定活动会话池的队列策略类型。

    2)、dbms_resource_manager.create_simple_plan
    作用:用于建立简单资源计划,该资源计划最多包含8个资源使用组。
    语法:dbms_resource_manager.create_simple_plan(simple_plan in varchar2 default,
    consumer_group1 in varchar2 default,group1_cpu in number default,
    consumer_group2 in varchar2 default,group2_cpu in number default,
    consumer_group3 in varchar2 default,group3_cpu in number default,
    consumer_group4 in varchar2 default,group4_cpu in number default,
    consumer_group5 in varchar2 default,group5_cpu in number default,
    consumer_group6 in varchar2 default,group6_cpu in number default,
    consumer_group7 in varchar2 default,group7_cpu in number default,
    consumer_group8 in varchar2 default,group8_cpu in number default);

    3)、dbms_resource_manager.update_plan
    作用:用于更新资源计划的定义
    语法:dbms_resource_manager.update_plan(plan in varchar2,
    new_comment in varchar2 default null,new_cpu_mth in varchar2 default null,
    new_active_sess_pool_mth in varchar2 default null,new_parallel_degree_limit_mth in varchar2 default null,
    new_queueing_mth in varchar2 default null);
    其中new_comment指定用户的新的注释信息,new_cpu_mth指定cpu资源的新的分配方法,
    new_active_sess_pool_mth指定最大活动会话的新的分配方法,
    new_parallel_degree_limit_mth指定并行度的新的分配方法,
    new_queueing_mth指定活动会话池的新的队列策略类型。

    4)、dbms_resource_manager.delete_plan
    作用:用于删除资源计划
    语法:dbms_resource_manager.delete_plan(plan in varchar2);

    5)、dbms_resource_manager.delete_plan_cascade
    作用:用于删除资源计划及其所有后代(资源计划指令、子计划和资源使用组)
    语法:dbms_resource_manager.delete_plan_cascade(plan in varchar2);

    6)、dbms_resource_manager.greate_consumer_group
    作用:用于建立资源使用组
    语法:dbms_resource_manager.greate_consumer_group(consumer_group in varchar2,
    comment in varchar2,cpu_mth in varchar2 default 'ROUND-ROBIN');
    其中consumer_group指定资源使用组名。

    7)、dbms_resource_manager.update_consumer_group
    作用:用于更新资源使用组信息
    语法:dbms_resource_manager.update_consumer_group(
    consumer_group in varcahr2,new_comment in varchar2,new_cpu_mth in varchar2 default null);

    8)、dbms_resource_manager.delete_consumer_group
    作用:删除资源使用组
    语法:dbms_resource_manager.delete_consumer_group(consumer_group in varchar2);

    9)、dbms_resource_manager.create_plan_directive
    作用:建立资源计划指令
    语法:dbms_resource_manager.create_plan_directive(
    plan in varchar2,group_or_subplan in varchar2,
    comment in varchar2,cpu_p1 in number default null,
    cpu_p2 in number default null,cpu_p3 in number default null,
    cpu_p4 in number default null,cpu_p5 in number default null,
    cpu_p6 in number default null,cpu_p7 in number default null,
    cpu_p8 in number default null,
    active_sess_pool_p1 in number default unlimited,
    queueing_p1 in number default unlimited,
    switch_group in varchar2 default null,
    switch_time in number default unlimited,
    switch_estimate in boolean default false,
    max_est_exec_time in number default nulimited,
    undo_pool in number default unlimited,
    paralle1_degree_limit_p1 in number default unlimited);
    其中group_or_subplan指定资源使用组或者子计划的名称,cpu_p1指定CPU资源分配方法的第一个参数(p2是第二个参数。。。),
    active_sess_pool_p1指定最大活动会话分配方法的第一个参数,queueing_p1指定队列超时时间,
    switch_group指定到达切换时间时要切换到的资源使用组,switch_time指定切换时间,
    switch_estimate默认false,设置为true时表示通知Oracle使用执行时间估计自动切换资源使用组。
    undo_pool指定资源使用组的undo池尺寸,paralle1_degree_limit_p1指定并行度分配方法的第一个参数。

    10)、dbms_resource_manager.update_plan_directive
    作用:用于更新资源计划指令
    语法:dbms_resource_manager.update_plan_directive(
    plan in varchar2,group_or_subplan in varchar2,
    new_comment in varchar2,cpu_p1 in number default null,
    new_cpu_p2 in number default null,new_cpu_p3 in number default null,
    new_cpu_p4 in number default null,new_cpu_p5 in number default null,
    new_cpu_p6 in number default null,new_cpu_p7 in number default null,
    new_cpu_p8 in number default null,
    new_active_sess_pool_p1 in number default unlimited,
    new_queueing_p1 in number default unlimited,
    new_switch_group in varchar2 default null,
    new_switch_time in number default unlimited,
    new_switch_estimate in boolean default false,
    new_max_est_exec_time in number default nulimited,
    new_undo_pool in number default unlimited,
    new_paralle1_degree_limit_p1 in number default unlimited);
    其中new_cpu_p1指定CPU资源分配方法的第一个参数(p2是第二个参数。。。),
    new_active_sess_pool_p1指定最大活动会话分配方法的第一个参数,new_queueing_p1指定队列超时时间,
    new_switch_group指定到达切换时间时要切换到的资源使用组,new_switch_time指定切换时间,
    new_switch_estimate默认false,设置为true时表示通知Oracle使用执行时间估计自动切换资源使用组。
    new_undo_pool指定资源使用组的undo池尺寸,new_paralle1_degree_limit_p1指定并行度分配方法的第一个参数。

    11)、dbms_resource_manager.delete_plan_directive
    作用:用于删除资源计划指令
    语法:dbms_resource_manager.delete_plan_directive(plan in varchr2,group_or_subplan in varchar2);

    12)、dbms_resource_manager.create_pending_area
    作用:用于建立pending内存区,并且该内存区将用于改变资源管理对象
    语法:dbms_resource_manager.create_pending_area;

    13)、dbms_resource_manager.validate_pending_area
    作用:用于校验资源管理器的改变
    语法:dbms_resource_manager.validate_pending_area;

    14)、dbms_resource_manager.clear_pending_area
    作用:用于清除资源管理器的改变
    语法:dbms_resource_manager.clear_pending_area;

    15)、dbms_resource_manager.submit_pending_area
    作用:用于提交资源管理器的改变
    语法:dbms_resource_manager.submit_pending_area;

    16)、dbms_resource_manager..set_initial_consumer_group
    作用:用于指定用户的初始资源使用组
    语法:dbms_resource_manager.set_initial_consumer_group(user in varchar2,consumer_group in varchar2);
    其中user指定用户名,consumer_group指定用户的初始资源使用组名。

    17)、dbms_resource_manager.switch_consumer_group_for_sess
    作用:dbms_resource_manager.switch_consumer_group_for_sess(session_id in number,session_serial in number,consumer_group in varchr2);
    其中session_id指定会话ID号,session_serial指定会话序列号。

    18)、dbms_resource_manager.switch_consumer_group_for_user
    作用:用于改变特定用户所有会话的资源使用组
    语法:dbms_resource_manager.switch_consumer_group_for_user(user in varchar2,consumer_group in varchar2);

    19)、dbms_resource_manager_privs.grant_system_privilege
    作用:用于将资源管理权限授予用户或角色
    语法:dbms_resource_manager_privs.grant_system_privilege(grantee_name in varchar2,
    privilege_name in varchar2 default 'administer_resource_manager',admin_option in boolean);
    其中grantee_name指定被授权的用户或角色,privilege_name指定要授予的资源管理权限,
    admin_option指定是否可以转授资源管理权限(true为能,false为不能)
    例子:exec dbms_resource_manager_prive.grant_system_privilege('scott','administer_resource_manager',true)

    20)、dbms_resource_manager_privs.revoke_system_privilege
    作用:用于回收资源管理权限
    语法:dbms_resource_manager_privs。revoke_system_privilege(revokee_name in varchar2,privilege_name in varchar2 default 'administer_resource_manager');
    其中revoke_name指定被收回权限的用户或角色,privilege_name指定要收回的资源管理权限。
    例子:exec dbms_resource_manager_privs.revoke_system_privilege('scott','administer_resource_maneger');

    21)、dbms_resource_manager_privs.grant_switch_consumer_group
    作用:用于将用户或角色分配给特定的资源使用组
    语法:dbms_resource_manager_privs.grant_switch_consumer_group(grantee_name in varchar2,consumer_group in varchar2,grant_option in boolean);
    其中grant_option指定资源使用组转授选项
    例子:exec dbms_resource_manager_privs.grant_switch_consumer_group('scott','sys_group',true)

    22)、dbms_resource_manager_privs.revoke_switch_consumer_group
    作用:用于收回分配给用户或角色的资源使用组
    语法:dbms_resource_manager_privs.revoke_switch_consumer_group(revokee in varchar2,consumer_group in varchar2);
    例子:dbms_resource_manager_privs.revoke_switch_consumer_group('scott','sys_group');


    3、综合实例


    1)、为用户授权资源管理权限
    说明:默认情况下只有特权用户sys,dba用户system可以进行资源管理,其余用户要使用要为其授权,下面授权给scott。
    conn system/menager@test
    exec dbms_resource_manager_prive.grant_system_privilege('scott','administer_resource_manager',true)
    2)、建立各种资源对象
    说明:建立资源对象前,必须分配pending内存区,建立资源对象后,必须检查并提交pending内存区。
    (1)、建立pending内存区
    conn scott/tiger@test
    exec dbms_resource_manager.create_pending_area
    (2)、建立资源使用组
    exec dbms_resource_manager.create_consumer_group('oltp','联机事务处理组');
    exec dbms_resource_manager.create_consumer_group('dss','决策支持组');
    (3)、建立资源计划
    exec dbms_resource_manager.create_plan('day','该资源计划用于联机事务处理');
    exec dbms_resource_manager.create_plan('night','该资源计划用于决策支持');
    (4)、建立资源计划指令
    说明:建立资源计划指令必须要在资源计划和other_groups组之间的定义管理关系。
    例子:
    begin
    dbms_resource_manager.create_plan_directive(plan=>'DAY',group_or_subplan=>'sys_group',comment=>'最高级别组',cpu_p1=>100,parallel_degree_limit_p1=>3);
    dbms_resource_manager.create_plan_directive(plan=>'DAY',group_or_subplan=>'olpt',comment=>'中间级别组',cpu_p2=>80,parallel_degree_limit_p1=>1);
    dbms_resource_manager.create_plan_directive(plan=>'DAY',group_or_subplan=>'other_groups',comment=>'最低级别组',cpu_p3=>80,parallel_degree_limit_p1=>1);
    dbms_resource_manager.create_plan_directive(plan=>'NIGHT',group_or_subplan=>'sys_group',comment=>'最高级别组',cpu_p1=>100,parallel_degree_limit_p1=>20);
    dbms_resource_manager.create_plan_directive(plan=>'NIGHT',group_or_subplan=>'dss',comment=>'中间级别组',cpu_p2=>80,parallel_degree_limit_p1=>20);
    dbms_resource_manager.create_plan_directive(plan=>'NIGHT',group_or_subplan=>'other_groups',comment=>'最低级别组',cpu_p3=>80,parallel_degree_limit_p1=>20);
    end;
    (5)、验证pending内存区
    说明:验证通过则可以提交pending内存区,不通过需要清除pending内存区并重新建立资源对象。
    exec dbms_resource_manager.validate_pending_area
    (6)、提交pending内存区
    说明:提交pending内存区最终建立永久的资源管理对象。
    exec dbms_resource_manager.submit_pending_area
    3)、分配用户到资源使用组
    exec dbms_resource_manager_privs.grant_switch_consumer_group('scott','oltp',false);
    exec dbms_resource_manager_privs.grant_switch_consumer_group('scott','dss',false);
    4)、设置用户的默认资源使用组
    说明:数据库用户可以属于多个资源使用组,但在特定会话特定时刻只能使用某个资源使用组的相应资源。
    通过设置用户的默认资源使用组,可以使用户登录时自动使用相应资源使用组的资源。
    exec dbms_resource_manager.set_initial_consumer_group('scott','oltp');
    5)、激活资源计划
    说明:为了通过数据库资源管理器限制数据库用户的资源使用,必须要激活资源计划。
    alter system set resource_manager_plan=DAY where scope=momory.
    6)、改变会话或用户的资源使用组
    说明:如果用户属于多个资源使用组,初始登录时会使用默认资源使用组,为了改变特定会话的资源使用组,
    执行exec dbms_resource_manager.switch_consumer_group_for_sess(7,8,'dss');
    为了改变特定用户所有会话的资源使用组,
    执行exec dbms_resource_manager.switch_consumer_group_for_user('scott','dss');

  • 相关阅读:
    20210312
    20210311
    20210310
    例5-1
    例5-2
    例4-12-2
    例4-12
    例4-11
    例4-10
    例4-9
  • 原文地址:https://www.cnblogs.com/champaign/p/9468809.html
Copyright © 2020-2023  润新知