Archives for May 2008

跟踪(Trace)并发请求

Oracle EBS中跟踪form执行非常简单,可以直接在菜单:帮助->诊断->跟踪 中启用跟踪功能。对于并发请求,稍见麻烦。

如果要对某个并发程序进行跟踪,则先进系统管理员职责,在并发程序定义界面找到该并发程序,勾选“启用跟踪”。在运行该请求的时候,会自动启用跟踪功能。如果需要跟踪绑定变量,要先执行bde_system_event_10046.sql (参考metalink:179848.1)。

用以下SQL找到相应的trc文件:

SELECT 'Request id: ' || request_id,
'Trace id: ' || oracle_process_id,
'Trace Flag: ' || req.enable_trace,
'Trace Name:
' || dest.VALUE || '/' || lower(dbnm.VALUE) || '_ora_' ||
oracle_process_id || '.trc',
'Prog. Name: ' || prog.user_concurrent_program_name,
'File Name: ' || execname.execution_file_name ||
execname.subroutine_name,
'Status : ' || decode(phase_code, 'R', 'Running') || '-' ||
decode(status_code, 'R', 'Normal'),
'SID Serial: ' || ses.sid || ',' || ses.serial#,
'Module : ' || ses.module
FROM fnd_concurrent_requests req,
v$session ses,
v$process proc,
v$parameter dest,
v$parameter dbnm,
fnd_concurrent_programs_vl prog,
fnd_executables execname
WHERE req.request_id = &request
AND req.oracle_process_id = proc.spid(+)
AND proc.addr = ses.paddr(+)
AND dest.NAME = 'user_dump_dest'
AND dbnm.NAME = 'db_name'
AND req.concurrent_program_id = prog.concurrent_program_id
AND req.program_application_id = prog.application_id
AND prog.application_id = execname.application_id
AND prog.executable_id = execname.executable_id;

一个请求产生的trace文件可能达到几十至数百兆,最后可别忘了关闭跟踪功能。

申请单到采购订单

Oracle采购模块在用申请单自动创建采购订单时,是和用申请单自动创建询价单后的报价路线相对独立的,如果需要引用报价,需要手工从供应商产品目录中选择历次报价。

有时候,业务上需要采购订单针对某次报价,不一定按最新报价采购,如果从目录中选择价格分段,是无法区分出这种业务需求的。事实上,Oracle在处理申请单自动创建询价单的时候,仅针对物料和供应商进行,并不在询价单中记录来源申请单的信息。如下图所示,我用虚线标识出这种断开的链接关系。

事实上,询价单、报价单和采购订单,在Oracle的系统设计上是类似的,主要数据存放在下列基表中:

  • po_headers_all 头信息
  • po_lines_all 行信息
  • po_line_locations_all 发运行
  • po_distributions_all 分配行