如何获取Oracle数据库中所有最后修改的表的列表?

时间:2017-10-18 13:35:29

标签: oracle timestamp last-modified sql-timestamp

select ora_rowscn from table_name;

ORA_ROWSCN返回对该行的最新更改的保守上限系统更改编号(SCN)。此伪列对于确定上次更新行的大致时间非常有用。

如何从此处获取时间戳?此外,是否有任何查询可以获取特定模式中的所有最后修改的表?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

根据您的要求,不需要参与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数据库或更高版本中都可以正常运行。