Иногда возникает потребность срубить долгий отчет из sm50, но на
сколько он выполнился не понятно.
Коллеги подогнали select, по SID понять что же он делает и сколько ему осталось:
SELECT sid
,decode(
target_desc
,NULL
,decode(target,NULL,opname, concat(opname, concat (' - ',target)))
,decode(target,NULL,concat(opname, concat (' : ',target_desc))
,concat(opname, concat (' : ',concat(target_desc,concat (' - ',target)))))) action
,sofar
,totalwork
,round(sofar*100/totalwork,2) percent
,units
,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (elapsed_seconds, 'second'),'hh24:mi:ss') elapsed_time
,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (time_remaining, 'second'),'hh24:mi:ss') time_remaining
FROM v$session_longops
WHERE sofar < totalwork and totalwork<>0;
(п.с.: Ещё вариант через вьюху - RSDDSTAT_OLAP.
Историю времени запросов можно посмотреть следующим образом:
- вьюха RSDDSTAT_OLAP
- CALDAY
= дата запуска запроса
- INFOPROV
= инфо-провайдер
- OBJNAME
= тех. Имя запроса
- EVENTID установить
3100 (к примеру)
Прикрутил обёртку на ABAP:
*&---------------------------------------------------------------------*
*& Report ZN_PROCESS_ANALISIS
*&
*&---------------------------------------------------------------------*
*& Иногда возникает потребность срубить долгий отчет из sm50,
*& но на сколько он выполнился не понятно.
*&
*& Для этого можно использовать запрос,
*& и по SID понять что же он делает и сколько ему осталось.
*&---------------------------------------------------------------------*
report zn_process_analisis.
types:
begin of ls_atable,
sid(60) type c,
action(60) type c,
sofar(60) type c,
totalwork(60) type c,
percent(60) type c,
units(60) type c,
elapsed_time(60) type c,
time_remaning(60) type c,
end of ls_atable.
data:
l_sid(60) type c,
l_action(60) type c,
l_sofar(60) type c,
l_totalwork(60) type c,
l_percent(60) type c,
l_units(60) type c,
l_elapsed_time(60) type c,
l_time_remaning(60) type c,
lt_atable type table of ls_atable,
wa_atable like line of lt_atable.
controls: t_pranal type tableview using screen 1000.
*-----------------------------------------------------------------------
call screen 1000.
*-----------------------------------------------------------------------
module status_1000 output.
set pf-status 'ZNMENU'.
case sy-ucomm.
*" Выход из программы
when 'EXIT' or 'BACK' or 'CANCEL'.
leave program.
endcase.
endmodule. " STATUS_1000 OUTPUT
*-----------------------------------------------------------------------
module t_pranal_change_tc_attr output.
describe table lt_atable lines t_pranal-lines.
endmodule. "T_PRANAL_CHANGE_TC_ATTR OUTPUT
*-----------------------------------------------------------------------
module user_command_1000 input.
case sy-ucomm.
when 'REFRESH'.
perform select.
endcase.
endmodule. " USER_COMMAND_1000 INPUT
*-----------------------------------------------------------------------
module t_pranal_init output.
perform select.
endmodule. " T_PRANAL_INIT OUTPUT
*-----------------------------------------------------------------------
form select.
EXEC SQL.
OPEN C FOR
SELECT to_char( sid ) sid
,to_char( decode(
target_desc
,NULL
,decode(target,NULL,opname, concat(opname, concat (' - ',target)))
,decode(target,NULL,concat(opname, concat (' : ',target_desc))
,concat(opname, concat (' : ',concat(target_desc,concat (' - ',target)))))) ) action
,to_char( sofar ) sofar
,to_char( totalwork ) totalwork
,to_char( round(sofar*100/totalwork,2) ) percent
,to_char( units ) units
,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (elapsed_seconds, 'second'),'hh24:mi:ss') elapsed_time
,TO_CHAR (TRUNC (SYSDATE) + NUMTODSINTERVAL (time_remaining, 'second'),'hh24:mi:ss') time_remaining
FROM v$session_longops
WHERE sofar < totalwork and totalwork<>0
ENDEXEC.
do.
EXEC SQL.
FETCH NEXT C INTO
:l_sid,
:l_action,
:l_sofar,
:l_totalwork,
:l_percent,
:l_units,
:l_elapsed_time,
:l_time_remaning
ENDEXEC.
if sy-subrc <> 0.
exit.
else.
condense l_sid no-gaps.
wa_atable-sid = l_sid.
wa_atable-action = l_action.
wa_atable-sofar = l_sofar.
wa_atable-totalwork = l_totalwork.
wa_atable-percent = l_percent.
wa_atable-units = l_units.
wa_atable-elapsed_time = l_elapsed_time.
wa_atable-time_remaning = l_time_remaning.
append wa_atable to lt_atable.
endif.
enddo.
EXEC SQL.
CLOSE C
ENDEXEC.
endform. " SELECT
*-----------------------------------------------------------------------
SCREEN:
process before output.
module t_pranal_init.
loop at lt_atable
into wa_atable
with control t_pranal
cursor t_pranal-current_line.
endloop.
module status_1000.
process after input.
loop at lt_atable.
chain.
field wa_atable-sid.
field wa_atable-action.
field wa_atable-sofar.
field wa_atable-totalwork.
field wa_atable-percent.
field wa_atable-units.
field wa_atable-elapsed_time.
field wa_atable-time_remaning.
endchain.
endloop.
module user_command_1000.
Таблицу нам вставит Волшебник:
Результат:
Комментариев нет:
Отправить комментарий