1

我们将我们的数据库置于版本控制之下。我们有大约 2400 个对象,其中大部分是存储过程。

因此,如果不存在,我们已经为除表之外的所有对象创建脚本。

我们在存储增量脚本的单独文件夹中维护表脚本。只有增量脚本被编号。其他与程序、视图和功能相关的脚本将直接运行。

因此,当开发人员在 svn 中提交更改时,我们希望在暂存版本上运行它们。问题是对象的依赖性。

如果开发人员在一次提交中提交了多个脚本,这些脚本可能相互依赖,或者如果我们想合并多个修订版然后组合运行脚本,那么我们无法确定运行脚本的正确顺序。

任何人都可以提出一些管理依赖项并帮助我们确保脚本首次运行的好方法。

我们不能在这么多的生产服务器中使用 redgate 工具,所以除了使用 sql compare 或 sql sourcecontrol,我将不胜感激。

我们总是首先运行 table delta 脚本,因为它们不依赖于其他对象(开发人员也会在脚本中管理它),然后是其他对象

我们已经为运行其他对象的顺序提供了一些解决方法,例如

1)我们可以将对象的依赖关系存储在另一个具有相同名称但扩展名不同的文件中,这样如果依赖关系发生变化,则开发人员应该使用脚本提交它。然后我们可以制作一棵树,根据它我们可以运行脚本。

2)我们可以先创建一个树然后在svn中提交它,如果依赖关系发生变化,然后我们可以在登台机器上测试脚本并发生错误后将它添加到树中。(这需要在第一次失败后提交svn并要求自动化过程第一次失败)

3)我们可以一次又一次地运行脚本,而无需使用事务的最大次数和对象的数量一样。假设最坏的情况,这将导致最终正确运行所有脚本。

如果您有其他想法或可以改进其中一些想法,请贡献。

4

3 回答 3

0

你看过 SQL Server 管理对象吗?

它支持通过DependencyWalker类识别关系,因此可能正是您所追求的。

您是否要相信 SQL Server 维护的依赖链是准确的完全是另一回事......如果不是,那么您最好的选择可能是放弃自动化并让您的开发人员负责提交适当的升级脚本,即然后,您将按照提交给 SVN 的顺序重播。

于 2013-02-07T14:12:14.127 回答
0

你看过这个吗?

http://www.red-gate.com/products/sql.../sql-source-control/

这是一套相当不错的工具,可以用最少的努力来捕捉你的差异。

于 2013-02-07T14:14:13.707 回答
0

如果您不能使用任何其他类型的自动化,您可以使用tsort。tsort 实用程序是一个实现拓扑排序的 Unix 程序。(它可能适用于大多数操作系统。)它根据显示部分排序的输入输出完整的、总排序的字符串。

于 2013-02-07T14:38:05.800 回答