10 L_TOTALWORK := 10; 11 12 WHILE L_SOFAR < 10 LOOP 13 DBMS_LOCK.SLEEP(5); --OPERACAO LONGA 14 15 L_SOFAR := L_SOFAR + 1; 16 DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS(L_RINDEX, 17 L_SLNO, 18 'OPERACAO LONGA', 19 L_OBJ, 20 0, 21 L_SOFAR, 22 L_TOTALWORK, 23 'TABELA', 24 'TABELAS'); 25 END LOOP; 26 END; 27 / PL/SQL procedure successfully completedPara consultar a progressao do processo, consulte a visao V$SESSION_LONGOPS:SQL> SELECT OPNAME, TARGET_DESC, SOFAR, TOTALWORK, UNITS 2 FROM V$SESSION_LONGOPS 3 WHERE OPNAME = 'OPERACAO LONGA' 4 / OPNAME TARGET_DESC SOFAR TOTALWORK UNITS---------------- -------------- -------- ------------ -------------OPERACAO LONGA TABELA 10 10 TABELASUso pratico do pacote DBMS_APPLICATION_INFOAgora que conhecemos todos os procedimentos do pacote DBMS_APPLICATION_INFO, vamos para um exemplo pratico. Utilizaremos o sqlplus como aplicativo, simulando um sistema real: Conectando no sqlplus:[oracle@mytracelog ~]$ sqlplus scott/scott@mytracelogDefinindo o MODULE:SQL> EXEC DBMS_APPLICATION_INFO.SET_MODULE('SCOTT',NULL); PL/SQL procedure successfully completedExecutando o relatorio de empregados por departamento:SQL> EXEC DBMS_APPLICATION_INFO.SET_ACTION('RELATORIO DE EMPREGADO POR DEPARTAMENTO');Procedimento PL/SQL concluido com sucesso.SQL> SELECT D.DNAME, E.EMPNO, E.ENAME, E.JOB 2 FROM EMP E 3 INNER JOIN DEPT D ON D.DEPTNO = E.DEPTNO 4 ORDER BY D.DNAME, E.ENAME;DNAME EMPNO ENAME JOB-------------- ---------- ---------- ---------ACCOUNTING 7782 CLARK MANAGERACCOUNTING 7839 KING PRESIDENTACCOUNTING 7934 MILLER CLERKRESEARCH 7876 ADAMS CLERKRESEARCH 7902 FORD ANALYSTRESEARCH 7566 JONES MANAGERRESEARCH 7788 SCOTT ANALYSTRESEARCH 7369 SMITH CLERKSALES 7499 ALLEN SALESMANSALES 7698 BLAKE MANAGERSALES 7900 JAMES CLERKDNAME EMPNO ENAME JOB-------------- ---------- ---------- ---------SALES 7654 MARTIN SALESMANSALES 7844 TURNER SALESMANSALES 7521 WARD SALESMANSQL> EXEC DBMS_APPLICATION_INFO.SET_ACTION(NULL);PL/SQL procedure successfully completedCadastrando empregado:SQL> EXEC DBMS_APPLICATION_INFO.SET_ACTION('CADASTRANDO EMPREGADO'); PL/SQL procedure successfully completedSQL> INSERT INTO EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) 2 VALUES(8000,'MYTRACELOG','ANALYST',7566,'03/06/86',3500,NULL,20);1 row created.SQL> COMMIT;Commit complete.SQL> EXEC DBMS_APPLICATION_INFO.SET_ACTION(NULL);PL/SQL procedure successfully completedExecutando relatorio de objetos:SQL> EXEC DBMS_APPLICATION_INFO.SET_ACTION('RELATORIO DE OBJETOS'); PL/SQL procedure successfully completedSQL> SELECT OWNER,COUNT(*) FROM ALL_OBJECTS GROUP BY OWNER ORDER BY OWNER; OWNER COUNT(*)------------------------------ ----------APEX_030200 2251APPQOSSYS 3BI 8CTXSYS 364DBSNMP 65EXFSYS 308FLOWS_FILES 11HR 34IX 48MDSYS 1415OE 112OLAPSYS 717ORACLE_OCM 8ORDDATA 239ORDPLUGINS 10ORDSYS 2532OUTLN 8OWBSYS 2OWBSYS_AUDIT 12PM 10 OWNER COUNT(*)------------------------------ ----------PUBLIC 27702SCOTT 6SH 299SI_INFORMTN_SCHEMA 8SYS 30602SYSMAN 3404SYSTEM 529WMSYS 306XDB 503 29 rows selectedSQL> EXEC DBMS_APPLICATION_INFO.SET_ACTION(NULL);PL/SQL procedure successfully completedDesconectando:SQL> EXIT;Repare que para cada SQL executado e utilizado duas vezes o procedimento SET_ACTION, primeiro e utilizado o SET_ACTION para registrar a funcionalidade que sera executada, em seguida e executado o SQL, e por fim e utilizando novamente o SET_ACTION passando como parametro NULL, indicando o termindo a execucao do SQL. Rastreando SQL:Como citado anteriormente a visao V$SQLAREA pode ser utilizada para o rastreamento do SQL: SQL> SELECT SQL_TEXT,MODULE,ACTION 2 FROM V$SQLAREA 3 WHERE SQL_TEXT = 'SELECT OWNER,COUNT(*) FROM ALL_OBJECTS GROUP BY OWNER ORDER BY OWNER' 4 / SQL_TEXT MODULE ACTION---------------------------------------------------------------------- -------- -----------------------SELECT OWNER,COUNT(*) FROM ALL_OBJECTS GROUP BY OWNER ORDER BY OWNER SCOTT RELATORIO DE OBJETOSOutra forma e utilizando o Oracle Enterprise Manager (OEM), com certeza e mais pratico que utilizar a visao V$SQLAREA. Acesse Database Instance > Top Activity > Aba Statistics > Secao General entao encontrara os campos MODULE e ACTION. ConclusaoNeste artigo foi apresentado o pacote DBMS_APPLICATION_INFO, foi descrito de forma breve e exemplificado o uso de cada procedimento. No final foi desenvolvido um exemplo pratico da aplicacao do pacote, por fim mostramos como rastrear o SQL atraves da visao V$SQLAREA e tambem mostramos outra opcao utilizando o Oracle Enterprise Manager. O objetivo deste