| 控制方式 | 說明 |
|---|---|
| CPU Method | 8 級優先級按百分比分配 CPU,閒置資源自動下沉。 |
| Degree of Parallelism Limit | 限制組內最大並行度。 |
| Active Session Pool with Queuing | 控制組內最大活躍 Session 數,超出進隊列(FIFO),並行會話視為一個單位。 |
| Execution Time Limit | 設定查詢/事務最大執行秒數,超時自動終止。 |
| Automatic Consumer Group Switching | 9i 新增:SWITCH_GROUP(目標組)、SWITCH_TIME(秒),超時自動切換。 |
| Undo Pool | 限制組最大 Undo 空間,耗盡則等待。 |
DBA_RSRC_PLANS、DBA_RSRC_CONSUMER_GROUPS、V$RSRC_PLAN 等。系統權限僅 ADMINISTER_RESOURCE_MANAGER,必須通過 PL/SQL 包授予/回收。
RESOURCE_MANAGER_PLAN 指定生效計劃,支援 ALTER SYSTEM/SESSION 動態修改。
創建兩類用戶(線上業務 OA_USER、後台管理 OA_ADMIN),分別映射到消費者組 OA_USER_ONLINE、OA_USER_ADMIN,構建計劃 OA_ORM:
BEGIN
DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA;
DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
-- 消費者組
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('OA_USER_ONLINE', '線上業務組');
DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP('OA_USER_ADMIN', '後台服務組');
-- 計劃
DBMS_RESOURCE_MANAGER.CREATE_PLAN('OA_ORM', 'OA 數據庫資源計劃');
-- 指令:線上業務優先級 1 佔 70% CPU,會話池 3000,並行度 2,最長 900 秒
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'OA_ORM', GROUP_OR_SUBPLAN => 'OA_USER_ONLINE',
CPU_P1 => 70, ACTIVE_SESS_POOL_P1 => 3000,
PARALLEL_DEGREE_LIMIT_P1 => 2, MAX_EST_EXEC_TIME => 900);
-- 指令:後台服務優先級 1 佔 10% CPU,會話池 5
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'OA_ORM', GROUP_OR_SUBPLAN => 'OA_USER_ADMIN',
CPU_P1 => 10, ACTIVE_SESS_POOL_P1 => 5,
PARALLEL_DEGREE_LIMIT_P1 => 2, MAX_EST_EXEC_TIME => 900);
-- 其他用戶走優先級 2,佔 100% 剩餘 CPU
DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
PLAN => 'OA_ORM', GROUP_OR_SUBPLAN => 'OTHER_GROUPS',
CPU_P1 => 0, CPU_P2 => 100, PARALLEL_DEGREE_LIMIT_P1 => 2);
DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
END;
/
-- 授權用戶切換組並設置初始組
BEGIN
DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP('OA_USER', 'OA_USER_ONLINE', FALSE);
DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP('OA_ADMIN', 'OA_USER_ADMIN', FALSE);
DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP('OA_USER', 'OA_USER_ONLINE');
DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP('OA_ADMIN', 'OA_USER_ADMIN');
END;
/
-- 啟用計劃
ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='OA_ORM' SCOPE=BOTH;
驗證:SELECT username, resource_consumer_group FROM v$session WHERE username IN ('OA_USER','OA_ADMIN');