【发布时间】:2018-11-08 19:11:54
【问题描述】:
我将 Oracle RDBMS 用于数据库。我正在尝试清理数据库并想知道某些表是否已被使用。我需要这些表的最后访问时间才能得出结论。
请注意,我需要最新的SELECT 查询的时间戳。我有寻找其他活动时间戳的解决方案,例如UPDATE、ALTER 等。我正在专门寻找SELECT 时间戳。
感谢任何帮助。
【问题讨论】:
我将 Oracle RDBMS 用于数据库。我正在尝试清理数据库并想知道某些表是否已被使用。我需要这些表的最后访问时间才能得出结论。
请注意,我需要最新的SELECT 查询的时间戳。我有寻找其他活动时间戳的解决方案,例如UPDATE、ALTER 等。我正在专门寻找SELECT 时间戳。
感谢任何帮助。
【问题讨论】:
你可以使用AUDIT(traditional auditing):
AUDIT SELECT ON table_name;
【讨论】:
是的,@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 都会在审计跟踪中添加一行,因此请仔细观察,它可以非常快速地生成大量数据。
【讨论】: