PL/SQLで実行中のプロセスを調べるには

PL/SQLでは、以下の方法で実行中のプロセスを確認できます

  1. DBMS_APPLICATION_INFOパッケージを利用する: DBMS_APPLICATION_INFOパッケージは、現在セッションされているアプリケーション情報を設定、問い合わせするためのプロセスや関数を提供します。SET_SESSION_LONGOPSプロセスを使用して実行中のプロセスを問い合わせることができます。次に例を示します。
DECLARE
  v_ses_status    VARCHAR2(64);
  v_opname        VARCHAR2(64);
  v_target        NUMBER;
  v_sofar         NUMBER;
  v_totalwork     NUMBER;
  v_elapsed_time  NUMBER;
  v_est_time      NUMBER;
BEGIN
  DBMS_APPLICATION_INFO.READ_SESSION_INFO(v_ses_status, v_opname, v_target, 
                                           v_sofar, v_totalwork, v_elapsed_time);
  
  IF v_ses_status = 'ACTIVE' THEN
    DBMS_OUTPUT.PUT_LINE('操作名称:' || v_opname);
    DBMS_OUTPUT.PUT_LINE('目标 :' || v_target);
    DBMS_OUTPUT.PUT_LINE('已完成 :' || v_sofar);
    DBMS_OUTPUT.PUT_LINE('总工作量 :' || v_totalwork);
    DBMS_OUTPUT.PUT_LINE('已用时间 :' || v_elapsed_time);
    v_est_time := v_elapsed_time * (v_totalwork / v_sofar);
    DBMS_OUTPUT.PUT_LINE('估计剩余时间 :' || v_est_time);
  ELSE
    DBMS_OUTPUT.PUT_LINE('没有正在运行的进程。');
  END IF;
END;
/
  1. V$SESSION_LONGOPS ビューを使用します。V$SESSION_LONGOPS ビューには長期実行操作の情報が格納されています。このビューから、実行中のプロセスの詳細を取得できます。以下に例を示します。
SELECT sid, serial#, opname, target, sofar, totalwork, elapsed_seconds
FROM v$session_longops
WHERE sofar < totalwork;

動作中のプロセスを確認する方法として、上記の2種類が挙げられます。より適切な方法を選択するには、利用目的を考慮する必要があります。

bannerAds