我需要捕获 Oracle 存储过程调用(带参数)来跟踪应用程序(使用 JDBC 连接到数据库)。我需要类似 sp_trace_setevent 的东西来处理 MS SQL SERVER 中的 Rpc:Completed 事件。
我无权访问此应用程序,但拥有数据库的大部分权限。我想继续使用 PL/SQL(和 Oracle SQL Developer 3.2.20)。
我已经尝试过:
Oracle SQL Developer UI“工具”/“实时 SQL 监控”和“工具”/“ session ”工具,但无法理解如何启用累积信息而不是捕获时刻快照。
<探索
v$sql
- 似乎没有 sp 调用。v$sqlarea
差异( Oracle: is there a tool to trace queries, like Profiler for sql server? ,mdj3884 回复) - 在那里我可以找到我的测试调用,但没有参数...Tom 文章的建议:http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:767025833873 。特别是,它正在循环
v$sqltext_with_newlines
,但我无法理解什么是脚本结果。更像是瞬间快照;不是吗?但为什么他们称之为跟踪呢?使用
DBMS_APPLICATION_INFO
- 据我了解,使用它我可以将自定义信息添加到V$SESSION
和V$SESSION_LONGOPS
- 它对于监视任务很有用,但我无法想象它如何用于积累有关 sp 调用及其参数的信息。使用
DBMS_MONITOR
启用对文件的跟踪。但我找不到仅启用跟踪 sp 调用事件的选项,而且它还需要访问服务器文件。DBMS_PROFILER
- 据我了解,默认情况下它只收集统计信息(最短、最长时间);应该可以向plsql_profiler_runs
添加自定义信息,但我找不到此表(当DBMS_PROFILER
就位时)。
接下来看什么?我错过了什么?
附注如果唯一的一种方法是更改 SP 主体(需要跟踪的 SP),那么在 Oracle 中从 sp 主体记录 sp 参数的最快、最安全的方法是什么?它可以记录到自定义表,但我可以选择生成其他类型的事件(不回滚,例如 SQL Server 自定义跟踪事件)?
最佳答案
添加一些自定义功能来执行此操作很容易(请参阅下面的大部分所需内容),或者您可以使用 sqltrace 或企业管理器报告并搜索它们:
create package p_audit as
type t_param_type is table of varchar2(50) index by binary_integer;
procedure p_audit (p_procedure varchar2, l_param_type t_param_type);
end;
create table audit_table (procedure_name varchar2(50), parameters varchar2(500))
create or replace package body p_audit is
procedure p_audit (p_procedure varchar2, l_param_type t_param_type) is
pragma autonomous_transaction;
begin
insert into audit_table values (p_procedure,l_param_type(1));
commit;
end;
end p_audit;
declare
l_param_type p_audit.t_param_type;
begin
l_param_type(1):='parameter 1';
p_audit.p_audit('test procedure',l_param_type);
end;
关于oracle - 在 Oracle 中捕获/捕获存储过程调用(带参数)的快速方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22790542/