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

5
select ora_rowscn from table_name;

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

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

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

请注意,您需要特权才能运行FLASHBACK_TRANSACTION_QUERY。 - Moudiz

2
您所需要的内容与 SCN 无关。建议您直接执行以下操作:

为什么不这样做:

begin dbms_stats.flush_database_monitoring_info; end;

select * from dba_tab_modifications
where timestamp >= sysdate - 7
order by timestamp desc;

除非你愚蠢地只运行基本统计水平(默认为典型,更高),否则在任何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; - khalidmehmoodawan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接