Professional Documents
Culture Documents
-----
--
-- analyzereq.sql
-- Analyze a concurrent request
--
-- USAGE: sqlplus apps_user/apps_passwd @analyzereq request_id
-- EX: sqlplus apps/apps @analyzereq 304504
--
--
-- $Id: analyzereq.sql,v 1.4 2001/06/16 22:20:06 pferguso Exp $
--
-- $Log: analyzereq.sql,v $
-- Revision 1.4 2001/06/16 22:20:06 pferguso
-- Removed FND_CONC diagnosis
--
-- Revision 1.3 2001/04/07 19:49:43 pferguso
-- whoa, lots of changes...
--
-- Revision 1.2 2000/04/03 04:18:04 pferguso
-- added print_mgrs, more request info
--
-- Revision 1.1.1.1 2000/02/23 22:00:36 pferguso
-- initial import into CVS
--
-- Revision 1.3 1999-12-29 13:46:44-05 pferguso
-- added responsibility info, logfile names
--
-- Revision 1.2 1999-12-29 13:13:58-05 pferguso
-- first usable version
--
-- Revision 1.1 1999-10-19 18:04:23-04 pferguso
-- Initial revision
--
--
--
-----------------------------------------------------------------------------------
-----
set serveroutput on
set feedback off
set verify off
set heading off
set timing off
prompt
DECLARE
c_status fnd_lookups.meaning%TYPE;
BEGIN
SELECT nvl(meaning, 'UNKNOWN')
INTO c_status
FROM fnd_lookups
WHERE LOOKUP_TYPE = 'CP_STATUS_CODE'
AND LOOKUP_CODE = p_status_code;
return rtrim(c_status);
END get_status;
c_phase fnd_lookups.meaning%TYPE;
BEGIN
SELECT nvl(meaning, 'UNKNOWN')
INTO c_phase
FROM fnd_lookups
WHERE LOOKUP_TYPE = 'CP_PHASE_CODE'
AND LOOKUP_CODE = p_phase_code;
return rtrim(c_phase);
END get_phase;
run_alone_flag varchar2(1);
begin
mgr_defined := FALSE;
mgr_active := FALSE;
mgr_workshift := FALSE;
mgr_running := FALSE;
for mgr_rec in mgr_cursor(req_id) loop
mgr_defined := TRUE;
if (mgr_rec.active = 'Y') then
mgr_active := TRUE;
if (mgr_rec.max_processes > 0) then
mgr_workshift := TRUE;
end if;
if (mgr_rec.running_processes > 0) then
mgr_running := TRUE;
end if;
end if;
end loop;
end manager_check;
BEGIN
reqinfo fnd_concurrent_requests%ROWTYPE;
proginfo fnd_concurrent_programs_vl%ROWTYPE;
c_status fnd_lookups.meaning%TYPE;
m_buf fnd_lookups.meaning%TYPE;
conc_prog_name fnd_concurrent_programs.concurrent_program_name%TYPE;
exe_method_code fnd_concurrent_programs_vl.execution_method_code%TYPE;
conc_app_name fnd_application_vl.application_name%TYPE;
tmp_id number(15);
tmp_status fnd_concurrent_requests.status_code%TYPE;
tmp_date date;
conc_app_id fnd_concurrent_requests.program_application_id%TYPE;
conc_id fnd_concurrent_requests.concurrent_program_id%TYPE;
conc_cd_id fnd_concurrent_requests.cd_id%TYPE;
v_enabled_flag fnd_concurrent_programs.enabled_flag%TYPE;
conflict_domain fnd_conflicts_domain.user_cd_name%TYPE;
parent_id number(15);
resp_name varchar2(100);
rclass_name fnd_concurrent_request_class.request_class_name%TYPE;
exe_file_name fnd_executables.execution_file_name%TYPE;
c_user fnd_user.user_name%TYPE;
last_user fnd_user.user_name%TYPE;
fcd_phase varchar2(48);
fcd_status varchar2(48);
traid fnd_concurrent_requests.program_application_id%TYPE;
trcpid fnd_concurrent_requests.concurrent_program_id%TYPE;
icount number;
ireqid fnd_concurrent_requests.request_id%TYPE;
pcode fnd_concurrent_requests.phase_code%TYPE;
scode fnd_concurrent_requests.status_code%TYPE;
live_child boolean;
mgr_defined boolean;
mgr_active boolean;
mgr_workshift boolean;
mgr_running boolean;
run_alone boolean;
reqlimit boolean := false;
mgrname fnd_concurrent_queues_vl.user_concurrent_queue_name%TYPE;
filename varchar2(255);
qcf fnd_concurrent_programs.queue_control_flag%TYPE;
sep varchar2(200) :=
'------------------------------------------------------';
REQ_NOTFOUND exception;
CURSOR c_wait IS
SELECT request_id, phase_code, status_code
FROM fnd_concurrent_requests
WHERE parent_request_id = p_req_id;
CURSOR c_inc IS
SELECT to_run_application_id, to_run_concurrent_program_id
FROM fnd_concurrent_program_serial
WHERE running_application_id = conc_app_id
AND running_concurrent_program_id = conc_id;
CURSOR c_ireqs IS
SELECT request_id, phase_code, status_code
FROM fnd_concurrent_requests
WHERE phase_code = 'R'
AND program_application_id = traid
AND concurrent_program_id = trcpid
AND cd_id = conc_cd_id;
BEGIN
BEGIN
SELECT *
INTO reqinfo
FROM fnd_concurrent_requests
WHERE request_id = p_req_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
raise REQ_NOTFOUND;
END;
-- Program information
DBMS_OUTPUT.PUT_LINE('Program information:');
SELECT fvl.*
INTO proginfo
FROM fnd_concurrent_programs_vl fvl, fnd_concurrent_requests fcr
WHERE fcr.request_id = p_req_id
AND fcr.concurrent_program_id = fvl.concurrent_program_id
AND fcr.program_application_id = fvl.application_id;
DBMS_OUTPUT.PUT_LINE('Application: '||conc_app_name);
DBMS_OUTPUT.PUT_LINE(sep);
DBMS_OUTPUT.PUT_LINE('
');
DBMS_OUTPUT.PUT_LINE(sep);
-- Submission information
DBMS_OUTPUT.PUT_LINE('Submission information:');
begin
SELECT user_name into c_user from fnd_user
where user_id = reqinfo.requested_by;
exception
when no_data_found then
c_user := '-- UNKNOWN USER --';
end;
begin
SELECT user_name into last_user from fnd_user
WHERE user_id = reqinfo.last_updated_by;
exception
when no_data_found then
last_user := '-- UNKNOWN USER --';
end;
c_status := get_status(reqinfo.status_code);
DBMS_OUTPUT.PUT_LINE(sep);
DBMS_OUTPUT.PUT_LINE('
');
DBMS_OUTPUT.PUT_LINE(sep);
-- Analysis
DBMS_OUTPUT.PUT_LINE('Analysis:');
-- Completed Requests
-----------------------------------------------------------------------------------
--------------------------
IF reqinfo.phase_code = 'C' THEN
BEGIN
SELECT user_concurrent_queue_name
INTO mgrname
FROM fnd_concurrent_queues_vl
WHERE concurrent_queue_id = reqinfo.controlling_manager;
DBMS_OUTPUT.PUT_LINE('It was run by manager: ' || mgrname);
EXCEPTION
WHEN NO_DATA_FOUND THEN
SELECT queue_control_flag
INTO qcf
FROM fnd_concurrent_programs
WHERE concurrent_program_id = reqinfo.concurrent_program_id
AND application_id = reqinfo.program_application_id;
END;
-- Running Requests
-----------------------------------------------------------------------------------
--------------------------
ELSIF reqinfo.phase_code = 'R' THEN
live_child := FALSE;
FOR child in c_wait LOOP
DBMS_OUTPUT.PUT_LINE('It has a child request: '||
child.request_id||' (phase = '||
get_phase(child.phase_code)||
' - status = '||
get_status(child.status_code)||')');
IF child.phase_code != 'C' THEN
live_child := TRUE;
END IF;
END LOOP;
-- Pending Requests
-----------------------------------------------------------------------------------
--------------------------
ELSIF reqinfo.phase_code = 'P' THEN
-- why is it pending?
-- could be scheduled
IF reqinfo.requested_start_date > sysdate or reqinfo.status_code = 'P'
THEN
DBMS_OUTPUT.PUT_LINE('This is a scheduled request.');
DBMS_OUTPUT.PUT_LINE('It is currently scheduled to start running on
'||
to_char(reqinfo.requested_start_date,
'DD-MON-RR HH24:MI:SS'));
DBMS_OUTPUT.PUT_LINE('This should show on the form as
Pending/Scheduled');
GOTO diagnose;
END IF;
-- could be on hold
IF reqinfo.hold_flag = 'Y' THEN
DBMS_OUTPUT.PUT_LINE('This request is currently on hold. It will not
run until the hold is released.');
DBMS_OUTPUT.PUT_LINE('It was placed on hold by: '||last_user||' on '||
to_char(reqinfo.last_update_date, 'DD-MON-RR HH24:MI:SS'));
DBMS_OUTPUT.PUT_LINE('This should show on the form as Inactive/On
Hold');
GOTO diagnose;
END IF;
-- could be disabled
IF proginfo.enabled_flag = 'N' THEN
DBMS_OUTPUT.PUT_LINE('This request is currently disabled.');
DBMS_OUTPUT.PUT_LINE('The concurrent_program '||
proginfo.user_concurrent_program_name ||' needs to be enabled for this request to
run.');
DBMS_OUTPUT.PUT_LINE('This should show on the form as
Inactive/Disabled');
GOTO diagnose;
END IF;
-- check queue_method_code
-- unconstrained requests
IF reqinfo.queue_method_code = 'I' THEN
DBMS_OUTPUT.PUT_LINE('This request is an unconstrained request.
(queue_method_code = I)');
IF reqinfo.status_code = 'I' THEN
DBMS_OUTPUT.PUT_LINE('It is in a "Pending/Normal" status,
ready to be run by the next available manager.');
ELSIF reqinfo.status_code = 'Q' THEN
DBMS_OUTPUT.PUT_LINE('It has a status of "Standby" even
though it is unconstrained. It will not be run by any manager.');
ELSIF reqinfo.status_code IN ('A', 'Z') THEN
DBMS_OUTPUT.PUT_LINE('It is in a "Waiting" status. This
usually indicates a child request waiting for the parent to release it.');
SELECT nvl(parent_request_id, -1)
INTO parent_id
FROM fnd_conc_req_summary_v
WHERE request_id = p_req_id;
IF parent_id = -1 THEN
DBMS_OUTPUT.PUT_LINE('** Unable to find a parent request
for this request');
ELSE
DBMS_OUTPUT.PUT_LINE('It''s parent request id is: ' ||
to_char(parent_id));
END IF;
ELSE
DBMS_OUTPUT.PUT_LINE('Hmmm. A status of ' ||
reqinfo.status_code || '. I was not really expecting to see this status.');
END IF;
-- constrained requests
ELSIF reqinfo.queue_method_code = 'B' THEN
DBMS_OUTPUT.PUT_LINE('This request is a constrained request.
(queue_method_code = B)');
IF reqinfo.status_code = 'I' THEN
DBMS_OUTPUT.PUT_LINE('The Conflict Resolution manager has
released this request, and it is in a "Pending/Normal" status.');
DBMS_OUTPUT.PUT_LINE('It is ready to be run by the next available
manager.');
ELSIF reqinfo.status_code = 'Q' THEN
DBMS_OUTPUT.PUT_LINE('It is in a "Pending/Standby" status.
The Conflict Resolution manager will need to release it before it can be run.');
ELSIF reqinfo.status_code IN ('A', 'Z') THEN
DBMS_OUTPUT.PUT_LINE('It is in a "Waiting" status. This
usually indicates a child request waiting for the parent to release it.');
SELECT nvl(parent_request_id, -1)
INTO parent_id
FROM fnd_conc_req_summary_v
WHERE request_id = p_req_id;
IF parent_id = -1 THEN
DBMS_OUTPUT.PUT_LINE('** Unable to find a parent request
for this request');
ELSE
DBMS_OUTPUT.PUT_LINE('It''s parent request id is: ' ||
to_char(parent_id));
END IF;
ELSE
DBMS_OUTPUT.PUT_LINE('Hmmm. A status of ' ||
reqinfo.status_code || '. I was not really expecting to see this status.');
END IF;
-- incompatible programs
SELECT program_application_id, concurrent_program_id, cd_id
INTO conc_app_id, conc_id, conc_cd_id
FROM fnd_concurrent_requests
WHERE request_id = p_req_id;
icount := 0;
FOR progs in c_inc LOOP
traid := progs.to_run_application_id;
trcpid := progs.to_run_concurrent_program_id;
OPEN c_ireqs;
LOOP
END LOOP;
CLOSE c_ireqs;
END LOOP;
IF icount = 0 THEN
DBMS_OUTPUT.PUT_LINE('No running incompatible requests were found
for request '||p_req_id);
END IF;
-- single threaded
IF reqinfo.single_thread_flag = 'Y' THEN
DBMS_OUTPUT.PUT_LINE('This request is constrained because the
profile option Concurrent: Sequential Requests is set.');
reqlimit := true;
END IF;
-- request limit
IF reqinfo.request_limit = 'Y' THEN
DBMS_OUTPUT.PUT_LINE('This request is constrained because the
profile option Concurrent: Active Request Limit is set.');
reqlimit := true;
END IF;
DBMS_OUTPUT.PUT_LINE(sep);
DBMS_OUTPUT.PUT_LINE('Checking managers available to run this
request...');
END IF;
END IF;
<<diagnose>>
DBMS_OUTPUT.PUT_LINE(sep);
EXCEPTION
WHEN REQ_NOTFOUND THEN
DBMS_OUTPUT.PUT_LINE('Request '||p_req_id||' not found.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error number ' || sqlcode || ' has occurred.');
DBMS_OUTPUT.PUT_LINE('Cause: ' || sqlerrm);
END analyze_request;
BEGIN
analyze_request(req_id);
END;
/
prompt