在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>'
"CREATED"列告诉您对象创建的时间。
"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>>'
请尝试以下查询语句:
SELECT sysdate FROM schema_name.table_name;
这应该显示您可能需要的时间戳。