在Informix中,我可以从systables表中执行select操作,并且可以调查其version列,以查看给定表的数字版本。此列随着影响给定表的每条DDL语句而递增。这意味着我能够查看自上次连接以来表的结构是否发生了变化。
在Oracle中是否有类似的方法来完成此操作?
发布于 2010-01-27 00:08:55
不怎么有意思。Oracle DBA/ALL/USER_OBJECTS视图有一个LAST_DDL_TIME列,但它受结构更改以外的其他操作的影响。
发布于 2010-01-27 00:20:19
您可以使用DDL触发器来实现这一点(甚至更多),该触发器可以跟踪表的更改。有一篇关于here示例的有趣文章。
发布于 2010-01-27 03:16:13
如果您真的想这样做,就必须使用Oracle的审计功能来审计更改。它可以像下面这样简单:
AUDIT ALTER TABLE WHENEVER SUCCESSFUL on [schema I care about];这至少可以捕获成功的更改,忽略drops和creates。不幸的是,通过挖掘审计跟踪来解开表的历史结构堆栈,留给Oracle中的读者作为练习,或者授权Change Management Pack。
您还可以通过编写在DDL语句上调用的系统事件触发器来执行您自己的审计。如果你真的想知道发生了什么变化,你最终不得不编写你自己的SQL解析器。
https://stackoverflow.com/questions/2140216
复制相似问题