Los Resource Plan

En el Artículo sobre 'simple plans' las mencionadas reglas de los resource Plans no hablaban de los subplans. Este es un ejemplo de la creación de un Plan más completo, y no necesariamente trivial. Afortunadamente, Oracle tiene un DRM (DBMS_RESOURCE_MANAGER que detecta problemas durante la creación del Resource Plan.

DRM requiere que todos los cambios de los componentes de un Resource Plan (en adelante RP) sean posteados a una 'Pending Area' (PA) antes de ser aplicados en la Base de Datos.

Esta PA se tiene que crear antes de hacer la modificaciones en el DRM:

EXEC DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA;
 
o
 
BEGIN 
 dbms_resource_manager.create_pending_area(); 
END; 
/

Una vez que las modificaciones han sido enviadas al DRM, se tienen que validar. Si los cambios son inválidos, el Procedimiento devuelve un error, y los cambios se pueden volver a enviar y validar:

EXEC DBMS_RESOURCE_MANAGER.VALIDATE_PENDING_AREA;
 
o
 
==== Commit de los cambios Hechos en el Resource Manager ====
 
BEGIN                                                     
 dbms_resource_manager.validate_pending_area();           
END;                                                      
/

Una vez que los cambios han sido validados, se pueden enviar ('SUBMIT') al DRM El Procedure automáticamente hace una última validacion de los cambios antes del submit:

EXEC DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA;
 
o
 
BEGIN                                                     
 dbms_resource_manager.submit_pending_area();             
END;                                                      
/

Tambien se pueden borrar todos los cambios hechos en la PA.

 
EXEC DBMS_RESOURCE_MANAGER.CLEAR_PENDING_AREA;
 
o
 
BEGIN                                                     
 dbms_resource_manager.clear_pending_area();             
END;                                                      
/

Crear el Resource Plan

Una vez hemos inicializado la PA, podemos proceder a crear el Resource Plan:

BEGIN 
 dbms_resource_manager.create_plan(PLAN => '<Nombre del Plan>',
                                   CPU_MTH => 'EMPHASIS', 
                                   COMMENT => 'Resource Plan para Producción '); 
END; 
/

Crear los Resource Groups

BEGIN 
 dbms_resource_manager.create_consumer_group(consumer_group => '<ResourceGroup1>', 
                                             COMMENT => 'Customer Group para Usuarios XXX');
 dbms_resource_manager.create_consumer_group(consumer_group => 'ResourceGroup1', 
                                             COMMENT => 'Usuarios Alta Prioridad');
END; 
/

Definir Directivas Para el Resource Plan

En este paso definiremos las directivas que regiran el plan de Recursos: Fijaos que en este caso hemos definido Tres clases de usuarios:

BEGIN 
 
 dbms_resource_manager.create_plan_directive(PLAN => '<Nombre del Plan>',
                                             group_or_subplan => '<ResourceGroup>',
                                             COMMENT => 'Directivas Usuarios Prioridad SYS',
                                             cpu_p1 => 100,
                                             parallel_degree_limit_p1 => -1);
 
 dbms_resource_manager.create_plan_directive(PLAN => '<Nombre del Plan>', 
                                             group_or_subplan => '<ResourceGroup>', 
                                             COMMENT => 'Directivas Usuarios Clase B',
                                             cpu_p1 => 0,
                                             cpu_p2 => 20,
                                             parallel_degree_limit_p1 => 1);
 
 dbms_resource_manager.create_plan_directive(PLAN => '<Nombre del Plan>',
                                             group_or_subplan => '<ResourceGroup>',
                                             COMMENT => 'Directivas Para el Resto de Usuarios',
                                             cpu_p1 => 0,
                                             cpu_p2 => 0,	
                                             cpu_p3 => 100,
                                             parallel_degree_limit_p1 => -1);
END; 
/

Asignar los usuarios a Los Customers Groups

BEGIN

 
  Dbms_Resource_Manager_Privs.Grant_Switch_Consumer_Group(grantee_name   => '<Usuario>',
                                                          consumer_group => '<ResourceGroup>',
                                                          grant_option   => FALSE);
 
  Dbms_Resource_Manager.Set_Initial_Consumer_Group('<Usuario>', '<ResourceGroup>');
END;
/
 
 
BEGIN
 Dbms_Resource_Manager.switch_consumer_group_for_user('<Usuario>', '<ResourceGroup>');
END;
/

Activar un Plan de Recursos en la BBDD

Una vez que tenemos el Resource Plan ya creado, validado y submiteado, hemos de activarlo en la BBDD:

BEGIN
 Dbms_Resource_Manager.switch_plan('BI_PLAN');
END;
/

Discusión

, %2009/%09/%10 %17:%Sep:

Los usuarios que asignamos a los Customer Groups, ¿que usuarios son? De Oracle? de Sistema operativo, Sesiones? Podrias poner un ejemplo??

Gracias

Enter your comment (wiki syntax is allowed):

Herramientas personales