5
select ora_rowscn from table_name;

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

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

4

2 回答 2

2

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
于 2017-10-18T13:46:57.930 回答
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 数据库或更高版本中都可以正常工作。

于 2017-10-18T19:08:30.930 回答