【问题标题】:Show last access time of a table in Oracle DB显示 Oracle DB 中表的上次访问时间
【发布时间】:2018-11-08 19:11:54
【问题描述】:

我将 Oracle RDBMS 用于数据库。我正在尝试清理数据库并想知道某些表是否已被使用。我需要这些表的最后访问时间才能得出结论。

请注意,我需要最新的SELECT 查询的时间戳。我有寻找其他活动时间戳的解决方案,例如UPDATEALTER 等。我正在专门寻找SELECT 时间戳。

感谢任何帮助。

【问题讨论】:

    标签: sql oracle timestamp


    【解决方案1】:

    你可以使用AUDIT(traditional auditing):

    AUDIT SELECT ON table_name;
    

    【讨论】:

      【解决方案2】:

      是的,@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 都会在审计跟踪中添加一行,因此请仔细观察,它可以非常快速地生成大量数据。

      【讨论】:

        猜你喜欢
        • 2012-03-31
        • 1970-01-01
        • 1970-01-01
        • 2020-07-01
        • 2014-06-14
        • 2012-05-02
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        相关资源
        最近更新 更多