How to Find Which Concurrent Program Is Executed by Which Custom Concurrent Manager in Oracle EBS 12.2
In Oracle E-Business Suite 12.2, concurrent programs may be eligible to run under the Standard Manager or one or more custom Concurrent Managers based on specialization rules.
However, eligibility does not necessarily prove which manager actually executed a request. To identify the manager that processed a concurrent request, use the CONTROLLING_MANAGER column in FND_CONCURRENT_REQUESTS.
The following production-safe, read-only SQL queries provide:
- Concurrent programs executed by each custom manager
- Request-level execution details
- Program execution counts
- First and last execution times
- Average runtime
- Manager name and short name
Important distinction
There are two different requirements:
- Actual execution history: Which manager actually executed a request?
- Manager eligibility: Which managers are allowed to execute a program based on specialization rules?
The queries in this article show the actual execution history.
A program can be eligible for multiple managers, but each individual request is processed by one Concurrent Manager process. The relationship is captured through:
FND_CONCURRENT_REQUESTS.CONTROLLING_MANAGER
↓
FND_CONCURRENT_PROCESSES.CONCURRENT_PROCESS_ID
↓
FND_CONCURRENT_QUEUESQuery 1: Programs executed by each custom Concurrent Manager
The following query returns a distinct list of programs historically executed by custom Concurrent Managers:
SELECT DISTINCT
fcq.user_concurrent_queue_name manager_name,
fcq.concurrent_queue_name manager_short_name,
fav.application_name,
fcp.concurrent_program_name program_short_name,
fcp.user_concurrent_program_name program_name
FROM apps.fnd_concurrent_requests fcr
JOIN apps.fnd_concurrent_processes fpr
ON fpr.concurrent_process_id = fcr.controlling_manager
JOIN apps.fnd_concurrent_queues_vl fcq
ON fcq.application_id = fpr.queue_application_id
AND fcq.concurrent_queue_id = fpr.concurrent_queue_id
JOIN apps.fnd_concurrent_programs_vl fcp
ON fcp.application_id = fcr.program_application_id
AND fcp.concurrent_program_id = fcr.concurrent_program_id
JOIN apps.fnd_application_vl fav
ON fav.application_id = fcr.program_application_id
WHERE fcr.actual_start_date IS NOT NULL
AND fcq.concurrent_queue_name NOT IN
('FNDICM', 'STANDARD', 'FNDCRM', 'FNDIM', 'FNDSM')
ORDER BY
fcq.user_concurrent_queue_name,
fav.application_name,
fcp.user_concurrent_program_name;Output columns
MANAGER_NAME: User-friendly Concurrent Manager nameMANAGER_SHORT_NAME: Internal Concurrent Manager short nameAPPLICATION_NAME: Application that owns the programPROGRAM_SHORT_NAME: Internal concurrent program namePROGRAM_NAME: User concurrent program name
The standard Oracle managers are excluded so that the output focuses on custom managers.
Query 2: Detailed request execution history
Use the following query to display the request ID, manager, program, phase, status, start time, completion time, and runtime:
SELECT fcr.request_id,
fcq.user_concurrent_queue_name manager_name,
fcq.concurrent_queue_name manager_short_name,
fav.application_name,
fcp.concurrent_program_name program_short_name,
fcp.user_concurrent_program_name program_name,
fcr.actual_start_date,
fcr.actual_completion_date,
ROUND(
(NVL(fcr.actual_completion_date, SYSDATE) -
fcr.actual_start_date) * 24 * 60,
2
) runtime_minutes,
DECODE(fcr.phase_code,
'P', 'Pending',
'R', 'Running',
'C', 'Completed',
'I', 'Inactive',
fcr.phase_code) phase,
DECODE(fcr.status_code,
'A', 'Waiting',
'B', 'Resuming',
'C', 'Normal',
'D', 'Cancelled',
'E', 'Error',
'G', 'Warning',
'H', 'On Hold',
'I', 'Normal',
'M', 'No Manager',
'Q', 'Standby',
'R', 'Normal',
'S', 'Suspended',
'T', 'Terminating',
'U', 'Disabled',
'W', 'Paused',
'X', 'Terminated',
'Z', 'Waiting',
fcr.status_code) status
FROM apps.fnd_concurrent_requests fcr
JOIN apps.fnd_concurrent_processes fpr
ON fpr.concurrent_process_id = fcr.controlling_manager
JOIN apps.fnd_concurrent_queues_vl fcq
ON fcq.application_id = fpr.queue_application_id
AND fcq.concurrent_queue_id = fpr.concurrent_queue_id
JOIN apps.fnd_concurrent_programs_vl fcp
ON fcp.application_id = fcr.program_application_id
AND fcp.concurrent_program_id = fcr.concurrent_program_id
JOIN apps.fnd_application_vl fav
ON fav.application_id = fcr.program_application_id
WHERE fcr.actual_start_date >= SYSDATE - 30
AND fcq.concurrent_queue_name NOT IN
('FNDICM', 'STANDARD', 'FNDCRM', 'FNDIM', 'FNDSM')
ORDER BY fcr.actual_start_date DESC;This query displays the executions from the last 30 days.
Changing the reporting period
Last 24 hours
WHERE fcr.actual_start_date >= SYSDATE - 1Last seven days
WHERE fcr.actual_start_date >= SYSDATE - 7Last 30 days
WHERE fcr.actual_start_date >= SYSDATE - 30Last 90 days
WHERE fcr.actual_start_date >= SYSDATE - 90Last year
WHERE fcr.actual_start_date >= ADD_MONTHS(SYSDATE, -12)Query 3: Manager-wise program execution count
The following query shows how many times each program was executed by each custom manager during the last 90 days:
SELECT fcq.user_concurrent_queue_name manager_name,
fcq.concurrent_queue_name manager_short_name,
fav.application_name,
fcp.concurrent_program_name program_short_name,
fcp.user_concurrent_program_name program_name,
COUNT(*) execution_count,
MIN(fcr.actual_start_date) first_execution,
MAX(fcr.actual_start_date) last_execution,
ROUND(
AVG(
(NVL(fcr.actual_completion_date, SYSDATE) -
fcr.actual_start_date) * 24 * 60
),
2
) average_runtime_minutes
FROM apps.fnd_concurrent_requests fcr
JOIN apps.fnd_concurrent_processes fpr
ON fpr.concurrent_process_id = fcr.controlling_manager
JOIN apps.fnd_concurrent_queues_vl fcq
ON fcq.application_id = fpr.queue_application_id
AND fcq.concurrent_queue_id = fpr.concurrent_queue_id
JOIN apps.fnd_concurrent_programs_vl fcp
ON fcp.application_id = fcr.program_application_id
AND fcp.concurrent_program_id = fcr.concurrent_program_id
JOIN apps.fnd_application_vl fav
ON fav.application_id = fcr.program_application_id
WHERE fcr.actual_start_date >= SYSDATE - 90
AND fcq.concurrent_queue_name NOT IN
('FNDICM', 'STANDARD', 'FNDCRM', 'FNDIM', 'FNDSM')
GROUP BY
fcq.user_concurrent_queue_name,
fcq.concurrent_queue_name,
fav.application_name,
fcp.concurrent_program_name,
fcp.user_concurrent_program_name
ORDER BY
fcq.user_concurrent_queue_name,
execution_count DESC;This report is useful for:
- Identifying which programs are processed by each custom manager
- Understanding manager workload
- Finding frequently executed programs
- Reviewing average program runtime
- Supporting Concurrent Manager capacity planning
- Validating custom manager utilization before migration or cloning
Query 4: Show all managers, including the Standard Manager
Remove the custom-manager exclusion condition when you need the complete manager mapping.
Remove:
AND fcq.concurrent_queue_name NOT IN
('FNDICM', 'STANDARD', 'FNDCRM', 'FNDIM', 'FNDSM')The output will then include requests processed by both seeded and custom Concurrent Managers.
Query 5: Find the manager for a specific request ID
When troubleshooting an individual concurrent request, use:
SELECT fcr.request_id,
fcq.user_concurrent_queue_name manager_name,
fcq.concurrent_queue_name manager_short_name,
fpr.concurrent_process_id,
fpr.os_process_id,
fcp.user_concurrent_program_name program_name,
fcr.actual_start_date,
fcr.actual_completion_date
FROM apps.fnd_concurrent_requests fcr
JOIN apps.fnd_concurrent_processes fpr
ON fpr.concurrent_process_id = fcr.controlling_manager
JOIN apps.fnd_concurrent_queues_vl fcq
ON fcq.application_id = fpr.queue_application_id
AND fcq.concurrent_queue_id = fpr.concurrent_queue_id
JOIN apps.fnd_concurrent_programs_vl fcp
ON fcp.application_id = fcr.program_application_id
AND fcp.concurrent_program_id = fcr.concurrent_program_id
WHERE fcr.request_id = &request_id;The query prompts for the concurrent request ID and returns the manager and operating-system process information.
Why pending requests may not appear
Pending requests may not yet have a value in CONTROLLING_MANAGER. The manager is normally identified after the request is selected and processed.
Therefore, these queries are intended primarily for:
- Running requests
- Completed requests
- Historical execution analysis
To determine which managers could potentially execute a pending request, the Concurrent Manager specialization rules must be evaluated separately.
Production safety
All queries in this article are read-only. They do not update Concurrent Manager definitions, concurrent requests, or specialization rules.
Before running a large historical query in production:
- Restrict the query using
ACTUAL_START_DATE. - Start with the last one, seven, or 30 days.
- Avoid querying the complete request history during peak hours.
- Export large results using SQL Developer, SQLcl, SQL*Plus, or an approved reporting tool.
- Review the execution plan if the request tables contain substantial historical data.
Conclusion
It is possible to identify which concurrent program was executed by which custom Concurrent Manager in Oracle EBS 12.2.
The most reliable historical relationship is:
Concurrent Request
→ Controlling Manager Process
→ Concurrent Manager Queue
→ Concurrent ProgramThese queries show the manager that actually executed each request. They should not be interpreted as the complete specialization-rule configuration because a program can be eligible for multiple managers while its individual request is executed by only one manager.
No comments:
Post a Comment