Supprimer les informations collectées par Health Monitor Check

Health Monitor Check comme les autres fonctions d’Oracle Diagnostic Repository (ADR) stocke ses données dans les fichiers situés dans $ORACLE_BASE/diag/rdbms/<db_name>/$ORACLE_SID/metadata. Cela permet notamment d’interroger le référentiel, y compris

  • l’instance est en mode NOMOUNT depuis les vues V$ 
  • l’instance lorsque celle-ci est arrêtée depuis ADRCI.

Cet article illustre ce fonctionnement

Exécuter Health Monitor Check

Pour commencer, lancez une exécution de Health Check Monitor lorsque la base de données est ouverte. Peu importe le résultat d’ailleurs :

exec dbms_hm.run_check('Dictionary Integrity Check','&&vcheck')

set tab off
col name format a7
col check_name format a28
col status format a10
set lines 80
select name, check_name, status from v$hm_run
where name='&&vcheck';

NAME CHECK_NAME STATUS
------- ---------------------------- ----------
demo1 Dictionary Integrity Check COMPLETED


select f.description, f.damage_description
from v$hm_finding f, v$hm_run r
where f.run_id=r.run_id
and r.name='&&vcheck';

no rows selected

select name, check_name
from v$hm_run;

NAME CHECK_NAME
------- ----------------------------
demo1 Dictionary Integrity Check


exit;

Accéder aux données base fermée

Pour vérifier que c’est bien le cas, nous allons redémarrer l’instance en mode nomount :

startup force nomount

select p.spid
from v$process p, v$session s
where s.paddr=p.addr
and s.sid=sys_context('userenv','sid');

SPID
------------------------
11509

Dans un autre terminal, lancez strace avec le PID du processus serveur :

cd /tmp
strace -osqlplus.out -p 11509

Puis lancez votre requête :

set pages 1000
select name from v$hm_run;

NAME
---------
demo1

Vous pouvez vérifier que le fichier est ouvert par le processus serveur en ouvrant le fichier généré par strace:

grep open sqlplus.out |grep HM_RUN
open("/u01/app/oracle/diag/rdbms/white/WHITE/metadata/HM_RUN.ams", O_RDONLY|O_LARGEFILE) = 11
open("/u01/app/oracle/diag/rdbms/white/WHITE/metadata/HM_RUN.ams", O_RDONLY|O_DIRECT|O_LARGEFILE) = 11
open("/u01/app/oracle/diag/rdbms/white/WHITE/metadata/HM_RUN.ams", O_RDONLY|O_DSYNC|O_DIRECT|O_LARGEFILE) = 11

Supprimer le contenu de HM_RUN.ams

Conséquence de ce mode de fonctionnement, vous ne pourrez pas supprimer les informations d’exécution par d’autre moyen que la commande adrci (à moins de supprimer les fichiers ams avec un rm évidemment !). Voici un exemple d’utilisation ci-dessous :

adrci

ADRCI: Release 11.2.0.2.0 - Production on Mon Jun 20 17:21:35 2011

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

ADR base = "/u01/app/oracle"


show hm_run

ADR Home = /u01/app/oracle/diag/rdbms/white/WHITE:
*************************************************************************

**********************************************************
HM RUN RECORD 1
**********************************************************
RUN_ID 661
RUN_NAME demo1
CHECK_NAME Dictionary Integrity Check
NAME_ID 24
MODE 0
START_TIME 2011-06-20 15:18:26.296460 +02:00
RESUME_TIME <null>
END_TIME 2011-06-20 15:18:27.107890 +02:00
MODIFIED_TIME 2011-06-20 15:18:27.107890 +02:00
TIMEOUT 0
FLAGS 0
STATUS 5
SRC_INCIDENT_ID 0
NUM_INCIDENTS 0
ERR_NUMBER 0
REPORT_FILE <null>
1 rows fetched


help purge

Usage: PURGE [[-i | ] |
[-age [-type ALERT|INCIDENT|TRACE|CDUMP|HM|UTSCDMP]]]:

Purpose: Purge the diagnostic data in the current ADR home. If no
option is specified, the default purging policy will be used.

Options:
[-i id1 | id1 id2]: Users can input a single incident ID, or a
range of incidents to purge.

[-age ]: Users can specify the purging policy either to all
the diagnostic data or the specified type. The data older than
ago will be purged

[-type ALERT|INCIDENT|TRACE|CDUMP|HM|UTSCDMP]: Users can specify what type of
data to be purged.

Examples:
purge
purge -i 123 456
purge -age 60 -type incident


purge -age 0 -type hm
show hm_run

ADR Home = /u01/app/oracle/diag/rdbms/white/WHITE:
*************************************************************************
0 rows fetched

Comme vous vous en rendrez compte, les informations disparaissent alors de V$HM_RUN :

sqlplus / as sysdba

select count(*) from v$hm_run;

COUNT(*)
----------
0

Et ensuite…

Redémarrez l’instance et ouvrez la base de données :

startup force