Hoy vamos a ver un caso que puede volvernos un poco locos y que su solución es terriblemente sencilla.
Cuando intentamos usar el resource manager para mapear nuestros usuarios a un determinado grupo de consumidores nos encontramos que podemos intentar hacerlo por algun elemento que tenga mayusculas y minusculas.
Supongamos queremos añadir a el grupo DESARROLLO los usuarios que se conectan con el e toad y SQL Developer. Para ello ejecutaríamos
BEGIN dbms_resource_manager.clear_pending_area(); dbms_resource_manager.create_pending_area(); dbms_resource_manager.set_consumer_group_mapping(dbms_resource_manager.client_program,'Sqldeveloper.exe','DESARROLLO'); dbms_rsource_manager.set_consumer_group_mapping(dbms_resource_manager.client_program, 'toad.exe','DESARROLLO'); dbms_resource_manager.submit_pending_area(); END; commit;
Pero si seguimos la pista a las sesiones de estos dos programas, veremos como no se mapean correctamente con el grupo de consumidores que queremos.
Ejecutando la siguiente consulta podemos ver la causa:
select * from DBA_RSRC_GROUP_MAPPINGS where attribute = 'CLIENT_PROGRAM'; ATTRIBUTE VALUE CONSUMER_GROUP ------------------------------------------------------------------ CLIENT_PROGRAM SQLDEVELOPER.EXE DESARROLLO CLIENT_PROGRAM TOAD.EXE DESARROLLO
¿Que es lo que ha ocurrido?
El problema que tenemos aquí es que las funciones dbms_resource_manager nos van a pasar a mayusculas los valores que le pasemos entre comillas simples.
Si nos fijamos en los comandos que hemos introducido antes vemos que el nombre del client_program lo hemos introducido entre comilla simple
dbms_rsource_manager.set_consumer_group_mapping(dbms_resource_manager.client_program, 'toad.exe','DESARROLLO');
Si lo que buscamos tiene mayusculas y minusculas o simplemente minusculas, deberemos pasarle el parámetro como un literal,es decir, entre comillas dobles
BEGIN dbms_resource_manager.clear_pending_area(); dbms_resource_manager.create_pending_area(); dbms_resource_manager.set_consumer_group_mapping(dbms_resource_manager.client_program,'"Sqldeveloper.exe"','DESARROLLO'); dbms_rsource_manager.set_consumer_group_mapping(dbms_resource_manager.client_program, '"toad.exe"','DESARROLLO'); dbms_resource_manager.submit_pending_area(); END; commit;
Con esto nos cogerá la informacion correctamente.
select * from DBA_RSRC_GROUP_MAPPINGS where attribute = 'CLIENT_PROGRAM'; ATTRIBUTE VALUE CONSUMER_GROUP ------------------------------------------------------------------ CLIENT_PROGRAM SQLDEVELOPER.EXE DESARROLLO CLIENT_PROGRAM TOAD.EXE DESARROLLO CLIENT_PROGRAM Sqldeveloper.exe DESARROLLO CLIENT_PROGRAM toad.exe DESARROLLO
La información completa como siempre en metalink
- Resource Manager Plan Is not Applied With Mixed or Lower Case Application Name (Doc ID 471173.1)
- 11G: Oracle Resource Manager Client_program Mapping Not Working, Converted to Capital Letters (Doc ID 1586148.1)