我们正在寻找一种方法来记录对Oracle中存储过程的任何调用,并查看用于调用的参数值。
我们正在使用Oracle 10.2.0.1
我们可以记录SQL语句并查看绑定变量,但是当我们跟踪存储过程时,我们会看到绑定变量B1,B2等,但没有值。
我们希望看到我们在MS SQL Server Profiler中看到的相同类型的信息。
感谢您的帮助
答案 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)