【问题标题】:How do I get a list of all the last modified tables in an Oracle database?如何获取 Oracle 数据库中所有最后修改的表的列表?
【发布时间】:2017-10-18 13:35:29
【问题描述】:
select ora_rowscn from table_name;

ORA_ROWSCN 返回对行的最近更改的保守上限系统更改数 (SCN)。这个伪列对于确定行最后一次更新的大致时间很有用。

如何从这里获取时间戳?另外,是否有任何查询可以让我获得特定架构中所有最后修改的表?

【问题讨论】:

    标签: oracle timestamp last-modified sql-timestamp


    【解决方案1】:

    SCN_TO_TIMESTAMP 将计算结果为系统更改号 (SCN) 的数字作为参数,并返回与该 SCN 关联的近似时间戳。

    SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) 
    FROM employees
    WHERE employee_id = 188;
    

    如果您有 10g 或更高版本,则可以使用 Oracle 的闪回功能来获取此信息。您需要启用闪回;

    select  table_name ,max(commit_timestamp) 
    from FLASHBACK_TRANSACTION_QUERY 
    where table_owner = 'YOUR_SCHEMA' 
          and operation in ('INSERT','UPDATE','DELETE','MERGE') 
    group by table_name
    

    【讨论】:

    • 请注意,您需要特权才能运行 FLASHBACK_TRANSACTION_QUERY
    【解决方案2】:

    对于您的要求,您无需参与 SCN。为什么不只是:

    begin dbms_stats.flush_database_monitoring_info; end;
    
    select * from dba_tab_modifications
    where timestamp >= sysdate - 7
    order by timestamp desc;
    

    除非您(愚蠢地?)仅使用BASIC 统计级别(默认为TYPICAL,该级别更高)运行,否则这在任何 11g 或更高版本的数据库中都可以正常工作。

    【讨论】:

    • 谢谢 Matthew,本来可以具体一点,并进行一些过滤和排序。 SELECT Table_Owner, Table_Name, Timestamp, Inserts, Updates, Deletes FROM Dba_Tab_Modifications WHERE Timestamp >= Sysdate - 15 AND Upper(Table_Owner) IN ('SCHEMA1', 'SCHEMA2', 'SCHEMA3') ORDER BY 1, 3 DESC;
    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2010-09-17
    • 1970-01-01
    • 2023-03-21
    • 2022-01-20
    • 1970-01-01
    相关资源
    最近更新 更多