十九、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');

posted @ 2018-08-13 16:03  踏叶乘风  阅读(1418)  评论(0编辑  收藏  举报