为什么不建议以编程方式更改 table 结构?

why is not adviced to change table structure programatically?

一般而言,应用程序用户不应该拥有 DDL 权限。 我一直在寻找这个原因,但找不到任何东西。

我能理解这种设计可能存在锁定问题,但想阅读更多相关细节。

任何人都可以解释或指出任何关于此的文章吗?

非常感谢!!

Generally, application user is not supposed to have DDL rights. I was searching for the reason for this but could not find anything.

Creating/Altering table 不是即时完成的。您创建它们一次,并且只能通过应用程序操作数据(使用 PL/SQL 存储的对象)。数据库设计不应经常更改,即 应用程序用户 不应 add/alter/drop 数据库对象。它应该由 数据库用户 (需要 privilege/role)而不是应用程序用户完成。

应用程序应该只执行 DML 而不是 DDL。应用程序用户应该只能操作数据,而不能操作存储数据的对象本身。

想象一个有多个用户的数据库,每个用户在没有其他用户 knowledge/consent 的情况下执行 DDL 操作。其他用户将如何工作?基于数据库设计的功能呢?基于数据库设计的应用逻辑呢?每个生产系统都有一个针对此类更改的发布日历,这是不应该经常进行的事情。

"never use DDL in businesses logic" - 这是 Oracle 的经验法则。

  • DDL 不缩放
  • DDL 需要独占锁,可能会在 DDL 执行超时时死掉
  • DDL不可回滚(不支持事务)
  • DDL 使执行计划无效
  • DDL 可能需要重新编译 PL/SQL 代码

您通常不希望这种情况发生在工作时间。