【问题标题】:Is there a index or timestamp for Oracle RDBMS records, and how do I obtain it?Oracle RDBMS 记录是否有索引或时间戳,如何获取?
【发布时间】:2012-09-26 20:50:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql database oracle


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,幸运的是,索引很可能足以帮助我识别逻辑。我应该能够在 Toad(我们的主要数据库管理工具)中看到表创建脚本,并在我开始工作时确定它是否是使用 ROWDEPENDECIES 构建的。
    猜你喜欢
    • 2022-11-04
    • 2018-10-07
    • 1970-01-01
    • 2022-01-06
    • 2019-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多