我使用Oracle RDBMS作为数据库。我试图清理数据库,想知道某些表是否已经被使用了。我要求这些表的最后访问时间得出结论。
请注意,我需要最新SELECT
查询的时间戳。我找到了解决UPDATE
,ALTER
等其他活动时间戳的解决方案。我专门查找SELECT
时间戳。
感谢任何帮助。
答案 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的审计跟踪中都添加了一行,因此请仔细观察,它可以非常快速地生成大量数据。