Erp conc manager job status2

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic
Domaine ERP
Voir aussi Erp conc manager job status · Erp conc manager user query

Erp conc manager job status2 est une variante d'Erp conc manager job status centrée sur la durée d'exécution des jobs concurrents. Elle ne liste que les requêtes en statut Running (phase_code = 'R') mais calcule pour chacune son temps d'exécution écoulé (heures/minutes/secondes), le nom du programme concurrent réel, et la session Oracle associée (SID/serial#) — pratique pour repérer un job qui tourne anormalement longtemps et retrouver sa session pour investigation (v$session, v$sql...).

Script

Le calcul de durée (heures / minutes / secondes écoulées) a été réécrit avec MOD() plutôt que la chaîne de FLOOR() imbriqués du script d'origine — même résultat, plus lisible.

-- Requêtes concurrentes en cours d'exécution, avec durée écoulée et session associée

SET TERMOUT OFF
COLUMN current_instance NEW_VALUE current_instance NOPRINT
SELECT rpad(instance_name, 17) current_instance FROM v$instance;
SET TERMOUT ON

PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Report   : Concurrent Manager Job Status (durées d'exécution)          |
PROMPT | Instance : &current_instance                                           |
PROMPT +------------------------------------------------------------------------+

SET ECHO        OFF
SET FEEDBACK    6
SET HEADING     ON
SET LINESIZE    180
SET PAGESIZE    50000
SET TIMING      OFF
SET TRIMOUT     ON
SET TRIMSPOOL   ON
SET VERIFY      OFF

CLEAR COLUMNS
CLEAR BREAKS
CLEAR COMPUTES

COLUMN start_time   FORMAT a20        HEADING 'Start|Time'
COLUMN program_name FORMAT a50        HEADING 'Program|Name'
COLUMN reqid        FORMAT 9999999999 HEADING 'Request|ID'
COLUMN tot_mins     FORMAT 9999999    HEADING 'Total|Run-Time|in Mins'
COLUMN hrs          FORMAT 99999      HEADING 'Running|Hrs'
COLUMN mins         FORMAT 99999      HEADING 'Running|Mins'
COLUMN secs         FORMAT 99999      HEADING 'Running|Secs'
COLUMN user_name    FORMAT a18        HEADING 'User|Name'
COLUMN oracle_sid   FORMAT 99999      HEADING 'Oracle|SID'
COLUMN "serial#"    FORMAT 9999999    HEADING 'Serial|#'
COLUMN phase        FORMAT a5         HEADING 'Phase|Code'
COLUMN status       FORMAT a6         HEADING 'Status|Code'

SELECT
    reqid
  , start_time
  , user_name
  , phase
  , status
  , FLOOR(diff_secs / 3600)         hrs
  , FLOOR(MOD(diff_secs, 3600) / 60) mins
  , ROUND(MOD(diff_secs, 60))        secs
  , diff_secs / 60                   tot_mins
  , program_name
  , oracle_sid
  , "serial#"
FROM (
    SELECT
        r.request_id                                              reqid
      , TO_CHAR(r.actual_start_date, 'DD-MON-YYYY HH24:MI:SS')     start_time
      , u.user_name                                                user_name
      , r.phase_code                                                phase
      , r.status_code                                               status
      , (SYSDATE - r.actual_start_date) * 86400                    diff_secs
      , DECODE(   p.user_concurrent_program_name
                , 'Request Set Stage', 'RSS - '||r.description
                , 'Report Set',        'RS - '||r.description
                , p.user_concurrent_program_name )                 program_name
      , s.sid                                                       oracle_sid
      , s.serial#                                                   "serial#"
    FROM
        v$session                       s
      , apps.fnd_user                   u
      , apps.fnd_concurrent_processes   pr
      , apps.fnd_concurrent_programs_vl p
      , apps.fnd_concurrent_requests    r
    WHERE
          s.process = pr.os_process_id
      AND pr.concurrent_process_id = r.controlling_manager
      AND r.phase_code = 'R'
      AND r.requested_by = u.user_id
      AND p.concurrent_program_id = r.concurrent_program_id
)
ORDER BY
    1
/

Voir aussi