You need to enable JavaScript to run this app. 如何通过Oracle SQL查询prod环境近3个月package的运行使用情况
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Oracle SQL查询prod环境近3个月package的运行使用情况

Oracle 检测近3个月PACKAGE运行情况的实现方案

Oracle 不会默认永久存储所有 PL/SQL 对象的执行历史,能否查询到对应记录取决于数据库的审计、统计数据保留配置,以下是三种可落地的实现方式:

1. 审计记录查询(结果最准确)

如果生产环境开启了审计功能,优先用审计视图查询:

  • 12c 及以上版本(默认启用统一审计)查询SQL:
SELECT DISTINCT object_schema, object_name, event_timestamp
FROM unified_audit_trail
WHERE object_type = 'PACKAGE'
  AND event_timestamp >= ADD_MONTHS(SYSDATE, -3)
  AND action_name IN ('EXECUTE', 'CALL')
ORDER BY event_timestamp DESC;
  • 开启传统标准审计的场景查询SQL:
SELECT DISTINCT owner, obj_name, timestamp
FROM dba_audit_trail
WHERE obj_type = 'PACKAGE'
  AND timestamp >= ADD_MONTHS(SYSDATE, -3)
  AND action_name = 'EXECUTE PROCEDURE'
ORDER BY timestamp DESC;

2. AWR 历史性能视图查询(无审计时的备选方案)

注意:该方案仅当你提前调整过 AWR 保留周期≥3个月时有效,Oracle 默认 AWR 仅保留8天的统计数据
可以通过历史活跃会话采样数据追溯PACKAGE调用记录,查询SQL如下:

SELECT DISTINCT p.owner, p.object_name, s.sample_time
FROM dba_hist_active_sess_history s
JOIN dba_objects p 
  ON s.plsql_entry_object_id = p.object_id
WHERE p.object_type = 'PACKAGE'
  AND s.sample_time >= ADD_MONTHS(SYSDATE, -3)
ORDER BY s.sample_time DESC;

该方案的结果仅作参考:查询到记录可以证明PACKAGE确实被运行过,未查询到记录不能100%证明PACKAGE未运行,因为极短时间运行的PACKAGE可能未被会话采样捕获。

3. 静态依赖查询(仅用于排查对象调用关系)

如果你只需要确认是否有其他数据库对象(存储过程、函数、触发器、其他PACKAGE等)静态依赖目标PACKAGE,可使用如下查询:

SELECT DISTINCT owner, name, type
FROM dba_dependencies
WHERE referenced_type = 'PACKAGE'
  AND referenced_owner = 'PACKAGE所属的用户名'
  AND referenced_name = '目标PACKAGE名称';

该方案无法覆盖动态调用、应用端直接调用PACKAGE的场景。

补充说明

以上所有查询都需要DBA权限才能访问对应的系统视图。如果既未开启审计,AWR保留周期也不足3个月,无法从数据库层面追溯到3个月前的PACKAGE运行记录。

内容的提问来源于stack exchange,提问作者TBose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 14:45:06