如何找出在Oracle中创建特定表的时间?

时间:2010-12-14 17:47:06

标签: oracle oracle11g database-metadata

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

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

5 个答案:

答案 0 :(得分:56)

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

答案 1 :(得分:7)

您可以查询数据字典/目录视图以找出创建对象的时间以及涉及该对象的最后一个DDL的时间(例如:alter table)

select * 
  from all_objects 
 where owner = '<name of schema owner>'
   and object_name = '<name of table>'

“CREATED”列会告诉您何时创建了对象。 “LAST_DDL_TIME”列会告诉您何时对对象执行了最后一次DDL。

对于插入/更新特定行的时间,您可以使用审计列,如“insert_timestamp”列或使用触发器并填充审计表

答案 2 :(得分:3)

SELECT CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>'

答案 3 :(得分:2)

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

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

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

答案 4 :(得分:-2)

尝试此查询:

SELECT sysdate FROM schema_name.table_name;

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