【问题标题】:Find out who evokes a procedure找出谁引发了一个程序
【发布时间】: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

标签: sql oracle plsql


【解决方案1】:

您可以查询 v$session 以获取所有详细信息:

select * from v$session where sid = sys_context('userenv','sid')

另请查看OWA_UTIL.WHO_CALLED_ME

【讨论】:

  • 反对票是怎么回事?答案有问题吗?如果是这样,你能解释一下吗?
【解决方案2】:

Alex,在 Oracle 中按计划运行任务的最可能方法是通过 cron(如果在 UNIX 上)或通过 DBMS_SCHEDULER。您可以查看这两个选项,并查询 DBA_DEPENDENCIES 以获取对存储过程的引用,前提是该任务实际上并未使用匿名 PL/SQL。

在运行 SP 时,您可以通过 V$ACCESS 找到调用会话,然后通过 V$SESSION 获取 Oracle 用户名、操作系统用户名、请求来自的机器以及正在调用的程序,这有助于识别源。

dba_hist_active_sess_history 的建议使用要求您的站点获得额外费用 EM 诊断包许可证的许可。

【讨论】:

    【解决方案3】:

    Alex v$sql 视图将包含 sql 和 pl/sql 的条目,可能您没有将其视为缓存出来,请尝试查看 DBA_HIST_SQLTEXT 视图。 捕获其执行的另一种可靠方法是启用对此过程执行的审计。审计是 oracle 中的两步操作,首先您必须在数据库级别启用扩展审计,然后您可以设置审计策略以在执行过程时记录审计事件。

    【讨论】:

      猜你喜欢
      • 2013-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 1970-01-01
      • 2014-07-14
      • 2015-01-05
      相关资源
      最近更新 更多