gpt4 book ai didi

sql - 如何获取通过 ODP.NET 中的 OracleParameter 传递的绑定(bind)变量的跟踪信息?

转载 作者:行者123 更新时间:2023-12-03 18:20:04 25 4
gpt4 key购买 nike

在谷歌搜索了很多并没有找到我要找的东西之后,我决定问这个问题。

我正在使用来自 的这篇很棒的文章中演示的绑定(bind)变量。 2005 标题 The Values That Bind马克 A. 威廉姆斯,像这样:

OracleParameter p_APP_NAME =
new OracleParameter("p_APP_NAME", OracleDbType.NVarchar2, ParameterDirection.Input);
p_APP_NAME.Size = 50;
p_APP_NAME.Value = log.Application.Name;
cmd.Parameters.Add(p_APP_NAME);

我成功启用了 ODP.NET debug tracing但缺少的一个关键信息是记录的 SQL statement没有告诉我绑定(bind)到绑定(bind)变量的值是什么。

它正在记录 OracleCommand.CommandText但没有 OracleCommand.Parameters值(value)观。它向我展示了这个:
TIME:2013/09/20-22:59:21:890 TID:20fc  OpsSqlPrepare2(): SQL: UPDATE PS_LOG SET 
APP_NAME = :p_APP_NAME,
WHERE LOG_ID = :p_LOG_ID

我真正想看到的是发送到 ORACLE 服务器的查询中使用的实际值,如下所示:
TIME:2013/09/20-22:59:21:890 TID:20fc  OpsSqlPrepare2(): SQL: UPDATE PS_LOG SET 
APP_NAME = 'App Name',
WHERE LOG_ID = 777

我是否遗漏了一些配置,或者我想要的信息在使用 ODP.NET 时不可用?追踪能力?

如果这不是内置的,我想我将不得不实现自己的替换方法并记录 SQL Statement我。

最佳答案

作为选项之一,您可以通过手动或自动(例如在用户的登录触发器中)为 session 设置 12 或 4 级的 10046 事件来打开带有绑定(bind)变量转储的 sql 跟踪:

alter session set events '10046 trace name context forever, level 12';

之后,将在 user_dump_dest 参数指定的目录中生成跟踪文件。
SQL> show parameter user_dump_dest;

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
user_dump_dest string D:\...\diag\rdbms\cdb\cdb
\trace

这是一个例子:
SQL> alter session set events '10046 trace name context forever, level 12';
2 variable var number;
3 exec :var := 1234567; -- our bind variable
4 select 1 from dual where 1234567 = :var ;

在新生成的跟踪文件中显示的其他信息中,我们可以找到有关查询、绑定(bind)变量及其值的信息:

PARSING IN CURSOR #375980232 len=40 dep=0 uid=103
oct=3 lid=103 tim=2640550035 hv=1641534478
ad='7ff5bd0baf0' sqlid='ap9rzz5hxgp0f'
select 1 from dual where 1234567 = :var <-- our query
END OF STMT
PARSE #375980232:c=0,e=375,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,plh=0,tim=2640550034
BINDS #375980232:
Bind#0
oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=03 fl2=1000000 frm=01 csi=178 siz=24 off=0
kxsbbbfp=16646e10 bln=22 avl=05 flg=05
value=1234567 <-- value of the bind variable



您还可以从 Oracle 10g 及更高版本开始,查询 v$sql_bind_capture 动态性能 View 以获取有关绑定(bind)变量及其值的信息:
select t.parsing_user_id
, t.sql_fulltext -- text of a query
, bc.name -- name of a bind variable
, bc.value_string -- value of a bind variable
from v$sqlarea t
join v$sql_bind_capture bc
on (bc.sql_id = t.sql_id)
join v$session s
on (s.user# = t.parsing_schema_id)
where s.username = user
and bc.name in (':VAR') -- name of a bind variable(s),
-- value(s) of which we want to know

结果:
PARSING_USER_ID   SQL_FULLTEXT                      NAME    VALUE_STRING   
------------------------------------------------------------------------
103 select 1 from dual where 1 =:var :VAR 1234567

关于sql - 如何获取通过 ODP.NET 中的 OracleParameter 传递的绑定(bind)变量的跟踪信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18928230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com