You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 12c数据库追踪仅显示参数名,如何查看实际值及优化追踪?

问题描述

已完成数据库设计,开启SQL追踪后,trace文件仅显示参数占位符(如:B6)而非实际参数值,无法对应应用各页面的查询操作。同时希望了解获取应用端用户执行查询的更优方案,或优化当前追踪配置以获取带真实参数值的完整语句。

已执行的操作:

ALTER SYSTEM SET sql_trace = TRUE;
SELECT * FROM V$SESSION WHERE USERNAME = 'myDb';
EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => 1338 , serial_num => 8269, waits => TRUE, binds => TRUE);

使用tkprof处理trace文件的命令:

tkprof myTraceFile.trc myTraceTxtFile.txt sys=no sort=fchela

处理后的输出片段:

SQL ID: 9m22qp63dh8tp Plan Hash: 0

ALTER SESSION SET REMOTE_DEPENDENCIES_MODE=SIGNATURE


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        2      0.00       0.00          0          0          0           0
Execute      2      0.00       0.00          0          0          0           0
Fetch        0      0.00       0.00          0          0          0           0
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        4      0.00       0.00          0          0          0           0

Misses in library cache during parse: 0
Parsing user id: 588  
********************************************************************************

SQL ID: 3hvc6qdvdxkf4 Plan Hash: 0

INSERT INTO DOCUMENT (DOC_NO, TAX_TYPE_NO, TAX_PERIOD_NO, TAX_PAYER_NO, 
  DOC_TYPE_NO, CREATED_DATE, LETTER_NO, ASSESS_NO, RECEIVED_DATE, 
  PRINTED_DATE) 
VALUES
 (:B56 , :B55 , :B54 , :B53 , :B52 , :B51 , :B50 , :B49 , :B48 , :B47 , :B46)

需求:获取包含真实参数值的完整查询语句。


解决方案

一、优化当前追踪配置获取绑定变量值

你的SESSION_TRACE_ENABLE已经设置了binds => TRUE,但tkprof默认不会输出绑定变量信息,需调整命令参数:

  1. 修改tkprof命令
    添加binds=yes参数,让处理后的文件包含绑定变量实际值:

    tkprof myTraceFile.trc myTraceTxtFile.txt sys=no sort=fchela binds=yes
    

    重新执行后,输出文件会新增类似如下的绑定变量条目:

    BINDS FOR SQL_ID 3hvc6qdvdxkf4:
    -------------
    B56 (VARCHAR2(10)): 'DOC20240501'
    B55 (NUMBER): 1001
    ...
    
  2. 直接查看原始trace文件
    原始.trc文件本身包含绑定变量的详细信息,搜索BINDING关键词即可找到每个占位符对应的实际值,无需依赖tkprof处理。

二、更优的查询追踪方案

1. 动态性能视图实时查询

无需开启trace,直接通过V$SQL和V$SQL_BIND_CAPTURE视图获取已执行SQL的绑定变量:

SELECT
    s.sql_id,
    SUBSTR(s.sql_text, 1, 200) AS sql_text,
    bc.name AS bind_name,
    bc.value_string AS bind_value
FROM
    V$SQL s
JOIN
    V$SQL_BIND_CAPTURE bc ON s.sql_id = bc.sql_id
WHERE
    s.parsing_user_id = (SELECT user_id FROM all_users WHERE username = 'myDb')
ORDER BY
    s.last_active_time DESC;

该方法实时性强,适合临时排查特定用户的SQL执行情况。

2. 客户端标识符精准追踪

若需关联应用页面或用户,可通过设置客户端标识符实现精准追踪:

  • 应用端在数据库连接时设置标识符(如对应页面ID):
    EXEC DBMS_SESSION.SET_IDENTIFIER('APP_PAGE_INVOICE_CREATE');
    
  • 数据库端开启该客户端的追踪:
    EXEC DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE(client_id => 'APP_PAGE_INVOICE_CREATE', binds => TRUE);
    

这样可只追踪目标页面的所有SQL及绑定变量,减少无用日志。

3. AWR报告分析历史SQL

若需分析长期运行的SQL及绑定变量,可生成AWR(Automatic Workload Repository)报告,报告中包含高频执行SQL的绑定变量统计信息,适合性能分析场景。


内容的提问来源于stack exchange,提问作者Shakor Maiwand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:17:11