2010-12-14 81 views

回答

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

7

您可以查询数据字典/目录视图找出当一个对象被创建,以及最后的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”列或使用触发器和填充审计表

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

这与4岁接受的答案有什么不同? – 2014-10-26 16:45:18

+0

这里我使用不同的表。 [dba_object和user_object之间的区别](https://community.oracle.com/thread/929286?tstart=0) – 2014-10-26 16:52:06

+0

请编辑您的答案,以添加关于您的代码如何工作以及如何解决OP问题的说明。许多SO海报是新手,不会理解你发布的代码。 – 2014-10-26 17:49:23

2

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

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

注:更换“%表名%”你正在寻找的表名。

-2

试试此问题:

SELECT sysdate FROM schema_name.table_name;

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

相关问题