47

在 Oracle 中,有没有办法找出特定表的创建时间?

同样,有没有办法找出插入/上次更新特定行的时间?

4

5 回答 5

73
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 映射到时间戳。

于 2010-12-14T18:08:30.903 回答
11

您可以查询数据字典/目录视图以了解创建对象的时间以及最后一次涉及该对象的 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”列或使用触发器并填充审计表

于 2010-12-14T18:06:32.783 回答
7

您复制并粘贴以下代码。它将显示所有带有名称和创建日期的表

SELECT object_name,created FROM user_objects
WHERE object_name LIKE  '%table_name%'
AND object_type = 'TABLE'; 

注意:'%table_name%'替换为您要查找的表名。

于 2015-05-21T10:50:50.507 回答
4
SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>'
于 2014-10-26T16:11:19.827 回答
-5

试试这个查询:

从 schema_name.table_name 中选择 sysdate;

这应该显示您可能需要的时间戳。

于 2016-01-25T14:38:04.447 回答