Zurück

Fortschrittskontrolle einer PL/SQL Procedure

Übersicht

Oracle bietet das Package DBMS_APPLICATION_INFO an, um lang dauernde PL/SQL Proceduren zu überwachen. Grundsätzlich muss sich die Procedure mit dem DBMS_APPLICATION_INFO Package registrieren lassen, damit von "extern" der Zustand überwacht werden kann.

Es stehen folgende Prozeduren zur Verfügung:

DBMS_APPLICATION_INFO.SET_CLIENT_INFO(client_info IN VARCHAR2)
DBMS_APPLICATION_INFO.SET_MODULE(module_name IN VARCHAR2,
                                 action_name IN VARCHAR2)
DBMS_APPLICATION_INFO.SET_ACTION(action_name IN VARCHAR2)

Beispiel

Session 1 führt folgende Procedure aus:

CREATE OR REPLACE
PROCEDURE my_session_info AS
  dummy NUMBER;
BEGIN
  DBMS_APPLICATION_INFO.SET_CLIENT_INFO('This is a test');
  DBMS_APPLICATION_INFO.SET_MODULE('my_module.sql','Updating test');
  FOR i IN 1 .. 100000
  LOOP
    DBMS_APPLICATION_INFO.SET_ACTION('In loop at: i='||TO_CHAR(i));
    UPDATE mytest SET attr2='Test'||TO_CHAR(i) WHERE attr1=1;
    IF MOD(i,50) = 0 THEN COMMIT; END IF;
  END LOOP;
COMMIT;
END;
/

Session 2 kann nun kontrollieren wie weit Session 1 fortgeschritten ist:

select CLIENT_INFO,MODULE,ACTION from v$session

CLIENT_INFO                 MODULE               ACTION
--------------------------- -------------------- --------------------
This is a test              my_module.sql        In loop at: i=46450