SQL在Oracle中创建或替换表

SQL在Oracle中创建或替换表,sql,oracle,Sql,Oracle,我们有一个oracle数据库,在构建和安装过程中遇到了问题,当我们更新表模式(添加、修改列、触发器等)时,它并不总是部署到所有实例 现在,我们通过在构建的安装步骤上添加注释来处理架构更新,以便运行alter table命令等。但这些始终假定您是从上一个构建开始的(即,已安装构建3,我们将执行构建4)。如果安装了1,则可能会有alter脚本从1变为2,然后从2变为3,然后从3变为4。因此,这是一个巨大的痛苦的手动过程,我们经常搞砸,错过一个祭坛 有没有一种简单的方法可以在不丢失数据的情况下对表进行

我们有一个oracle数据库,在构建和安装过程中遇到了问题,当我们更新表模式(添加、修改列、触发器等)时,它并不总是部署到所有实例

现在,我们通过在构建的安装步骤上添加注释来处理架构更新,以便运行alter table命令等。但这些始终假定您是从上一个构建开始的(即,已安装构建3,我们将执行构建4)。如果安装了1,则可能会有alter脚本从1变为2,然后从2变为3,然后从3变为4。因此,这是一个巨大的痛苦的手动过程,我们经常搞砸,错过一个祭坛

有没有一种简单的方法可以在不丢失数据的情况下对表进行“创建或替换”?本质上,我们希望将当前表与它应该是的表进行比较并更新它。我们不希望备份表、删除表、创建表,然后还原表。

“基本上,我们希望将当前表与应该的表进行比较并更新它”

假设您有一个好的源代码版本,您想用它来更新其他实例,那么您可以比较Toad的模式(您需要DBA管理模块或Toad Xpert Edition),并生成更新单个表、一组表或您选择的任何对象列表所需的脚本

我想说的是,在针对目标实例运行脚本之前,仍然应该检查/验证脚本。某些更改最好以不同的方式处理(例如,重命名列与删除/创建列)。所以要小心


其他人可能会提出的另一个注意事项是,这个问题表明贵公司的变更管理过程中存在明显的漏洞(这是一个比这个问题大得多的话题)。

查看Liquibase或Flyway之类的工具谢谢。我一直在寻找解决我们问题的创造性方案,但你是对的。问题的根源在于变更管理过程,由于列重命名之类的原因,无法实现自动化(可能是因为没有表的“创建或替换”)。我认为我真正需要的是改变我们的过程,使“安装说明”成为基线脚本,然后当我的开发人员在正常安装之外对数据库运行alters时,给他们一根棍子。