SQL> select username,default_tablespace from dba_users; where default_tablespace='USERS';
使用这个表空间下的普通用户来实验
1.创建用户者组
创建一个叫OLTP_GRP
SQL> begin
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.create_consumer_group(
consumer_group => 'OLTP_GRP',
comment => '',
cpu_mth => 'ROUND-ROBIN');
exec dbms_resource_manager.submit_pending_area();
end;
SQL> /
PL/SQL procedure successfully completed.
创建一个叫BATH_GRP
SQL> begin
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.create_consumer_group(
consumer_group => 'BATH_GRP',
comment => '',
cpu_mth => 'ROUND-ROBIN');
dbms_resource_manager.submit_pending_area();
end;
2.把用户分配到用户组
把HR用户分配到OLTP_GRP
SQL> begin
dbms_resource_manager_privs.GRANT_SWITCH_CONSUMER_GROUP(
GRANTEE_NAME => 'HR',
CONSUMER_GROUP => 'OLTP_GRP',
GRANT_OPTION => false);
end;
/
用OE分配到OLTP_GRP
SQL> begin
dbms_resource_manager_privs.GRANT_SWITCH_CONSUMER_GROUP(
GRANTEE_NAME => 'OE',
CONSUMER_GROUP => 'OLTP_GRP',
GRANT_OPTION => false);
end;
/
把BI用户分配到BATH_GRP
SQL> begin
dbms_resource_manager_privs.GRANT_SWITCH_CONSUMER_GROUP(
GRANTEE_NAME => 'BI',
CONSUMER_GROUP => 'BATH_GRP',
GRANT_OPTION => false);
end;
/
用SH分配到BATH_GRP
SQL> begin
dbms_resource_manager_privs.GRANT_SWITCH_CONSUMER_GROUP(
GRANTEE_NAME => 'SH',
CONSUMER_GROUP => 'BATH_GRP',
GRANT_OPTION => false);
end;
/
将用户从用户组中移除
begin
dbms_resource_manager_privs.REVOKE_SWITCH_CONSUMER_GROUP(
REVOKEE_NAME => '用户名',
CONSUMER_GROUP => '用户组名');
end;
/
当你将用户添加到用户组的时候,但是用户默认的初始化组并没有改变
查看用户初始化默认的用户组
SQL> select username,INITIAL_RSRC_CONSUMER_GROUP from dba_users;
USERNAME INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
OPS#ORACLEOAEC DEFAULT_CONSUMER_GROUP
SCOTT DEFAULT_CONSUMER_GROUP
U1 DEFAULT_CONSUMER_GROUP
U2 DEFAULT_CONSUMER_GROUP
SYS SYS_GROUP
SYSTEM SYS_GROUP
3.将用户初始化用户组修改
begin
dbms_resource_manager.SET_INITIAL_CONSUMER_GROUP
(USER => 'HR',
CONSUMER_GROUP => 'OLTP_GRP');
end;
/
begin
dbms_resource_manager.SET_INITIAL_CONSUMER_GROUP
(USER => 'OE',
CONSUMER_GROUP => 'OLTP_GRP');
end;
/
begin
dbms_resource_manager.SET_INITIAL_CONSUMER_GROUP
(USER => 'BI',
CONSUMER_GROUP => 'BATH_GRP');
end;
/
begin
dbms_resource_manager.SET_INITIAL_CONSUMER_GROUP
(USER => 'SH',
CONSUMER_GROUP => 'BATH_GRP');
end;
/
查看用户的初始化组(此处copy过来的里面的信息时错误)
SQL> select username,INITIAL_RSRC_CONSUMER_GROUP from dba_users;
USERNAME INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------
OPS#ORACLEOAEC DEFAULT_CONSUMER_GROUP
SCOTT DEFAULT_CONSUMER_GROUP
U1 OLTP_GRP
U2 BATH_GRP
SYS SYS_GROUP
SYSTEM SYS_GROUP
4.创建并激活资源计划
BEGIN
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.create_plan('MY_DAY_PLAN','');
dbms_resource_manager.create_plan_directive(
plan => 'MY_DAY_PLAN',
group_or_subplan => 'BATH_GRP',
comment => '',
cpu_p1 => null, cpu_p2 => 20, cpu_p3 => null, cpu_p4 => null,
cpu_p5 => null, cpu_p6 => null, cpu_p7 => null, cpu_p8 => null,
parallel_degree_limit_p1 => null,
active_sess_pool_p1 => null,
queueing_p1 => null,
switch_group => null,
switch_time => null,
switch_estimate => false,
max_est_exec_time => null,
undo_pool => null,
max_idle_time => null,
max_idle_blocker_time => null,
switch_time_in_call => null
);
dbms_resource_manager.create_plan_directive(
plan => 'MY_DAY_PLAN',
group_or_subplan => 'OLTP_GRP',
comment => '',
cpu_p1 => null, cpu_p2 => 80, cpu_p3 => null, cpu_p4 => null,
cpu_p5 => null, cpu_p6 => null, cpu_p7 => null, cpu_p8 => null,
parallel_degree_limit_p1 => null,
active_sess_pool_p1 => null,
queueing_p1 => null,
switch_group => null,
switch_time => null,
switch_estimate => false,
max_est_exec_time => null,
undo_pool => null,
max_idle_time => null,
max_idle_blocker_time => null,
switch_time_in_call => null
);
dbms_resource_manager.create_plan_directive(
plan => 'MY_DAY_PLAN',
group_or_subplan => 'OTHER_GROUPS',
comment => '',
cpu_p1 => null, 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 => null,
queueing_p1 => null,
switch_group => null,
switch_time => null,
switch_estimate => false,
max_est_exec_time => null,
undo_pool => null,
max_idle_time => null,
max_idle_blocker_time => null,
switch_time_in_call => null
);
dbms_resource_manager.create_plan_directive(
plan => 'MY_DAY_PLAN',
group_or_subplan => 'SYS_GROUP',
comment => '',
cpu_p1 => 100, cpu_p2 => null, cpu_p3 => null, cpu_p4 => null,
cpu_p5 => null, cpu_p6 => null, cpu_p7 => null, cpu_p8 => null,
parallel_degree_limit_p1 => null,
active_sess_pool_p1 => null,
queueing_p1 => null,
switch_group => null,
switch_time => null,
switch_estimate => false,
max_est_exec_time => null,
undo_pool => null,
max_idle_time => null,
max_idle_blocker_time => null,
switch_time_in_call => null
);
dbms_resource_manager.submit_pending_area();
END;
激活资源计划
SQL> exec dbms_resource_manager.switch_plan('MY_DAY_PLAN');
PL/SQL procedure successfully completed.
查看当前生效的资源计划
SQL> show parameter resource_manager_plan
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
resource_manager_plan string MY_DAY_PLAN