在Informix中,我可以从systables表中进行选择,并可以调查其版本列以查看给定表具有的数字版本。每列影响给定表的DDL语句都会增加此列。这意味着我能够查看自上次连接以来表的结构是否发生了变化。
在Oracle中有类似的方法吗?
答案 0 :(得分:3)
不是真的。 Oracle DBA / ALL / USER_OBJECTS视图具有LAST_DDL_TIME列,但它受结构更改以外的操作的影响。
答案 1 :(得分:3)
您可以使用DDL触发器来执行该操作(以及更多),以跟踪对表的更改。这是一篇有趣的文章,内容为here。
答案 2 :(得分:2)
如果您确实想这样做,则必须使用Oracle的审核功能来审核更改。它可以很简单:
AUDIT ALTER TABLE WHENEVER SUCCESSFUL on [schema I care about];
这至少可以捕捉成功的变化,忽略掉落和创造。不幸的是,通过挖掘审计跟踪来展开表的历史结构堆栈,这可以留给Oracle中的读者,或者授权更改管理包。
您还可以通过编写在DDL语句上调用的系统事件触发器来进行自己的审计。如果你真的想看看发生了什么变化,你最终必须编写自己的SQL解析器。