Contrairement à ce qui est annoncé dans la documentation, DBMS_XPLAN.DISPLAY_CURSOR
n’affiche pas l’ensemble des curseurs dans la shared pool lorsque vous ne précisez que le paramètre sql_id
. La section ci-dessous extraite de la documentation est juste fausse:
child_number
Child number of the cursor to display. If not supplied, the execution plan of all cursors matching the supplied sql_id parameter are displayed. The child_number can be specified only if sql_id is specified.
En fait, elle est fausse à 2 titres :
- d’abord le nom du paramètre n’est pas
child_number
maiscursor_child_no
- ensuite la valeur par défaut n’est pas
null
mais0
Pour vérifier ces 2 points, exécutez la requête ci-dessous et faite l’extraction de la section qui vous intéresse :
select text
from dba_source
where type='PACKAGE'
and name='DBMS_XPLAN'
order by line;
[...]
-- display from V$SQL_PLAN (or V$SQL_PLAN_STATISTICS_ALL)
function display_cursor(sql_id varchar2 default null,
cursor_child_no integer default 0,
format varchar2 default 'TYPICAL')
return dbms_xplan_type_table
pipelined;
[...]
Pour afficher l’ensemble des curseurs pour une requête en 11.2, tapez donc
select *
from table(dbms_xplan.display_cursor('&sql_id',null));
et non pas
select *
from table(dbms_xplan.display_cursor('&sql_id'));
Remarquez que ça fait plusieurs fois que je rencontre un problème où tous les curseurs ne sont pas affichés avec cette fonction, y compris dans Oracle Enterprise Manager GridControl. En 10.2.0.4, le problème était bien pire… On imagine qu’ils ont corrigé le code mais pas la documentation.