十九、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‘,
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
語法: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_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‘);
十九、dbms_resource_manager(用於維護資源計劃,資源使用組和資源計劃指令)