代码之家  ›  专栏  ›  技术社区  ›  Laird Nelson

我可以在Oracle中检测表的DDL版本吗?

  •  2
  • Laird Nelson  · 技术社区  · 16 年前

    在Informix中,我可以从systables表中进行选择,并可以调查其version列,以查看给定表的数字版本。此列随影响给定表的每个DDL语句递增。这意味着我可以查看自上次连接以来表的结构是否发生了更改。

    在Oracle中有类似的方法吗?

    3 回复  |  直到 16 年前
        1
  •  3
  •   dpbradley    16 年前

    不是真的。Oracle DBA/All/User_对象视图有最后一个DDL_时间列,但它受除结构更改之外的操作的影响。

        2
  •  3
  •   Pop    16 年前

    您可以使用一个跟踪表更改的DDL触发器来实现这一点(以及更多)。有一篇有趣的文章举例说明 here .

        3
  •  2
  •   Adam Musch    16 年前

    如果您真的想这样做,您必须使用Oracle的审计功能来审计更改。它可以简单到:

    AUDIT ALTER TABLE WHENEVER SUCCESSFUL on [schema I care about];
    

    这至少可以捕获成功的更改,忽略放置和创建。不幸的是,通过挖掘审计跟踪来展开表的历史结构堆栈,这留给Oracle中的读者作为练习,或者授权变更管理包。

    您还可以通过编写在DDL语句上调用的系统事件触发器来滚动自己的审计。如果您真的想知道发生了什么变化,那么您最终将不得不编写自己的SQL解析器。

    推荐文章