如何使用参数值记录/跟踪Oracle存储过程调用?

时间:2008-10-30 16:19:04

标签: oracle

我们正在寻找一种方法来记录对Oracle中存储过程的任何调用,并查看用于调用的参数值。

我们正在使用Oracle 10.2.0.1

我们可以记录SQL语句并查看绑定变量,但是当我们跟踪存储过程时,我们会看到绑定变量B1,B2等,但没有值。

我们希望看到我们在MS SQL Server Profiler中看到的相同类型的信息。

感谢您的帮助

4 个答案:

答案 0 :(得分:6)

您可以查看DBMS_APPLICATION_INFO package。这允许您使用您想要的任何信息“检测”您的PL / SQL代码 - 但它确实需要为每个要检测的过程添加调用。

另请参阅this AskTom thread使用DBMS_APPLICATION_INFO监视PL / SQL。

答案 1 :(得分:2)

我认为你是以一种奇怪的方式使用“log”这个词。

  

我们可以记录SQL语句......

你真的想说你可以使用绑定变量跟踪sql语句吗?托尼的回答是针对记录你正在做的事情的能力。这总是优于追踪,因为只有你知道什么对你很重要。也许您的进程的执行在很大程度上取决于从表中查询值。由于该值发生更改并且未作为参数传递,因此您可能会丢失该信息。

但是如果你真的记录了你正在做的事情,你可以在你的日志表中包含这个值,你不仅知道你传入的变量,还知道那个键值。

更改系统设置事件'10046跟踪名称上下文永远,级别12';那是你用的吗?

答案 2 :(得分:0)

是的,我想我应该使用“追踪”一词

我会尝试描述我们做过的事情:

使用企业管理器(作为dbo)我们已经进入会话,并开始跟踪

开始追踪 启用等待信息,绑定信息

在我们的应用程序上运行一个操作数据库

完成跟踪,在输出上运行:

tkprof .prc output2.txt sys = no record = record.txt explain = dbo @ DBINST / PW

我们希望看到的是,“使用这些参数调用这些程序”我们得到的是:

Begin dbo.UPKG_PACKAGENAME.PROC(:v0, :v1, :v2 ...); End;
/
Begin dbo.UPKG_PACKAGENAME.PROC2(:v0, :v1, :v2 ...); End;
/
...

所以我们可以跟踪被调用的过程,但是我们没有得到实际的参数值,只有:v0等。

我的理解是,我们所做的与alter system声明相同,但如果情况并非如此,请告诉我们。

由于

答案 3 :(得分:0)

你正在使用10g吗? 让我试试吧 exec dbms_monitor.session_trace_enable(session_id => xxx,serial_num => xx,waits => true,binds => true); 你可以得到session_id = SID& serial_num = SERIAL#from v $ session