问题描述
嗨,
我的一位客户要求为IOT表更改最后的DDL/DML时间戳。他们有很多表,他们需要删除一些不经常使用/修改/更改的表。我使用ORA_ROWSCN在内部检查了IOT和普通表,但是对于它们来说,它不可能得到 (ORA-08181),并且表也旧了。
1.如何获取IOT表的最后DDL/DML时间戳(主要问题)
2.如果我们修复此错误,则可能是他们可以使用ora_rowscn查询。(次要)
请帮助我们。
提前谢谢 ..
我的一位客户要求为IOT表更改最后的DDL/DML时间戳。他们有很多表,他们需要删除一些不经常使用/修改/更改的表。我使用ORA_ROWSCN在内部检查了IOT和普通表,但是对于它们来说,它不可能得到 (ORA-08181),并且表也旧了。
1.如何获取IOT表的最后DDL/DML时间戳(主要问题)
2.如果我们修复此错误,则可能是他们可以使用ora_rowscn查询。(次要)
SQL> select max(ora_rowscn), scn_to_timestamp(max(ora_rowscn)) from report.PUBURL_INCEPTION_0;
select max(ora_rowscn), scn_to_timestamp(max(ora_rowscn)) from report.PUBURL_INCEPTION_0
*
ERROR at line 1:
ORA-08181: specified number is not a valid system change number
ORA-06512: at "SYS.SCN_TO_TIMESTAMP", line 1.请帮助我们。
提前谢谢 ..
专家解答
最后的DDL时间很容易:
正如你所发现的,如果你没有审计,最后一次DML写时间会有点棘手...
您可以通过查询找到最低的SCN -> 时间映射:
如果ora_rowscn低于此SCN值,那么您就不走运了。将此最小值与ora_rowscn进行比较会告诉您,该表至少在这么长时间内没有变化。
BUT
一张很久以前最后一次更换的表may still be used!
上面没有跟踪查询。参考表通常可以在几个月或几年内保持不变。但仍然是应用程序工作的核心。
如果要查看是否访问了表,请启用 “一段时间” 审核以查看是否有任何东西正在使用它。
select last_ddl_time from user_objects where object_name = :tab;
正如你所发现的,如果你没有审计,最后一次DML写时间会有点棘手...
您可以通过查询找到最低的SCN -> 时间映射:
select min ( time_dp ), min ( scn_bas ) from sys.smon_scn_time ;
如果ora_rowscn低于此SCN值,那么您就不走运了。将此最小值与ora_rowscn进行比较会告诉您,该表至少在这么长时间内没有变化。
BUT
一张很久以前最后一次更换的表may still be used!
上面没有跟踪查询。参考表通常可以在几个月或几年内保持不变。但仍然是应用程序工作的核心。
如果要查看是否访问了表,请启用 “一段时间” 审核以查看是否有任何东西正在使用它。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




