在表 Oracle DB 上执行的最后一个 DDL

Posted

技术标签:

【中文标题】在表 Oracle DB 上执行的最后一个 DDL【英文标题】:Last DDL performed on a table Oracle DB 【发布时间】:2015-04-10 14:32:57 【问题描述】:

有没有办法知道在表上执行的最后一个 ddl?我不想知道时间而是 ddl 语句(创建、更改、删​​除)。

问题:当我在表上插入一行时,TOAD 没有响应并且数据库不能被其他用户使用,被锁定。 用任务管理器杀掉toad进程后,重新打开,说表的最后ddl时间好像是4秒前,没有插入行。这个问题只发生在那个表上。

我知道插入是一个 DML 语句,所以我不知道为什么最后一个 ddl 时间会被更新。

PS:英语不是我的第一语言,希望你能看懂正文。-

【问题讨论】:

您使用的语句到底是什么?我没有看到 DDL 和“未插入行”之间的关系?当您运行 DDL 语句时,您期望什么样的插入? 其实我什至没有使用插入句。我正在使用模式浏览器插入一行 再次:您正在运行的 SQL 语句是什么? TOAD 是你的问题......(可能)......它可能在我认为记录为 DDL 的表上做了某种显式(在引擎盖下)锁定。你有没有试过做一个简单的 INSERT is sqlplus 看看你是否得到相同的结果?而且,您是否在 INSERT 之后提交...我认为 TOAD 将每个窗口作为一个单独的会话连接,因此如果您在一个窗口中插入(无论是模式浏览器还是其他),那么该窗口将被锁定,从而阻止其他窗口从对该行/表进行更新(取决于确切的锁)。 要回答您关于 DDL 是什么的问题 - 尝试查看 V$SQL 和(如果您有访问权限)dba_hist_sqltext。 【参考方案1】:

您可以查看 ALL_OBJECTS 表中的 last_ddl_time 列。

http://docs.oracle.com/cd/B14117_01/server.101/b10755/statviews_1102.htm

【讨论】:

这并没有回答小伙子的问题——他问的是最后一个 DDL 是什么,而不是什么时候......他似乎已经知道了。

以上是关于在表 Oracle DB 上执行的最后一个 DDL的主要内容,如果未能解决你的问题,请参考以下文章

获取不同 Schema 中 Oracle 表的最后 DDL 时间

如何找到 ORACLE 包中的过程的最后一个 DDL? [复制]

Oracle 立即执行 DDL 和嵌套表

SQL脚本执行控制

自治事务中的 Oracle DDL

Oracle约束详解