小编典典

我应该如何将DDL更改从一种环境迁移到另一种环境?

sql

我使用SQLDeveloper的GUI进行DDL更改。问题是,我需要将那些相同的更改应用于测试环境。我想知道其他人如何处理这个问题。当前,我必须手动编写ALTER语句以使测试环境与开发环境保持一致,但这容易出错(两次执行相同的操作)。在测试环境中没有重要数据的情况下,我通常会把所有东西丢掉,从dev中导出DDL脚本,并在测试中从头开始运行它们。

我知道有一些触发器可以存储每个DDL更改,但这是一个高度共享的环境,如果可能,我想避免这种情况。

也许我应该只手动编写DDL东西,而不要使用GUI?


阅读 169

收藏
2021-04-28

共1个答案

小编典典

我已经看到了一种“我不知道如何做”的方法来尝试解决此问题,最后,我认为您只需要维护手动脚本即可。

现在,您不必一定要自己写。在MSSQL中,当您进行更改时,有一个用于生成脚本的小按钮,它将吐出一个SQL脚本来进行您所做的更改。我知道您在谈论Oracle,距我使用他们的GUI已有好几年了,但我只能想象他们具有相同的功能。

但是,您无法摆脱手动使用脚本的麻烦。关于现有数据,您将遇到很多问题,例如新列的默认值或如何处理重命名/删除/移动的列的数据。这只是随着时间的推移而无法摆脱的使用数据库模式的分析的一部分。如果您尝试使用完全自动化的解决方案来执行此操作,则迟早会弄乱您的数据。

我建议做的一件事,就是让您的生活更轻松一些,请确保将架构更改与代码更改分开。不同之处在于,对表和列的模式更改必须准确地运行一次,并且永远不要再次运行,因此必须作为单独的更改脚本进行版本控制。但是,代码更改(例如存储的proc,函数甚至视图)可以(并且应该)反复运行,并且可以像其他任何代码文件一样进行版本控制。我看到的最好的方法是在VSS中拥有所有proc
/函数/视图时,我们的构建过程将删除所有过程/函数/视图,并在每次更新期间重新创建它们。这与重建C#/ Java
/任何代码的想法相同,因为它确保所有内容始终都是最新的。

2021-04-28