Wbe Script
Wbe Script
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
REM
HEADER
$Header: atg_supp_wfbkgrnd.sql v1.0 AXGONZAL $
set
set
set
set
SET
SET
arraysize 1
heading off
feedback off
verify off
CONCAT ON
CONCAT .
MODIFICATION LOG:
Created: Dec 30th, 2008
7-FEB-2009 AXGONZAL modified queries
This script was created to collect the required information
to analyze wf background engine problems
How to run it?
sqlplus apps/<password>
@atg_supp_wfbkgrnd.sql
Parameter:
None
Output file
wf_bkgrnd.html
<HTML>
<HEAD>
<TITLE>Workflow Backgroun Engine Diagnostic Script </TITLE>
<STYLE TYPE="text/css">
<!-- TD {font-size: 8pt; font-family: arial; font-style: normal} -->
</STYLE>
</HEAD>
<BODY>
prompt <P><P>
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
<TABLE BORDER=1>
<TR><TD COLSPAN=5 BGCOLOR==BLUE><FONT COLOR=WHITE FACE=ARIAL>
<B>Workflow Backgroun Engine
<BR>Quick Links to Tables</B></TD></TR>
<TR>
<TD><A HREF="#dbp">Database Parameters</A></TD>
<TD><A HREF="#dbaq">DBA_QUEUES</A></TD>
<TD><A HREF="#wfd">WF_DEFERRED_TABLE_M</A></TD>
<TD><A HREF="#wfa">Activities in Deferred Status</A></TD>
</TR>
<TR>
<TD><A HREF="#wfiav">WF_ITEM_ATTRIBUTE_VALUES</A></TD>
<TD><A HREF="#wfas">WF_ITEM_ACTIVITY_STATUSES</A></TD>
<TD><A HREF="#fndcp">FND_CONCURRENT_PROGRAMS</A></TD>
<TD><A HREF="#pkg">PACKAGE_VERSIONS</A></TD>
</TR>
</TABLE><P><P>
prompt </FONT>
REM
REM ******* DATABASE PARAMETERS *******
REM
prompt <TABLE BORDER=1>
prompt <TR><TD COLSPAN=12 BGCOLOR=BLUE><font color=white face=arial>
prompt <B><A NAME="dbp"> DB PARAMETERS </A></B></TD></TR>
prompt <TD><B>NAME</B></TD>
prompt <TD><B>VALUE</B></TD></TR>
select
'<TR><TD>'||NAME||'</TD>'||chr(10)||
'<TD>'||VALUE||'</TD>'||chr(10)||'</TD></TR>'
from v$parameter
where upper(name) in ('AQ_TM_PROCESSES','JOB_QUEUE_PROCESSES','JOB_QUEUE_INTERVA
L')
order by name;
prompt </TABLE><P><P>
prompt <TABLE BORDER=1>
prompt <TR><TD COLSPAN=2 BGCOLOR=Beige><font color=maroon face=arial>
prompt If aq_tm_processes value is equal to zero, please contact the DBA to chan
ge it to 1 or higher.</TD></TR>
prompt </TABLE><P><P>
REM
REM ******* DBA_QUEUES *******
REM
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
prompt
<TABLE BORDER=1>
<TR><TD COLSPAN=9 BGCOLOR=BLUE><font color=white face=arial>
<B><A NAME="dbaq"> DBA_QUEUES </A></B></TD></TR>
<TR>
<TD><B>OWNER</B></TD>
<TD><B>QUEUE_NAME</B></TD>
<TD><B>ENQUEUE</B></TD>
<TD><B>DEQUEUE</B></TD>
<TD><B>RETRIES</B></TD>
<TD><B>RETENTION</B></TD>
<TD><B>DELAY</B></TD>
select
'<TR><TD>'||q.OWNER||'</TD>'||chr(10)||
'<TD>'||q.NAME||'</TD>'||chr(10)||
'<TD>'||q.ENQUEUE_ENABLED||'</TD>'||chr(10)||
'<TD>'||q.DEQUEUE_ENABLED||'</TD>'||chr(10)||
'<TD>'||to_char(q.MAX_RETRIES)||'</TD>'||chr(10)||
'<TD>'||q.RETENTION||'</TD>'||chr(10)||
'<TD>'||to_char(q.RETRY_DELAY)||'</TD></TR>'
from ALL_QUEUES q
where (q.NAME like '%WF_DEFERRED_%')
order by q.NAME;
prompt </TABLE><P><P>
REM
REM ******* WF_DEFERRED_TABLE_M *******
REM
prompt <TABLE BORDER=1>
prompt <TR><TD COLSPAN=12 BGCOLOR=BLUE><font color=white face=arial>
prompt <B><A NAME="wfd">WF_DEFERRED_TABLE_M - All Event Information</A></B></TD>
</TR>
prompt <TR>
prompt <TD>ITEM_TYPE</TD>
prompt <TD>ITEM_KEY</TD>
prompt <TD>STATE</TD>
prompt <TD>PRIORITY</TD>
prompt <TD>w.ENQ_TIME</TD>
prompt <TD>w.DEQ_TIME</TD>
prompt <TD>w.MSGID</TD>
select
'<TR><TD>'||w.user_data.itemtype||'</TD>'||chr(10)||
'<TD>'||decode(w.state, 0, '0 = Ready',1, '1 = Delayed',2, '2 = Retained/Process
ed',3, '3 = Exception',to_char(w.state))||'</TD>'||chr(10)||
'<TD>'||count(*)||'</TD>'||chr(10)||'</TD></TR>'
from wf_deferred_table_m w
group by w.user_data.itemtype, w.state;
prompt </TABLE><P><P>
prompt
prompt
prompt
prompt
prompt
prompt
prompt
<TABLE BORDER=1>
<TR><TD COLSPAN=2 BGCOLOR=Beige><font color=maroon face=arial>
Ready = Activity is ready to be processed </B><br>
Delayed = Activity will be processed later<br>
Retained = Activity was already processed<br>
Exception = Activity had an error </TD></TR>
</TABLE><P><P>
REM
REM ******* WF_ITEM_ACTIVITY_STATUSES *******
REM
prompt <TABLE BORDER=1>
prompt <TR><TD COLSPAN=12 BGCOLOR=BLUE><font color=white face=arial>
prompt <B><A NAME="wfa">WF_ITEM_ACTIVITY_STATUSES - Activities in Deferred Statu
s</A></B></TD></TR>
prompt <TR>
prompt <TD>ITEM_TYPE</TD>
prompt <TD>ITEM_KEY</TD>
prompt <TD>ROOT_ACTIVITY</TD>
prompt <TD>ROOT_ACTIVITY_VERSION</TD>
prompt <TD>ITEM_BEGIN_DATE</TD>
prompt <TD>END_DATE</TD>
prompt <TD>ACTIVITY_LABEL</TD>
prompt <TD>ACTIVITY_STATUS</TD>
prompt <TD>ACTIVITY_RESULT_CODE</TD>
prompt <TD>ERROR_NAME</TD>
prompt <TD>ACTIVITY_BEGIN_DATE</TD>
select
'<TR><TD>'||wi.item_type||'</TD>'||chr(10)||
'<TD>'||wi.item_key||'</TD>'||chr(10)||
'<TD>'||wi.root_activity||'</TD>'||chr(10)||
'<TD>'||wi.root_activity_version||'</TD>'||chr(10)||
'<TD>'||wi.begin_date||'</TD>'||chr(10)||
'<TD>'||wi.end_date||'</TD>'||chr(10)||
'<TD>'||PRA.INSTANCE_LABEL||'</TD>'||chr(10)||
'<TD>'||was.activity_status||'</TD>'||chr(10)||
'<TD>'||was.ACTIVITY_RESULT_CODE||'</TD>'||chr(10)||
'<TD>'||was.error_name||'</TD>'||chr(10)||
'<TD>'||was.begin_date||'</TD>'||chr(10)||'</TD></TR>'
from wf_items wi, wf_item_activity_statuses was, wf_process_activities PRA
where wi.item_type = was.item_type
and wi.item_key = was.item_key
and wi.end_date is null
and was.end_date is null
and was.activity_status = 'DEFERRED'
and was.item_type = wi.item_type
and was.item_key = wi.item_key
and PRA.instance_id(+) = was.process_activity
order by wi.item_key;
prompt </TABLE><P><P>
REM
REM ******* WF_ITEM_ATTRIBUTE_VALUES *******
REM
prompt <TABLE BORDER=1>
prompt <TR><TD COLSPAN=9 BGCOLOR=BLUE><font color=white face=arial>
prompt <B><A NAME="wfiav">WF_ITEM_ATTRIBUTE_VALUES table - Items with more than
1000 rows</A></B></TD></TR>
prompt <TR>
prompt <TD><B>ITEM_TYPE</B></TD>
prompt <TD><B>COUNT</B></TD>
select
'<TR><TD>'||ITEM_TYPE||'</TD>'||chr(10)||
'<TD>'||COUNT(*)||'</TD></TR>'
from WF_ITEM_ATTRIBUTE_VALUES
group by item_type
having count(*) > 1000
order by COUNT(*) desc;
prompt </TABLE><P><P>
REM
REM ******* WF_ITEM_ACTIVITY_STATUSES *******
REM
prompt <TABLE BORDER=1>
prompt <TR><TD COLSPAN=9 BGCOLOR=BLUE><font color=white face=arial>
prompt <B><A NAME="wfas">WF_ITEM_ACTIVITY_STATUSES table - Items with more than
1000 rows</A></B></TD></TR>
prompt <TR>
prompt <TD><B>ITEM_TYPE</B></TD>
prompt <TD><B>COUNT</B></TD>
select /*+ parallel(ITEM_TYPE,4)*/
'<TR><TD>'||ITEM_TYPE||'</TD>'||chr(10)||
'<TD>'||COUNT(*)||'</TD></TR>'
from WF_ITEM_ACTIVITY_STATUSES
group by item_type
having count(*) > 1000
order by COUNT(*) desc;
prompt </TABLE><P><P>
REM
REM ******* FND_CONCURRENT_PROGRAMS *******
REM
prompt <TABLE BORDER=1>
prompt <TR><TD COLSPAN=9 BGCOLOR=BLUE><font color=white face=arial>
prompt <B><A NAME="fndcp"> Workflow Background Programs Executed Today </A></B><
/TD></TR>
prompt <TR>
prompt <TD><B>REQUEST_ID</B></TD>
prompt <TD><B>PROGRAM_NAME</B></TD>
prompt <TD><B>REQUEST_DATE</B></TD>
prompt <TD><B>PARAMETERS</B></TD>
prompt <TD><B>PHASE</B></TD>
prompt <TD><B>STATUS</B></TD>
select
'<TR><TD>'||r.request_id||'</TD>'||chr(10)||
'<TD>'||p.concurrent_program_name||'</TD>'||chr(10)||
'<TD>'||r.request_date||'</TD>'||chr(10)||
'<TD>'||r.argument_text||'</TD>'||chr(10)||
'<TD>'||a.meaning||'</TD>'||chr(10)||
'<TD>'||b.meaning||'</TD></TR>'
from fnd_concurrent_programs p, fnd_concurrent_requests r, fnd_lookups a, fnd_lo
okups b
where p.concurrent_program_id = r.concurrent_program_id
and p.concurrent_program_name like 'FNDWFBG'
and a.LOOKUP_TYPE = 'CP_PHASE_CODE'
and a.LOOKUP_CODE = r.phase_code
and b.LOOKUP_TYPE = 'CP_STATUS_CODE'
and b.LOOKUP_CODE = r.status_code
and to_char(r.request_date,'MM-DD-YYYY') >= to_char(sysdate,'MM-DD-YYYY')
order by 1 desc;
prompt </TABLE><P><P>
prompt <TABLE BORDER=1>
prompt <TR><TD COLSPAN=2 BGCOLOR=Beige><font color=maroon face=arial>
prompt Development has provided recommendations about how to run this program in
order to avoid performance with it.</B><br>
prompt The recommendation is to run three separate background engines at differe
nt intervals:</B><br>
prompt .</B><br>
prompt a. Run a background engine to handle only deferred activities every 5 to
60 minutes. </B><br>
prompt b. Run a background engine to handle only timed out activities every 1 to
24 hours as needed.</B><br>
prompt c. Run a background engine to handle only stuck processes once a week to
once a month, when the load on the system is low. </B><br>
prompt .</B><br>
prompt For more information refer to Note 266614.1 and Oracle Workflow Administr