首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 資源管理器 完整指南

     編輯:Oracle 資料庫基礎

ORM 核心組件

  • Resource Plans:資源配置計劃,樹狀結構,同一時間僅一個生效。
  • Consumer Groups:資源消費者組,用戶/會話歸屬單位。
  • Resource Allocation Methods:每個計劃可控制的資源類型(CPU、並行度、Undo 等)。
  • Plan Directives:將計劃分配給對應消費者組的具體指令。
  • Levels (1-8):CPU 優先級,上層未用完的資源可級聯下層使用。

Oracle 9i 增強的資源控制方式

控制方式說明
CPU Method8 級優先級按百分比分配 CPU,閒置資源自動下沉。
Degree of Parallelism Limit限制組內最大並行度。
Active Session Pool with Queuing控制組內最大活躍 Session 數,超出進隊列(FIFO),並行會話視為一個單位。
Execution Time Limit設定查詢/事務最大執行秒數,超時自動終止。
Automatic Consumer Group Switching9i 新增:SWITCH_GROUP(目標組)、SWITCH_TIME(秒),超時自動切換。
Undo Pool限制組最大 Undo 空間,耗盡則等待。

管理接口與權限

  • OEM:圖形化管理。
  • DBMS_RESOURCE_MANAGER:PL/SQL API。
  • DBMS_RESOURCE_MANAGER_PRIVS:權限管理 API。
  • 相關視圖: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');

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved