在 Oracle 中,有没有办法找出特定表的创建时间?
同样,有没有办法找出插入/上次更新特定行的时间?
SELECT created
FROM dba_objects
WHERE object_name = <<your table name>>
AND owner = <<owner of the table>>
AND object_type = 'TABLE'
将告诉您何时创建表(如果您无权访问 DBA_OBJECTS,则可以使用 ALL_OBJECTS 代替假设您对表具有 SELECT 权限)。
但是,从行中获取时间戳的一般答案是,只有添加了列来跟踪该信息(当然,假设您的应用程序也填充了这些列),您才能获取该数据。然而,也有各种特殊情况。如果 DML 发生的时间相对较近(很可能发生在最近几个小时内),您应该能够从闪回查询中获取时间戳。如果 DML 发生在最近几天(或者无论您保留归档日志多长时间),您都可以使用 LogMiner 提取时间戳,但这将是一项非常昂贵的操作,特别是如果您要获取许多行的时间戳。如果您在启用 ROWDEPENDENCIES(不是默认值)的情况下构建表,则可以使用
SELECT scn_to_timestamp( ora_rowscn ) last_modified_date,
ora_rowscn last_modified_scn,
<<other columns>>
FROM <<your table>>
获取该行的最后修改日期和 SCN(系统更改号)。但是,默认情况下,如果没有 ROWDEPENDENCIES,SCN 仅位于块级别。该SCN_TO_TIMESTAMP
函数也不能永远将 SCN 映射到时间戳。
您可以查询数据字典/目录视图以了解创建对象的时间以及最后一次涉及该对象的 DDL 时间(例如:alter table)
select *
from all_objects
where owner = '<name of schema owner>'
and object_name = '<name of table>'
“创建”列告诉您对象是何时创建的。“LAST_DDL_TIME”列告诉您对对象执行最后一次 DDL 的时间。
至于何时插入/更新特定行,您可以使用审计列,如“insert_timestamp”列或使用触发器并填充审计表
您复制并粘贴以下代码。它将显示所有带有名称和创建日期的表
SELECT object_name,created FROM user_objects
WHERE object_name LIKE '%table_name%'
AND object_type = 'TABLE';
注意:将'%table_name%'替换为您要查找的表名。
SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>'
试试这个查询:
从 schema_name.table_name 中选择 sysdate;
这应该显示您可能需要的时间戳。