显示Oracle DB中表的上次访问时间

时间:2018-05-30 03:43:15

标签: sql oracle timestamp

我使用Oracle RDBMS作为数据库。我试图清理数据库,想知道某些表是否已经被使用了。我要求这些表的最后访问时间得出结论。

请注意,我需要最新SELECT查询的时间戳。我找到了解决UPDATEALTER等其他活动时间戳的解决方案。我专门查找SELECT时间戳。

感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

您可以使用AUDIT(traditional auditing)

AUDIT SELECT ON table_name;

答案 1 :(得分:1)

是的,@ lad2025是对的,我使用AUDIT找出谁正在访问这些表格。

要打开它,只需使用:

AUDIT SELECT ON scott.emp  BY ACCESS;
AUDIT SELECT ON scott.dept BY ACCESS;  

然后,您可以通过查询来查看审核的表:

SELECT * 
FROM DBA_OBJ_AUDIT_OPTS 
WHERE owner='SCOTT';

OWNER OBJECT_NAME OBJECT_TYPE SEL
SCOTT DEPT        TABLE       A/A
SCOT  EMP         TABLE       A/A

如果有人从其中一个审计表中进行选择,它将显示在审计跟踪中:

SELECT * FROM scott.emp;

SELECT os_username, username, obj_name, action_name, timestamp
  FROM DBA_AUDIT_TRAIL 
 WHERE timestamp BETWEEN SYSDATE-7 AND SYSDATE
   AND owner = 'SCOTT' 
   AND action=3
 ORDER BY timestamp DESC;

OS_USERNAME USERNAME OBJ_NAME ACTION NAME TIMESTAMP
xxxx        yyy      EMP      SELECT      2018-05-30 08:01:07

要再次关闭它,请使用:

NOAUDIT ALL ON scott.emp;
SELECT * FROM DBA_OBJ_AUDIT_OPTS WHERE OWNER='SCOTT';

OWNER OBJECT_NAME OBJECT_TYPE SEL
SCOTT DEPT        TABLE       A/A
但是,要小心谨慎。每个SELECT的审计跟踪中都添加了一行,因此请仔细观察,它可以非常快速地生成大量数据。