如何查找Oracle ADF 12c Form后台执行的SQL查询
方案1:启用ADF BC层内置SQL日志
- 找到你ADF应用部署域的
setDomainEnv.sh(Linux)或setDomainEnv.cmd(Windows)文件 - 在JVM启动参数中添加如下配置,开启ADF业务组件的SQL输出能力:
-Djbo.debugoutput=console -Djbo.logging.showLevel=INFO -Djbo.logging.showConnection=true -Djbo.logging.showBindParameters=true - 重启WebLogic域后,所有ADF BC执行的SQL、绑定变量值都会输出到WebLogic对应服务的日志文件中,可以直接匹配操作时间戳筛选对应点击动作触发的SQL
方案2:Oracle EBS端启用表单追踪
- 登录EBS系统,进入系统管理员职责 > 配置文件 > 系统
- 查询配置项
FND: 启用表单运行时诊断,将当前操作账号对应的配置值设置为是 - 重新登录EBS后,打开待追踪的ADF Form,点击路径:帮助 > 诊断 > 追踪 > 开启追踪,选择
SQL追踪+绑定变量选项 - 执行点击弹窗等你要追踪的操作后,关闭追踪,系统会直接生成追踪结果页面,可查看所有执行的SQL语句和参数信息
方案3:Oracle数据库层面会话追踪
如果前两种方案不满足需求,可直接从数据库端抓取会话SQL:
- 先查询ADF应用连接数据库的会话标识,执行SQL:
SELECT sid, serial#, username, machine, program FROM v$session WHERE username = 'ADF应用连接数据库的用户名' AND (program LIKE '%ADF%' OR machine = 'ADF应用部署服务器IP'); - 对目标会话开启10046追踪(级别12会包含SQL语句、绑定变量、等待事件全量信息):
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(sid => 目标SID, serial# => 目标SERIAL#, sql_trace => true); - 执行完待追踪的操作后,关闭会话追踪:
EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(sid => 目标SID, serial# => 目标SERIAL#, sql_trace => false); - 生成的trc追踪文件存放在数据库
USER_DUMP_DEST目录下,用tkprof工具格式化后即可查看完整的SQL执行序列。
内容的提问来源于stack exchange,提问作者silent_explorer
相关产品推荐
相关产品推荐

