oracle resource manager (ORM)舉例

lixianlinde發表於2013-01-03

http://database.chinaunix.net/a2010/0409/871/000000871380_1.shtml

什麼是Oracle Resource Manager

    Oracle Resource Manager是Oracle8i開始提供的資料庫元件,目的是可以讓Oracle定義資料庫資源的利用,通過監控資料庫各Users的資源利用情況, 

    可以合理的調整資料庫的使用.資料庫是執行在作業系統之上的一個應用,OS為資料庫分配了資源,但OS不能細粒度的控制資料庫怎樣去使用這些 

    資源,ORM可以幫助DBA合理規劃這些資源.ORM的使用不會影響資料庫的效能.

    跟OS的資源管理相比較,ORM(Oracle Resource Manager)可以提供下列特性:

    防止資源的過度消耗:ORM可以從session級別控制CPU、Undo等系統資源的過度消耗.通過定義使用比例的方法防止CPU被某個session獨佔耗光; 

    合理排程系統資源:單獨控制各session的資源利用率,可以將寶貴的系統資源(比如CPU)按照比例分配給不同的使用者組,給一些重要的應用提供 

    足夠的資源,回收浪費的資源; 

    控制資料庫資源:通過ORM,控制資料庫的有限資源(Undo,CPU等)的分配方式; 

    相容作業系統的資源調整:在一個多CPU系統中,ORM相容OS排程分配,均衡分配CPU的使用;

    Oracle Resource Manager相關內容

    ORM由一系列的元件組成,這些元件的相互配合可以完成比較複雜的資料庫資源分配.

    Resource Plans:定義資源配置計劃,plans是一個樹形結構的組織,可以建立多個plans,但同時只能有一個plan啟用被系統使用; 
    Resource consumer groups:資源組定義 
    Resource allocation method:每個計劃中可以定義和控制分配的資料庫資源; 
    Resource plans directives:將每個計劃配置分配到相應的資源組; 
    levels:定義了CPU的優先順序別,目前可以支援8個級別,當上級的group沒有消耗分配的CPU,可以順延到下個level使用;

    Oracle 9i中ORM(Oracle Resource Manager)

    9i對ORM進行了增強,在8i的基礎上提供了多種可控的Oracle資源.

    CPU Method(8i提供)

    通過該方法可以對非常稀缺的CPU資源進行分配,Oracle提供了8個levels控制CPU的使用,對不同的group按照百分比分配不同比例的CPU;上一級沒有使用完的CPU 資源會自動過度到下個level的group繼續使用;

    Degree of Parallelism Limit(8i提供)

    限制每個資源組並行操作的最大並行度;

    Active Session Pool with Queuing

    控制每個resource group可以建立的最大sessions,這裡指活動的session,如果一個session進入inactive狀態,會自動退出session pool,讓一下session進入 

    session pool,Oracle預設利用FIFO(First In First Out)的原則維護active session pool佇列.如果一個並行的會話進入佇列,Oracle會預設其多個session為一個獨立的session.

    Execution Time Limit 

  有時間我們需要防止一個長查詢或大事務耗光系統資源,可通過該引數定義大型查詢或事務的執行時間,如果超過了設定的時間,Oracle會自動終止查詢或事物,以秒為單位.

    Automatic Consumer Group Switching

    8i中允許session或user可以在資源組之間手動切換,9i增強了這一功能,允許其自動切換。9i提供了兩個引數控制資源組的自動替換:

    SWITCH_GROUP:定義session或user切換的新的group; 

    SWITCH_TIME:以秒為單位,定義了session或user在原group中任務多長時間後還沒結束就可以切換到新的group;

    Undo Pool

    控制每個group可用使用的最大Undo空間,如果事務執行的過程中發現Undo消耗殆盡,後續事務會持續等待直到有可用的Undo空間.

    ORM的管理

    OEM:圖形化的ORM管理介面,支援建立、監控ORM等操作; 
    DBMS_RESOURCE_MANAGER:ORM的PL/SQL API; 
    DBMS_RESOURCE_MANAGER_PRIVS:ORM許可權管理API 
    ORM相關檢視: 
    DBA_RSRC_PLANS 
    DBA_RSRC_CONSUMER_GROUPS 
    DBA_RSRC_PLAN_DIRECTIVES 
    DBA_RSRC_CONSUMER_GROUP_PRIVS 
    V$RSRC_PLAN 
    V$RSRC_CONSUMER_GROUP

    ORM(Oracle Resource Manager)的許可權

    ORM只有ADMINISTER_RESOURCE_MANAGER系統許可權,不支援通過grant,revoke的管理方式;必須通過DBMS_RESOURCE_MANAGER_PRIVS進行GRANT和REVOKE;

    Oracle中使用ORM(Oracle Resource Manager)

    Oracle有一個跟ORM相關的引數:RESOURCE_MANAGER_PLAN,定義好了RESOURCE PLAN之後,必須設定此引數以啟用ORM,只有一個RESOURCE PLAN可以啟用使用,此引數支援ALTER SESSION/ALTER SYSTEM動態修改.

