我平时接触到的EBS 模块主要是下面几个: PO, INV, OM. 因此也经常需要收集相关的log 信息. 如果界面上报错了, 可以很容易从log 里面看到是哪里的代码执行报错.
这篇博客总结了收集上述几个log 的方法, 和sql trace 以及frd log.
1. OM log
这个主要记录OM 模块的日志. OM 模块的代码文件以OE 开头, 文件里面有记录日志的语句: oe_debug_pub.add(). 写在这个语句的内容会被写到日志中.
设置profile
OM: Debug Level = 5
OM: Debug Log Directory = /usr/tmp
log 目录默认的是 /dbfiles/applcsf/log, 但是这个目录不存在, 而且无法创建... 我们只好转到/usr/tmp 目录下了. 其实只要是 select value from v$parameter where name = ‘utl_file_dir‘ 得到的目录都可以.
然后打开Sales Order form, 选择 menu -> Tools -> debug
会弹出一个窗口:
然后就可以在/usr/tmp 目录下找到log 了.
2. INV log
设置profile
3. RCV log -- 在 patch 9184617:R12.PO.A 之后, RCV log 是打印在INV log 里面的. 因此R12 的只要设置INV 和RCV 的profile, 就可以在INV log 里面拿到RCV log 了.
4. SQL trace
可以在form 界面上设置, 但是这只能收集到form 界面上的SQL, 后续调用的concurrent 使用的SQL 是收集不到的.
要收集所有的sql trace, 设置下面的 profile
"Initialization SQL Statement - Custom" = "Begin fnd_ctl.fnd_sess_ctl(‘‘,‘‘,‘TRUE‘,‘TRUE‘,‘LOG‘,‘ALTER SESSION SET TRACEFILE_IDENTIFIER=‘||‘‘‘‘||‘file_name‘||‘‘‘‘||‘ EVENTS=‘||‘‘‘‘||‘10046 TRACE NAME CONTEXT FOREVER, LEVEL 12‘||‘‘‘‘);End;"
SQL trace 的文件在 SELECT value FROM v$parameter WHERE name =‘user_dump_dest‘ 这个目录下;
5. FRD log
FRD log 可以记录form 界面上所执行的trigger. 收集的方法是设置profile:
"ICX: Forms Launcher" = "http://hostname.domain:port/forms/frmservlet?record=collect"
上面hostname, domain, port 要根据自己的instance 修改. 像我的: http://bej301441.cn.oracle.com:8001/forms/frmservlet?record=collect
保存之后logout 再login, 这时会弹出一个窗口提示FRD log 已经打开.