Oracle逻辑更新后Uniface漏数据,如何获取其真实查询语句?
获取Uniface查询Oracle的真实SQL语句方法
方法一:Oracle端拦截(无需修改Uniface代码)
- 启用SQL Trace跟踪会话
定位Uniface连接Oracle使用的数据库用户,执行以下命令开启会话跟踪:
在Uniface界面触发目标查询后,关闭跟踪:ALTER SESSION SET SQL_TRACE = TRUE;
到Oracle的ALTER SESSION SET SQL_TRACE = FALSE;user_dump_dest目录找到生成的跟踪文件,用TKPROF工具格式化后,即可查看Uniface执行的完整SQL语句。 - 通过V$SQL视图实时查询
触发Uniface查询后,立即执行以下SQL,筛选出目标用户最近执行的语句:
替换实际用户名后,能快速定位到Uniface发送的查询语句。SELECT sql_text, elapsed_time FROM v$sql WHERE parsing_schema_name = 'Uniface连接的Oracle用户名' ORDER BY last_active_time DESC; - 用DBMS_MONITOR跟踪指定会话
先通过V$SESSION视图找到Uniface对应的会话ID和序列号,执行以下命令开启跟踪:
完成操作后关闭跟踪:EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => 目标会话ID, serial_num => 会话序列号, waits => TRUE, binds => TRUE);EXEC DBMS_MONITOR.SESSION_TRACE_DISABLE(session_id => 目标会话ID, serial_num => 会话序列号);
方法二:Uniface端启用SQL日志(无需修改业务代码)
在Uniface的配置文件usys.ini中添加以下配置:
[LOGGING] SQL=3
重启Uniface服务后,操作界面触发查询,Uniface的log目录下会生成包含所有SQL语句(含绑定变量实际值)的日志文件。
内容的提问来源于stack exchange,提问作者kbd
相关产品推荐
相关产品推荐