ORM舉例


    REM 建立測試使用者

    CREATE USER OA_USER IDENTIFIED BY iv1234
    DEFAULT TABLESPACE USERS
    TEMPORARY TABLESPACE TEMP
    ACCOUNT UNLOCK;

    CREATE USER OA_ADMIN IDENTIFIED BY iv1234
    DEFAULT TABLESPACE USERS
    TEMPORARY TABLESPACE TEMP    ACCOUNT UNLOCK;

    GRANT CONNECT TO OA_USER;
    GRANT CONNECT TO OA_ADMIN;

    –建立相關的組

    BEGIN
  --清楚ORM臨時區域
  DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA;
  --建立新的ORM臨時區域
  DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
 DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
   CONSUMER_GROUP  =>'OA_USER_ONLINE',
   COMMENT         =>'建立OA系統的資源管理組');


 DBMS_RESOURCE_MANAGER.CREATE_CONSUMER_GROUP(
   CONSUMER_GROUP  =>'OA_USER_ADMIN',
   COMMENT         =>'OA 系統的後臺服務資源組');

  --建立PLAN

  DBMS_RESOURCE_MANAGER.CREATE_PLAN(
   PLAN             =>'OA_ORM',
   COMMENT          =>'OA 資料庫資源計劃');

    --建立PLAN DIRECTIVES

    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    PLAN               =>'OA_ORM',      GROUP_OR_SUBPLAN   =>'OA_USER_ONLINE',      COMMENT            =>'oa線上使用者資源控制計劃',
    CPU_P1             =>70,
    CPU_P2             =>0,
    ACTIVE_SESS_POOL_P1 =>3000,
    PARALLEL_DEGREE_LIMIT_P1 =>2,
    MAX_EST_EXEC_TIME =>900);

    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    PLAN               =>'OA_ORM',
    GROUP_OR_SUBPLAN   =>'OA_USER_ADMIN',
    COMMENT            =>'oa線上使用者後臺服務資源控制計劃',
    CPU_P1             =>10,
    CPU_P2             =>0,
    ACTIVE_SESS_POOL_P1 =>5,
    PARALLEL_DEGREE_LIMIT_P1 =>2,
    MAX_EST_EXEC_TIME =>900);

    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
    PLAN               =>'OA_ORM',      GROUP_OR_SUBPLAN   =>'OTHER_GROUPS',      COMMENT            =>'其他應用的資源計劃',
    CPU_P1             =>0,
    CPU_P2             =>100,
    PARALLEL_DEGREE_LIMIT_P1 =>2);

    DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
    DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;

    END;
    /

    –初始化OA_USER、OA_ADMIN的資源組

    BEGIN

    DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP(
    GRANTEE_NAME =>'OA_USER',
    CONSUMER_GROUP=>'OA_USER_ONLINE',
    GRANT_OPTION=>FALSE);

    DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP(
    GRANTEE_NAME =>'OA_ADMIN',
    CONSUMER_GROUP=>'OA_USER_ADMIN',
    GRANT_OPTION=>FALSE);

    DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP(
    USER =>'OA_USER',
    CONSUMER_GROUP=>'OA_USER_ONLINE');
    DBMS_RESOURCE_MANAGER.SET_INITIAL_CONSUMER_GROUP(
    USER =>'OA_ADMIN',
    CONSUMER_GROUP=>'OA_USER_ADMIN');

    --允許OA_ADMIN可以替換到GROUP OA_USER_ONLINE
    DBMS_RESOURCE_MANAGER_PRIVS.GRANT_SWITCH_CONSUMER_GROUP(
    GRANTEE_NAME =>'OA_ADMIN',
    CONSUMER_GROUP=>'OA_USER_ADMIN',
    GRANT_OPTION=>FALSE);
    END;
    /

    –查詢GROUP的切換

    select username,initial_rsrc_consumer_group from dba_users WHERE username IN('OA_USER','OA_ADMIN');

    USERNAME
    ------------------------------------------------------------
    INITIAL_RSRC_CONSUMER_GROUP
    ------------------------------------------------------------
    OA_ADMIN
    OA_USER_ADMIN

    OA_USER
    OA_USER_ONLINE
    
    –在資料庫中啟用OA_ORM plans

    ALTER SYSTEM SET RESOURCE_MANAGER_PLAN='OA_ORM' scope=BOTH;

    System altered.

    –看看session的登入資訊

    select username,resource_consumer_group from v$session where username='OA_USER';

    USERNAME
    ------------------------------------------------------------
    RESOURCE_CONSUMER_GROUP
    ----------------------------------------------------------------
    OA_USER
    OA_USER_ONLINE

    select username,resource_consumer_group from v$session where username='OA_ADMIN';

    USERNAME
    ------------------------------------------------------------
    RESOURCE_CONSUMER_GROUP
    ----------------------------------------------------------------
    OA_ADMIN
    OA_USER_ADMIN

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24570973/viewspace-752020/,如需轉載,請註明出處,否則將追究法律責任。

相關文章