Enregistrer la progression de vos traitements dans Oracle

Le package DBMS_APPLICATION_INFO permet d’enregistrer la progression d’opérations longues dans votre base de données. Il aide ainsi les DBA à suivre l’évolution des traitements applicatifs très simplement. Cette fonctionnalité est extrêmement utile. Couplez-la à l’utilisation des services, modules et actions pour faciliter la supervision des temps de réponse et la prise de traces et vous aurez une base pour gérer les performances de vos applications transactionnelles…

Pour toutes les informations utiles, reportez-vous à Oracle® Database PL/SQL Packages and Types Reference – DBMS_APPLICATION_INFO. Vous trouverez ci-dessous un exemple simple de mise en oeuvre de cette fonctionnalité.
Ceci est un exemple en PL/SQL; vous pourrez le faire évoluer en Pro*C, C, C++, Java, .NET ou n’importe quel langage de développement qui se connecte à Oracle et intégrer les étapes de votre traitement plutôt qu’un « sleep » de 2 secondes :

declare
v_rindex binary_integer;
v_slno binary_integer;
begin
v_rindex := dbms_application_info.set_session_longops_nohint;
for i in 1..100 loop
dbms_application_info.set_session_longops(
rindex => v_rindex,
slno => v_slno,
op_name => 'Compute Data',
sofar => i,
totalwork => 100,
target_desc => 'Invoice 747',
units => 'Percent');
dbms_lock.sleep(2);
end loop;
end;
/

Pour suivre l’évolution des opérations, vous pouvez utiliser une requête comme celle ci-dessous :

col sid format 9999
col serial# format 9999
col ELAPSED_SECONDS format 9999 head "Elap.(s)"
col TIME_REMAINING format 9999 head "Remain.(s)"
col message format a50
set lines 100
select sid, serial#, elapsed_seconds, time_remaining, message from v$session_longops
where time_remaining>0;

SID SERIAL# Elap.(s) Remain.(s) MESSAGE
----- ------- -------- ---------- --------------------------------------------------
149 27 21 170 Compute Data: Invoice 747 : 11 out of 100 Percent
done

Notez bien qu’une session peut tout à fait alimenter plusieurs lignes dans V$SESSION_LONGOPS si vous voulez générer plusieurs niveaux de suivi…