- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们在 Oracle 数据库中有 2 个用户(方案):TARGET_USER
和 TESTER_USER
。
TARGET_USER
拥有一些包:
create or replace package TARGET_USER.SomePackage
is
procedure some_interface_proc(p1 number, p2 varchar2, p3 xmltype);
end;
这个包的主体包含很多函数,从some_interface_proc
调用,例如:
create or replace package body TARGET_USER.SomePackage
is
procedure do_some_operation_1
is
begin
null; -- Really do some actions here
end;
procedure do_some_operation_2
is
begin
null; -- Really do some actions here
end;
procedure some_interface_proc(p1 number, p2 varchar2, p3 xmltype)
is
begin
do_some_operation_1;
do_some_operation_2;
end;
end;
授予 TESTER_USER
执行此程序包的权限:
grant execute on TARGET_USER.SomePackage to TESTER_USER
同时 TESTER_USER
被授予运行 DBMS_PROFILER
所需的所有权限包并拥有所有必需的表。使用这样的设置 TESTER_USER
能够针对测试脚本成功运行探查器,可以简化如下:
begin
for cData in (
select a, b, с from table_with_test_data
) loop
TARGET_USER.SomePackage.some_interface_proc(a,b,c);
end loop;
end;
所以,收集到的所有统计数据似乎都正常,但是......
问题
为什么 TESTER_USER
看不到有关 SomePackage.do_some_operation_1
和 SomePackage.do_some_operation_2
程序运行时间的详细统计信息?
如 DBMS_PROFILER documentation 中所述有 4 件事会影响分析器:
在尝试满足所有要求的同时,接下来要完成的操作:
grant create any procedure to TESTER_USER;
grant alter any procedure to TESTER_USER;
grant debug on TARGET_USER.SomePackage to TESTER_USER;
并查看了SomePackage的编译模式,是否有debug信息。
但在完成所有这些操作后,TESTER_USER
仍然无法访问内部程序的分析器统计信息。
所以,问题是:如果可能的话,必须做些什么来纠正这种情况?
最佳答案
最近我遇到了向我介绍这种情况的同事,我们意识到在 Oracle 方面一切正常,但确保满足所有条件的步骤是错误的。
因此,我向所有花时间回答错误定位问题的人道歉。
但我们的成立可能会帮助到其他人,所以我会尝试解释情况并回答我自己的问题。
简而言之有两点:
始终使用 native Oracle 工具来验证奇怪的情况;
在每次测试尝试中从头开始重现完整情况。
问题的根源是在“PL/SQL Developer”工具中实现 native 代码和解释代码之间切换的方式。应用程序范围内的“PL/SQL 代码类型”首选项会影响在用户界面帮助下完成的每个包编译。在验证所有条件时,collegaue 使用 alter session set PLSQL_CODE_TYPE=INTERPRETED
或 alter session set PLSQL_CODE_TYPE=NATIVE
在编译模式之间切换,但之后偶尔使用接口(interface)功能重新编译包, 所以工具应用它自己的设置并在 native 模式下完成编译。
在逐步安排所有操作后,我们得到了解决问题的线索,现在可以成功地分析这个包。
关于oracle - 收集另一个用户拥有的 PL/SQL 包的探查器信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18533805/
我是一名优秀的程序员,十分优秀!