在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,而不是假设表上有选择特权)。

但是,从一排获得时间戳的一般答案是,只有在添加列以跟踪该信息的列(当然,您的应用程序也填充了列)时,您才能获取该数据。但是,有各种特殊情况。如果DML最近发生(最有可能在过去几个小时内),则您应该能够从闪回查询中获得时间戳。如果DML发生在最近几天(或多长时间保留存档的日志),则可以使用LogMiner提取时间戳,但这将是一个非常昂贵的操作,尤其是如果您要为许多行获得时间戳。如果启用了rowDepentencies(不是默认),则可以使用

SELECT scn_to_timestamp( ora_rowscn ) last_modified_date,
       ora_rowscn last_modified_scn,
       <<other columns>>
  FROM <<your table>>

要获取该行的最后一个修改日期和SCN(系统更改号)。但是,默认情况下,没有RowDepentencies,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 CREATED FROM USER_OBJECTS WHERE OBJECT_NAME='<<YOUR TABLE NAME>>'

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

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

笔记: 代替 '%table_name%' 带有您要寻找的桌子名称。

尝试此查询:

从schema_name.table_name中选择sysdate;

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top