更新计划-使用者组可用最大撤销表空间
BEGIN
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.update_plan_directive(
plan => 'MAX_PLAN',
group_or_subplan => 'MAX_GROUP',
new_comment => '',
new_cpu_p1 => 90, new_cpu_p2 => 100, new_cpu_p3 => NULL, new_cpu_p4 => NULL,
new_cpu_p5 => NULL, new_cpu_p6 => NULL, new_cpu_p7 => NULL, new_cpu_p8 => NULL,
new_parallel_degree_limit_p1 => NULL,
new_active_sess_pool_p1 => NULL,
new_queueing_p1 => NULL,
new_switch_group => NULL,
new_switch_time => NULL,
new_switch_estimate => false,
new_max_est_exec_time => NULL,
new_undo_pool => 3,--指定为3KB
new_max_idle_time => NULL,
new_max_idle_blocker_time => NULL,
new_switch_time_in_call => NULL
);
dbms_resource_manager.submit_pending_area();
END;
--修改使用者组可用最大撤销表空间
--指定使用者组可以生成的最大还原空间
--如果超出则报如下异常
更新计划-指定最大估计执行时间
BEGIN
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.update_plan_directive(
plan => 'MAX_PLAN',
group_or_subplan => 'MAX_GROUP',
new_comment => '',
new_cpu_p1 => 90, new_cpu_p2 => 100, new_cpu_p3 => NULL, new_cpu_p4 => NULL,
new_cpu_p5 => NULL, new_cpu_p6 => NULL, new_cpu_p7 => NULL, new_cpu_p8 => NULL,
new_parallel_degree_limit_p1 => NULL,
new_active_sess_pool_p1 => NULL,
new_queueing_p1 => NULL,
new_switch_group => NULL,
new_switch_time => NULL,
new_switch_estimate => false,
new_max_est_exec_time => 1,
new_undo_pool => NULL,
new_max_idle_time => NULL,
new_max_idle_blocker_time => NULL,
new_switch_time_in_call => NULL
);
dbms_resource_manager.submit_pending_area();
END;
--指定最大估计执行时间。如果数据库估计 SQL 会超过指定的限制, 将不执行 SQL, 并返回一个错误。
--如果超出则报如下异常
更新计划-修改最大会话数的限制
BEGIN
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.update_plan_directive(
plan => 'MAX_PLAN',
group_or_subplan => 'MAX_GROUP',
new_comment => '',
new_cpu_p1 => 90, new_cpu_p2 => 100, new_cpu_p3 => NULL, new_cpu_p4 => NULL,
new_cpu_p5 => NULL, new_cpu_p6 => NULL, new_cpu_p7 => NULL, new_cpu_p8 => NULL,
new_parallel_degree_limit_p1 => NULL,
new_active_sess_pool_p1 => 2,--最大会话数
new_queueing_p1 => 1,-- 激活队列中等待的时间
new_switch_group => NULL,
new_switch_time => NULL,
new_switch_estimate => false,
new_max_est_exec_time => NULL,
new_undo_pool => NULL,
new_max_idle_time => NULL,
new_max_idle_blocker_time => NULL,
new_switch_time_in_call => NULL
);
dbms_resource_manager.submit_pending_area();
END;
--指定对使用者组中同时处于活动状态的最大会话数的限制。其它所有会话将在激活队列中等待。
--同时打开长时间三个大作业跑跑 报错。。
如果激活队列中等待的时间设置成ulimited 那就永远挂了
更新计划-修改最大空闲时间
BEGIN
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.update_plan_directive(
plan => 'MAX_PLAN',
group_or_subplan => 'MAX_GROUP',
new_comment => '',
new_cpu_p1 => 90, new_cpu_p2 => 100, new_cpu_p3 => NULL, new_cpu_p4 => NULL,
new_cpu_p5 => NULL, new_cpu_p6 => NULL, new_cpu_p7 => NULL, new_cpu_p8 => NULL,
new_parallel_degree_limit_p1 => NULL,
new_active_sess_pool_p1 => NULL,
new_queueing_p1 => NULL,
new_switch_group => NULL,
new_switch_time => NULL,
new_switch_estimate => false,
new_max_est_exec_time => NULL,
new_undo_pool => NULL,
new_max_idle_time => 1,
new_max_idle_blocker_time => 3,
new_switch_time_in_call => NULL
);
dbms_resource_manager.submit_pending_area();
END;
--最大空闲时间的标准 执行前一条语句后空闲的时间。 附加的是 是否影响其他会话 产生死锁
--空闲时间:指的是服务器进程空闲时间而不是用户进程空闲时间。
--max_idle_blocker_time的先决条件是设置了max_idle_time???
--v$session SECONDS_IN_WAIT 如果wait_class 是idle 则是空闲的时间
更新计划-修改最大并行度
BEGIN
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.update_plan_directive(
plan => 'MAX_PLAN',
group_or_subplan => 'MAX_GROUP',
new_comment => '',
new_cpu_p1 => 90, new_cpu_p2 => 100, new_cpu_p3 => NULL, new_cpu_p4 => NULL,
new_cpu_p5 => NULL, new_cpu_p6 => NULL, new_cpu_p7 => NULL, new_cpu_p8 => NULL,
new_parallel_degree_limit_p1 => 2,
new_active_sess_pool_p1 => NULL,
new_queueing_p1 => NULL,
new_switch_group => NULL,
new_switch_time => NULL,
new_switch_estimate => false,
new_max_est_exec_time => NULL,
new_undo_pool => NULL,
new_max_idle_time => NULL,
new_max_idle_blocker_time => NULL,
new_switch_time_in_call => NULL
);
dbms_resource_manager.submit_pending_area();
END;
启用并行需完成如下操作:
检查并行执行服务池是否开启
SQL> show parameter parallel_max
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
parallel_max_servers integer 20
检查自动指定并行度参数是否开启(或使用hint指定)
SQL> show parameter parallel_auto
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
parallel_automatic_tuning boolean FALSE
alter table tab_name parallel[noparallel];为表开启并行
alter session enable parallel dml;为指定会话开启并行。
更新计划-修改使用者组切换指令
BEGIN
dbms_resource_manager.clear_pending_area();
dbms_resource_manager.create_pending_area();
dbms_resource_manager.update_plan_directive(
plan => 'MAX_PLAN',
group_or_subplan => 'MAX_GROUP',
new_comment => '',
new_cpu_p1 => 90, new_cpu_p2 => 100, new_cpu_p3 => NULL, new_cpu_p4 => NULL,
new_cpu_p5 => NULL, new_cpu_p6 => NULL, new_cpu_p7 => NULL, new_cpu_p8 => NULL,
new_parallel_degree_limit_p1 => NULL,
new_active_sess_pool_p1 => NULL,
new_queueing_p1 => NULL,
new_switch_group => 'KILL_SESSION',-- 'CANCEL_SQL',
new_switch_time => NULL,
new_switch_estimate => false,
new_max_est_exec_time => NULL,
new_undo_pool => NULL,
new_max_idle_time => NULL,
new_max_idle_blocker_time => NULL,
new_switch_time_in_call => 6
);
dbms_resource_manager.submit_pending_area();
END;
--指定在采取所选操作之前会话在使用者组中可以执行的最长时间。要选择所采取的操作, 可以选择中断会话, 取消当前 SQL 操作, 或者切换到其它使用者组。如果选择切换到其它使用者组, 请使用 '调用后切换回原始组' 复选框指定是否在调用后切换回来。选择调用后切换回原始组, 对于中间层服务器使用会话池的 3 层应用程序非常有用。
-- switch_time_in_call 一个会话的最长执行时间
--通过对执行时间的限制 进一步操作是否切换或终止
超出限定时间则报错:
ORA-00040: 已超过活动时间限制 - 调用中止
ORA-06512: 在 line 7
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21993926/viewspace-667687/ ,如需转载,请注明出处,否则将追究法律责任。