資源管理器

一、資源管理器(DRM)由三個要素組成:

資源消費羣(resource_consumer_group)
資源計劃(resource_plan)
資源計劃指令(resource_plan_directive)
 
執行與DRM有關的操作,必須具有 administer_resource_manager 系統權限。
 
二、未決域(pending area)
DRM的三個要素都必須創建在未決域中,然後提交。
 
1、創建未決域
exec dbms_resource_manager.create_pending_area;
 
2、驗證未決域
exec dbms_resource_manager.validate_pending_area;
驗證域中的內容是否合法。
 
3、清除未決域
exec dbms_resource_manager.clear_pending_area;
執行此命令後,未決域以及未決域中的內容一起被刪除。
 
4、提交未決域
exec dbms_resource_manager.submit_pending_area;
執行此命令後,相當於執行了驗證、提交、清除三個命令。未決域中的內容會被存儲在數據字典中,等待啓用。
 
三、資源消費羣
一個用戶可以隸屬於多個消費羣,但一個會話同一時間只能隸屬於一個消費羣。
ORACLE 已經預定義了4個消費羣:
 
default_consumer_group :未分配消費羣的用戶和會話。
other_groups :當前的資源計劃中沒有明確指定資源分配所有消費羣。任何一個資源計劃中都必須包含此羣。
sys_group 和 low_group :用於執行系統計劃的消費羣。
 
1、創建、更新、刪除消費羣()
 
創建:
exec dbms_resource_manager.create_cosumer_group('羣名','註釋');
 
更新:
exec dbms_resource_manager.update_consumer_group('羣名','註釋');
 
刪除:
exec dbms_resource_manager.delete_consumer_group('羣名');
執行此命令後,隸屬於此羣的用戶和會話將自動轉到 default_consumer_group.
 
 
2、將用戶會話分配給消費羣(消費羣映射)
可以基於會話的屬性將會話動態分配給消費羣,成爲消費羣映射。
 
(1)設定映射:
dbms_resource_manager.set_consumer_group_mapping(
attribute => oracle_user,
value => 'user1,
consumer_group => 'low_group');
 
如上,當會話的oracle用戶屬性值爲user1時,就將之分配給消費羣low_group。
 
(2)設定映射優先權:
由於可能會出現某會話的兩個屬性分別滿足兩個不同的映射規則,那麼該服從哪個規則呢?——可以設定各個屬性的優先權,服從優先級高的屬性。
dbms_resource_manager.set_mapping_priority(
oracle_user => 1,
client_os_user => 2);
 
(3)動態轉換會話的消費羣
 
基於會話的唯一標識轉換消費羣:(會話唯一標識由 session_id 和 session_serial 共同組成,這兩個參數的值在 v$session 視圖中)。
dbms_resource_manager.switch_consumer_group_for_sess(
session_id => '56',
session_serial => '106',
consumer_group => 'low_group');
 
基於會話所屬的用戶轉換消費羣:(將用戶下的所有會話轉換消費羣)
dbms_resource_manager.switch_consumer_group_for_user(
user => 'user1',
consumer_group => 'low_group');
 
用戶轉換自己當前會話的消費羣:(使用 dbms_session 包)
dbms_session.switch_current_consumer_group(
new_consumer_group => 'low_group');
 
轉換自己當前會話的消費羣需要特定權限:
dbms_resource_manager_privs.grant_switch_consumer_group(
grantee_name => 'user1',
consumer_group => 'low_group',
grant_option => 'false');
 
撤銷此權限:
dbms_resource_manager_privs.revoke_switch_consumer_group(
grantee_name => 'user1',
consumer_group => 'low_group');
 
四、資源計劃
分爲簡單資源計劃和複雜資源計劃。
 
1、簡單資源計劃
有如下特點:
(1)三要素在一個過程中定義。
(2)只能分配cpu資源。
(3)只能使用emphasis方式分配cpu資源(即百分比)。
(4)分配的消費羣最大數爲8個。
 
創建:
dbms_resource_manager.create_simple_plan(
simple_plan => '計劃名',
consumer_group1 => '消費羣1',
group1_cpu => 50,
consumer_group2 => '消費羣2',
group2_cpu => 50);
 
 
2、複雜資源計劃
特點:
(1)三要素必須單獨創建。
(2)可以嵌套子計劃。
 
創建:
dbms_resource_manager.create_plan(
plan => '計劃名',
comment => '註釋');
 
3、修改資源計劃:
dbms_resource_manager.update_plan(
plan => '計劃名',
new_屬性 => '新值');
 
4、刪除資源計劃:
dbms_resource_manager.delete_plan('計劃名');
dbms_resource_manager.delete_plan_cascade('計劃名');
加上cascade參數,刪除計劃內的要素。
 
五、計劃指令
 
創建:
dbms_resource_manager.create_plan_directive(
plan => '計劃名',
group_or_subplan => '消費羣或子計劃',
資源限制參數);
 
注:可以爲子計劃創建指令,但只能分配cpu資源。
 
更新:
dbms_resource_manager.update_plan_directive(
兩個必需參數,
new_屬性 => '新值');
 
刪除:
dbms_resource_manager.delete_plan_directive(
兩個必需參數);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章