前言
在 Oracle E-Business Suite 中存在一个并发处理机制:并发请求,用户在提交请求后,即可离开界面,请求会在后台继续执行。其包括两类组件:并发管理器 和 并发请求,总体流程是说用户提交请求后,会将进到请求队列中,内部管理器 会根据规则分配给合适的管理器(一般默认标准管理器)
问题描述
有一个客户化开票程序 CUX_自动开票主程序 ,每天会定时运行,其间会提交大量标准开票程序 自动开票主程序 ,导致将默认的标准管理器的并发数全部占用,期间其他请求只能等待;且 自动开票主程序 自身在大量同时跑的情况下,也会出现异常错误 APP-AR-11526: ORA-20011: Approximate NDV failed: ORA-00039: 定期操作期间出错
解决方案
客制化并发管理器 CUX_应收开票管理器 ,针对 自动开票主程序 单独管理,设置其最大并发数为 10
设置步骤
1. 标准管理器添加特殊规则,排除自动开票主程序
(1)系统管理员 - 并发 - 经理 - 定义,打开并发管理器定义界面,查找 标准管理器

(2)打开特殊规则界面,如下添加一行,将 自动开票主程序 排除,保存

2.新建并发管理器 CUX_应收开票管理器
(1)回到定义页面,新增 CUX_应收开票管理器(可以参考标准管理器进行设置)

(2)打开特殊规则界面,如下添加一行,将 自动开票主程序 包括

(3)打开工作班次界面,设置流程数为 10,即标识最大并发数为 10

(4)保存后退出界面,此时会自动提交请求 建立并发请求队列视图 ,以及对涉及并发管理器重启的请求: Restart Concurrent Manager (重新启动) ,等待运行完成。
ps: 这不重要,后面大概率还是需要重启并发管理器。
3. 重启并发管理器
等上一步自动提交的请求完成,查看并发管理器状态,如果 标准管理器 和 CUX_应收开票管理器 的状态异常,比如卡在 正在重新启动,可以按一般并发管理器启动异常的处理方式,通过脚本重启
进入应用层,执行以下脚本重启并发:
cd $ADMIN_SCRIPTS_HOME
adcmctl.sh stop apps/apps
adcmctl.sh start apps/apps
标准管理器 和 CUX_应收开票管理器 的状态若仍显示需要重新启动或者激活,则点击对应的按钮,等待。
4.其他
设置完毕后,可以通过一下 sql 查看提交请求使用的并发管理器是否和预期一致:
SELECT fcr.request_id
,fcpv.user_concurrent_program_name
,fcr.requested_start_date
,fcr.actual_start_date
,fcr.actual_completion_date
,fcq.user_concurrent_queue_name
FROM fnd_concurrent_requests fcr
,fnd_concurrent_programs_vl fcpv
,fnd_concurrent_processes fcp
,fnd_concurrent_queues_vl fcq
WHERE 1 = 1
AND fcr.concurrent_program_id = fcpv.concurrent_program_id
AND fcr.controlling_manager = fcp.concurrent_process_id
AND fcp.concurrent_queue_id = fcq.concurrent_queue_id
AND fcpv.user_concurrent_program_name = '自动开票主程序'
AND fcr.requested_start_date > SYSDATE - 3
ORDER BY fcr.request_id;