2

我目前正在做一些重新设计工作,因为我现在无法获得有关在印度(外包)建造的内部系统逻辑的信息。

在这个过程中,如果我能够以某种方式确定插入特定表的记录(并可能更新)的顺序,那将真的对我有帮助。由于某种原因,没有添加任何明确揭示这一点的时间戳,所以我正在寻找一些隐藏的 Oracle RDBMS 索引/时间戳以及如何获取它。我猜使用全选返回记录的顺序不是随机的,所以我想一定有某种顺序。

我希望能够在选择中引用此索引/时间戳,以便将其作为记录集中的字段返回。这可能吗,我该怎么做?

4

1 回答 1

4

默认情况下,Oracle 不会跟踪此类事情。您将需要某种审计表、表中的列、审计日志等来正确检索此类信息。

假设您使用的是相当新的 Oracle 版本(当然是 10.2 或更高版本),ORA_ROWSCN伪列可能足够接近。这是该行上次修改的系统更改号 (SCN) 的上限。但是,除非表是在ROWDEPENDENCIES启用的情况下构建的,否则ORA_ROWSCN只会在块级别跟踪,而不是在行级别跟踪。如果您假设一个块中的所有行都在大致相同的时间点插入,那么这可能已经足够接近了。当然,这不会是完美的——特别是在从块中删除行并且在更晚的时间点进行后续插入填充DELETE操作释放的空间的情况下。但是,如果您碰巧真的很幸运,那么该表是使用ROWDEPENDENCIESenabled 和ORA_ROWSCN将为您提供上次修改(插入或更新)行的 SCN。

SCN_TO_TIMESTAMP函数可用于将 SCN 转换为时间戳,但只能在相对有限的时间段内(通常是几天)和有限的粒度级别(+/- 5 分钟或 3 秒,具体取决于 Oracle 版本) )。在大多数使用 的示例中都使用了ORA_ROWSCN它,但不幸的是,它可能对您没有太大帮助。

于 2012-09-26T21:03:20.937 回答