/*
OPNAME:指长时间执行的操作名.如:Table Scan
TARGET:被操作的object_name. 如:tableA 
TARGET_DESC:描述target的内容 
SOFAR:这个是需要着重去关注的,表示已要完成的工作数,如扫描了多少个块。
TOTALWORK:指目标对象一共有多少数量(预计)。如块的数量。
UNITS: 
START_TIME:进程的开始时间
LAST_UPDATE_TIM:最后一次调用set_session_longops的时间
TIME_REMAINING: 估计还需要多少时间完成,单位为秒
ELAPSED_SECONDS:指从开始操作时间到最后更新时间
CONTEXT:
MESSAGE:对于操作的完整描述,包括进度和操作内容。 
USERNAME:与v$session中的一样。
SQL_ADDRESS:关联v$sql
SQL_HASH_VALUE:关联v$sql
QCSID:主要是并行查询一起使用。
*/

SELECT V.SQL_ID,
       USERNAME,
       SID,
       OPNAME,
       ROUND(SOFAR * 100 / TOTALWORK, 0) || '%' AS "执行进度百分比",
       TIME_REMAINING "估计剩余时间(秒)",
       SQL_TEXT,
       A.ELAPSED_SECONDS "执行时间(秒)",
       A.START_TIME "执行开始时间",
       A.TOTALWORK "总数(块block)",
       A.SOFAR "已完成数(块block)",
       A.SOFAR / A.ELAPSED_SECONDS "每秒扫描数(块block)"
  FROM V$SESSION_LONGOPS A, V$SQL V
 WHERE 1 = 1
      --AND TIME_REMAINING <> 0
   AND SQL_ADDRESS = ADDRESS
   AND SQL_HASH_VALUE = HASH_VALUE
 ORDER BY A.ELAPSED_SECONDS DESC;

 
 SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
                                       
                                       SQL_ID => '85tpcyjsu9mx6', 
                                       
                                       REPORT_LEVEL => 'ALL') AS REPORT

  FROM DUAL;