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