2008-10-30 183 views
4

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

我们使用Oracle 10.2.0.1

我们可以登录SQL语句,看到了约束变量,但是当我们跟踪的存储过程,我们看到绑定变量B1,B2等,但没有值。

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

感谢所有帮助

回答

6

你可以看看的DBMS_APPLICATION_INFO package。这允许你用任何你想要的信息来“测试”你的PL/SQL代码 - 但是它确实需要增加对每个程序的调用来进行检测。

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

2

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

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

你真的是说你可以跟踪使用绑定变量的SQL语句?托尼的回答是针对记录你在做什么的能力。这总是优于追踪,因为只有你知道什么对你很重要。也许你的进程的执行很大程度上依赖于查询表中的值。由于该值发生变化并且不作为参数传入,因此可能会丢失该信息。

但是如果你真的记录你在做什么,你可以在你的日志表中包含该值,你不仅知道你通过的变量,而且知道关键值。

alter system set events'10046 trace name context forever,level 12';那是你在用什么?

0

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

我会尽力来形容我们做了什么:

使用Enterprise Manager(如DBO)我们去参加会话,并开始一丝丝

开始跟踪 启用等信息,绑定信息

运行我们的应用程序,它击中DB操作

完成跟踪,对输出运行此:

TKPROF .PRC output2.txt SYS =没有记录= record.txt讲解= DBO @ DBINST/PW

什么我们希望看到的是,“这些程序被称为与这些参数”我们现在得到的是:

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

所以我们可以追踪所调用的程序,但我们没有得到实际的参数值,仅仅是:V0等。

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

感谢

0

你采用了10G 让这个 EXEC dbms_monitor.session_trace_enable尝试(SESSION_ID => XXX,SERIAL_NUM => XX,等待=>真,结合=> TRUE); 你可以得到session_id = SID & serial_num = SERIAL#from v $ session

相关问题