Invalider un cursor

Lorsqu’on a en shared pool un plan d’exécution mauvais (par exemple à cause de bind variable peeking sur des valeurs particulières) il faut pouvoir vite l’invalider afin que la prochaine exécution fasse un hard parse.
Voici comment invalider directement un cursor avec dbms_shared_pool.purge:
Je récupère le nom à passer à partir du sql_id:

select rawtohex(address)|| ','||to_char(hash_value),sql_id,child_number
from v$sql where sql_id='84vk5fwyw403g';
RAWTOHEX(ADDRESS)||’,’||TO_CHAR(HASH_VALUE) SQL_ID CHILD_NUMBER
000007FF1E4B7218,1036124271 84vk5fwyw403g 0

Et j’invalide le curseur:

exec sys.dbms_shared_pool.purge('000007FF1E4B7218,1036124271','...');

Exemple complet ici: demo

Laisser un commentaire