0

我的任务是对我可以访问的 Oracle 模式进行一些内务处理。简而言之,我想删除过去 3 个月内未“使用”过的所有表(过去 3 个月内未查询或操作过数据的表)。我对架构有读/写访问权限,但我不是 DBA;我在 Oracle 中运行相对基本的 DML/DDL 查询。

我试图弄清楚是否有办法让我识别旧表/冗余表;这是我尝试过的(大多不成功)

  • USER_TABLES是我的第一个停靠港,但LAST_ANALYZED此表中的日期似乎不是我要查找的最后修改/查询的日期

  • 谷歌搜索引起DBA_Hist了我的注意,我尝试查询其中一些(即DBA_HIST_SYSSTAT)但我遇到了(ORA-00942: table or view does not exist

  • 我也试过查询V$SESSION_WAITV$ACTIVE_SESSION_HISTORYV$SEGMENT_STATISTICS,但我得到同样的ORA-00942错误

对于上述选项是否真的提供了我需要的有关表格的信息以及如果是这样我可以做些什么来解决我遇到的错误,我将不胜感激。或者,还有其他我可以探索的选择吗?

4

1 回答 1

1

100% 确定,最简单的做法可能是启用对您感兴趣的 Oracle 表(可能全部)的审计。一旦启用,Oracle 就会有一个审计表 (dba_audit_trail),您可以查询该表是否已被访问。您可以通过发出: AUDIT on 来启用审计。按会话;

我选择了“按会话”,这样无论会话执行多少次操作(以最小化审计表中的记录),每个会话都只能获得一条记录。

例子:

按会话审核 bob.inventory 上的选择;

然后,您可以在一段时间后查询 dba_audit_trail 以查看该表是否显示任何记录。

您可以通过发出“noaudit”命令来禁用审计。

希望有帮助。

-吉姆

于 2018-02-19T15:22:39.803 回答