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
Los usuarios que asignamos a los Customer Groups, ¿que usuarios son? De Oracle? de Sistema operativo, Sesiones? Podrias poner un ejemplo??
Gracias