AWR en 11gR2, bogue lié au changement de valeur de control_management_pack_access

Dans le post précédent je me suis trouvé confronté au souci suivant: le passage du paramètre control_management_pack_access de NONE à DIAGNOSTIC+TUNING sur Linux ne déclenchait pas toutes les collectes de statistiques nécessaires au bon établissement d’un rapport AWR et ce malgré le caractère dynamique dudit paramètre.

Deux contournements m’ont été proposés par le support :

  1. Redémarrer la base (SIC!)
  2. Ou manuellement Alimenter les tables dont les données ne sont pas collectées à l’aide des scripts suivants :

Stocker l’identifiant de la base dans une variable de liaison

var dbid number
exec select dbid into :dbid from v$database

Alimenter la table WRH$_PARAMETER_NAME

Avant de collecter ces données, vérifier que la table WHR$ est bien vide

INSERT INTO WRH$_PARAMETER_NAME( dbid
                               , PARAMETER_HASH
                               , PARAMETER_NAME ) 
SELECT DISTINCT :dbid
     , KSPPIHASH
     , KSPPINM 
FROM X$KSPPI;

Alimenter la table WRH$_EVENT_NAME

Avant de collecter ces données, vérifier que la table WHR$ est bien vide

INSERT INTO WRH$_EVENT_NAME( dbid
                           , EVENT_ID
                           , EVENT_NAME
                           , PARAMETER1
                           , PARAMETER2
                           , PARAMETER3
                           , WAIT_CLASS_ID
                           , WAIT_CLASS ) 
SELECT DISTINCT :dbid
     , EVENT_ID
     , NAME
     , PARAMETER1
     , PARAMETER2
     , PARAMETER3
     , WAIT_CLASS_ID
     , WAIT_CLASS 
FROM V$EVENT_NAME;

Alimenter la table WRH$_LATCH_NAME

Avant de collecter ces données, vérifier que la table WHR$ est bien vide

INSERT INTO WRH$_LATCH_NAME( dbid
                           , LATCH_HASH
                           , LATCH_NAME
                           , LATCH#) 
SELECT DISTINCT :dbid
     , HASH
     , NAME
     , LATCH# 
FROM V$LATCHNAME;

Alimenter la table WRH$_OSSTAT_NAME

Avant de collecter ces données, vérifier que la table WHR$ est bien vide

INSERT INTO WRH$_OSSTAT_NAME( dbid
                            , STAT_ID
                            , STAT_NAME) 
SELECT DISTINCT :dbid
     , OSSTAT_ID
     , STAT_NAME 
FROM V$OSSTAT;

Alimenter la table WRH$_IOSAT_FUNCTION_NAME

INSERT INTO WRH$_IOSTAT_FUNCTION_NAME( dbid
                                     , FUNCTION_ID
                                     , FUNCTION_NAME) 
SELECT DISTINCT :dbid
     , FUNCTION_ID
     , FUNCTION_NAME 
FROM V$IOSTAT_FUNCTION;

Alimenter la table WRH$_IOSTAT_FILETYPE_NAME

Avant de collecter ces données, vérifier que la table WHR$ est bien vide

INSERT INTO WRH$_IOSTAT_FILETYPE_NAME( dbid
                                     , FILETYPE_ID
                                     , FILETYPE_NAME) 
SELECT DISTINCT :dbid
     , FILETYPE_ID
     , FILETYPE_NAME 
FROM V$IOSTAT_FILE;

Alimenter la table WRH$_PLAN_OPERATION_NAME

Avant de collecter ces données, vérifier que la table WHR$ est bien vide

INSERT INTO WRH$_PLAN_OPERATION_NAME( dbid
                                    , OPERATION_ID
                                    , OPERATION_NAME) 
SELECT DISTINCT :dbid
     , XPLTON_ID
     , XPLTON_NAME 
FROM X$XPLTON;

Alimenter la table WRH$_PLAN_OPTION_NAME

Avant de collecter ces données, vérifier que la table WHR$ est bien vide

INSERT INTO WRH$_PLAN_OPTION_NAME( dbid
                                 , OPTION_ID
                                 , OPTION_NAME) 
SELECT DISTINCT :dbid
     , XPLTOO_ID
     , XPLTOO_NAME FROM X$XPLTOO;

Alimenter la table WRH$_SQLCOMMAND_NAME

Avant de collecter ces données, vérifier que la table WHR$ est bien vide

INSERT INTO WRH$_SQLCOMMAND_NAME( dbid
                                , COMMAND_TYPE
                                , COMMAND_NAME) 
SELECT DISTINCT :dbid
     , COMMAND_TYPE
     , COMMAND_NAME 
FROM V$SQLCOMMAND;

Alimenter la table WRH$_TOPLEVELCALL_NAME

Avant de collecter ces données, vérifier que la table WHR$ est bien vide

INSERT INTO WRH$_TOPLEVELCALL_NAME( dbid
                                  , TOP_LEVEL_CALL#
                                  , TOP_LEVEL_CALL_NAME) 
SELECT DISTINCT :dbid
     , TOP_LEVEL_CALL#
     , TOP_LEVEL_CALL_NAME 
FROM V$TOPLEVELCALL;

Alimenter la table WRH$_STAT_NAME

Avant de collecter ces données, vérifier que la table WHR$ est bien vide

INSERT into wrh$_stat_name ( stat_id
                           , dbid
                           , stat_name) 
select stat_id
     , :dbid
     , stat_name 
from (select stat_id
           , name stat_name 
      from v$statname 
      union 
      select stat_id
           , stat_name 
      from v$sys_time_model);