所以说, concurrent manager 是有层级关系的, 一个进程由另一个进程产生, 有的进程运行完就消失, 有的会一直存在. 所有上面提到的这些进程都有一个父进程, 就是FNDSM (standard manager), 由它产生其他的 concurrent manager, 而FNDSM (PID=7686) 这个进程和 Form 进程(PID = 5762)是处于相同地位的, 也就是说, Form 和 FNDSM 是相同地位的两个进程, 有时候我们启动了 Form 服务, 但是没有启动 concurrent manager 服务, 那么提交请求的时候就会报 "no manager" 的警告.
最后说一下怎样启动 FNDSM 进程. 在 $ADMIN_SCRIPTS_HOME 目录下有一些很好用的脚本, adcmctl.sh 用于管理 concurrent manager 的启动与停止, adcmctl.sh stop/start apps/apps 可以用来停止/开始 concurrent manager 服务.
[oracle@erik-lnx scripts]$ adcmctl.sh stop apps/apps You are running adcmctl.sh version 120.17.12010000.5 Shutting down concurrent managers for VID ...
[oracle@erik-lnx scripts]$ ps -aef |grep 'FNDLIBR' oracle 8576 6181 0 20:27 pts/1 00:00:00 grep FNDLIBR [oracle@erik-lnx scripts]$ ps -aef |grep 'FNDSM' oracle 8578 6181 0 20:27 pts/1 00:00:00 grep FNDSM
发现 FNDSM 进程已经消失了. 这时提交任何请求都会报 "no manager" 的警告. 重新启动之后提交的请求就会继续被处理了.
最后的最后, 说下由不同进程产生的SQL trace 的特点, 打开 .trc 文件, 在文件开头查找 MODULE, 就可以看到产生 trace 的进程是哪个了. 例如:
*** MODULE NAME:(SQL*Plus) *** MODULE NAME:(e:PO:cp:RCVOLTM14) *** MODULE NAME:(RVCTP@erik-lnx.oracle.com (TNS V1-V3)) *** MODULE NAME:(frmweb@erik-lnx.oracle.com (TNS V1-V3)) --Form 进程 *** MODULE NAME:(fnd.framework.service.lookups.server.LookUpAM:R) --OAF 进程