【发布时间】:2022-10-24 07:35:54
【问题描述】:
我有一个 Oracle PL/SQL 过程 monitoring_5_min ,据我所知,它必须每 5 分钟由某个外部接口(可能是 Web 服务)或某个计划的作业调用一次。是否有任何 Oracle 系统方法来找出调用该过程的内容?也许一些系统视图?我试图从 v$sql 中进行选择,但它似乎只包括 SQL 调用而不包括 PL/SQL。
【问题讨论】:
-
你试过看
dba_hist_active_sess_history
我有一个 Oracle PL/SQL 过程 monitoring_5_min ,据我所知,它必须每 5 分钟由某个外部接口(可能是 Web 服务)或某个计划的作业调用一次。是否有任何 Oracle 系统方法来找出调用该过程的内容?也许一些系统视图?我试图从 v$sql 中进行选择,但它似乎只包括 SQL 调用而不包括 PL/SQL。
【问题讨论】:
dba_hist_active_sess_history
您可以查询 v$session 以获取所有详细信息:
select * from v$session where sid = sys_context('userenv','sid')
另请查看OWA_UTIL.WHO_CALLED_ME
【讨论】:
Alex,在 Oracle 中按计划运行任务的最可能方法是通过 cron(如果在 UNIX 上)或通过 DBMS_SCHEDULER。您可以查看这两个选项,并查询 DBA_DEPENDENCIES 以获取对存储过程的引用,前提是该任务实际上并未使用匿名 PL/SQL。
在运行 SP 时,您可以通过 V$ACCESS 找到调用会话,然后通过 V$SESSION 获取 Oracle 用户名、操作系统用户名、请求来自的机器以及正在调用的程序,这有助于识别源。
dba_hist_active_sess_history 的建议使用要求您的站点获得额外费用 EM 诊断包许可证的许可。
【讨论】:
Alex v$sql 视图将包含 sql 和 pl/sql 的条目,可能您没有将其视为缓存出来,请尝试查看 DBA_HIST_SQLTEXT 视图。 捕获其执行的另一种可靠方法是启用对此过程执行的审计。审计是 oracle 中的两步操作,首先您必须在数据库级别启用扩展审计,然后您可以设置审计策略以在执行过程时记录审计事件。
【讨论】: