我有一个oracle查询生成3137错误,跟踪文件包含查询。 例如:
select x from y where z = :1
我认为如果能够确定具体的价值,这将有助于隔离问题:1,然而,4.7M文件似乎并没有提供这些信息。
这个信息存储在trc文件中吗?
这是运行在redhat上的oracle 11g。
不知道这里描述的.trc文件是否与你的相同,但是这可能对你有帮助。
本质上,在那里的某个地方,应该有一个绑定的部分,它显示哪些值绑定到:1个variables。 本文没有做好解释如何判断哪些绑定到哪些查询,因为该示例只有一个查询(我无法从查看它)。 忽略它们在最后使用的sort|uniq位,以显示它总是一遍又一遍的查询,并且您应该得到如下结果
Bind#0 value=55
pipe他呢。
如果您有Oracle支持合同,则值得检查跟踪分析器 。
如果跟踪(.trc)文件缺less绑定variables值 (或ODP.NET中的OracleCommand中的参数值),这是由于跟踪已启动的方式。
如果在“ 使用应用程序跟踪工具”页面中使用以下命令之一:
ALTER SESSION SET SQL_TRACE = TRUE; EXEC DBMS_SESSION.set_sql_trace(sql_trace => TRUE);
..你没有logging绑定值!
要logging绑定variables值,还有其他一些替代方法,根据数据库版本和加载的包来启动跟踪。 如果您使用的是Oracle 10g +,最简单的方法是使用以下命令启动跟踪:
DBMS_MONITOR.session_trace_enable(waits=>FALSE, binds=>TRUE)
下面是使用绑定variableslogging来启动跟踪的可用命令的完整列表(源: SQL跟踪,Oracle 10g中的10046,trcsess和tkprof ):
-- All versions. ALTER SESSION SET EVENTS '10046 trace name context forever, level 8'; EXEC DBMS_SYSTEM.set_ev(si=>123, se=>1234, ev=>10046, le=>4, nm=>' '); -- All versions, requires DBMS_SUPPORT package to be loaded. EXEC DBMS_SUPPORT.start_trace(waits=>FALSE, binds=>TRUE); EXEC DBMS_SUPPORT.start_trace_in_session(sid=>123, serial=>1234, waits=>FALSE, binds=>TRUE); -- Oracle 10g EXEC DBMS_MONITOR.session_trace_enable(waits=>FALSE, binds=>TRUE); EXEC DBMS_MONITOR.session_trace_enable(session_id =>1234, serial_num=>1234, binds=>TRUE, binds=>TRUE); EXEC DBMS_MONITOR.client_id_trace_enable(client_id=>'tim_hall', waits=>FALSE, binds=>TRUE); EXEC DBMS_MONITOR.serv_mod_act_trace_enable(service_name=>'db10g', module_name=>'test_api', action_name=>'running', - > waits=>FALSE, binds=>TRUE);