如何在18个数据库(sql server)中维护一致的数据库模式?

如何在18个数据库(sql server)中维护一致的数据库模式?,sql,sql-server,database,schema,Sql,Sql Server,Database,Schema,我们有18个数据库应该有相同的模式,但没有。在某些场景中,一个表被添加到一个表中,而不是其他表。或者,一些数据库中需要某些存储过程,而其他数据库则不需要。或者,我们的DBA忘记运行脚本来在所有数据库上添加视图 保持数据库架构同步的最佳方法是什么?由Red Gate提供的是一个很好的工具。对于旧式修复/清理,有一些工具,例如,可以生成脚本来同步数据库 对于运行SQL Server的.NET商店,还有,它可以为可以签入源代码管理的架构更改创建更改脚本,并使用您的CI/生成过程自动生成。我没有足够的声

我们有18个数据库应该有相同的模式,但没有。在某些场景中,一个表被添加到一个表中,而不是其他表。或者,一些数据库中需要某些存储过程,而其他数据库则不需要。或者,我们的DBA忘记运行脚本来在所有数据库上添加视图


保持数据库架构同步的最佳方法是什么?

由Red Gate提供的是一个很好的工具。

对于旧式修复/清理,有一些工具,例如,可以生成脚本来同步数据库


对于运行SQL Server的.NET商店,还有,它可以为可以签入源代码管理的架构更改创建更改脚本,并使用您的CI/生成过程自动生成。我没有足够的声誉对上述答案发表评论,但SQL Compare的pro版本有一个可编写脚本的API。考虑到您必须将内容复制到所有这些数据库,您可以使用它来创建一个自动化作业,以生成更改脚本或验证数据库是否都处于同步状态。它也不比标准版本贵多少。

除了使用数据库比较工具之外,对于18个数据库,您应该有一个DBA,因此实施一个策略,只有DBA可以通过限制对DBA的访问来更改数据库级别的表。在测试数据库和实时数据库上。当然,dev数据库不应该有这个!让一直在创建或更改模式的开发人员无需通过DBA。

是我用来查找数据库之间差异并使其同步的最佳工具

要保持数据库同步,您需要准备好以下几项:

1) 您需要关于谁可以对生产进行更改的策略。一般情况下,这只应该是DBA(大型组织的DBA团队)和1或2个backap。备份只应在DBA外出或紧急情况下进行更改。不应定期部署备份。根据此策略设置数据库权限

2) 用于管理部署请求的流程和工具。理想情况下,您将拥有一个开发环境、一个测试环境和一个生产环境。开发人员应该在开发环境中进行初始开发,并根据需要将更改推送到测试和生产环境中。您需要某种方式让DBA知道何时推动更改。我不建议你大声呼叫下一个立方体。大型组织可能有一个变更控制委员会,每个月只进行一次变更。较小的公司可能只是让开发人员进行请求测试,测试后会传递一个部署到生产的请求。我工作过的一家较小的公司负责这些请求

在你的情况和预算中使用任何可行的方法,只要有一个过程,并有适合该过程的工具

3) 您说过,有时候对象只需要访问少数几个数据库。由于只有18个数据库,可能在一台服务器上,我建议让每个数据库与对象完全匹配。只有5个DBs需要usp_剂量?那又怎么样?把它放在每个数据库里。这将更容易管理。我们这样做是在一个6服务器系统上,大约有250-300个数据库。也有例外,但它们是分组的。服务器C上的数据库获得了这组额外的对象。服务器上的数据库我有另一套

4) 您说过,有时候DBA忘记将更改脚本部署到所有DBs。这告诉我,s/he需要部署更改的工具。他/她可能正在使用一个SQL脚本,在Query Analyzer或Manegement Studio(或您使用的任何工具)中打开它,然后手动转到每个数据库并执行SQL。这不是一个好的长期(或短期)解决方案。(上面SQLCompare的制造商)有很多很棒的工具。看起来它可以用于部署目的。我与一位DBA合作,他使用O-SQL在SQLServer2000中编写了自己的工具。它将获取一个SQL文件,并在服务器上的每个数据库上执行它。他必须在每台服务器上执行,但这比在每台数据库上执行要好。我还帮助编写了一个VB.net工具,它也可以做同样的事情,只是它也会遍历服务器列表,所以只需要执行一次


5) 源头控制。我目前的团队不使用源代码管理,我没有足够的时间告诉您这会导致多少问题。如果你没有某种源代码管理系统,那就买一个吧

为每个版本创建一个受源代码控制的DDL/SQL脚本,并仅使用它来更新数据库。diff工具可能很有用,但主要用于检查您是否犯了错误,以及在策略失败时摆脱麻烦。将DDL、SQL和存储过程脚本组合成一个脚本,这样就不容易“忘记”运行其中一个脚本。

我们有一个名为DB Schema Difftective的工具,可以比较和同步数据库模式。使用我们的另一个工具DB MultiRun,您可以轻松地将生成的(同步)脚本部署到多个DB服务器(基于项目)。

我知道这篇文章很旧,但TurnKey是正确的。如果您是在团队环境中工作的开发人员,为大型应用程序维护数据库架构的最佳方法是使用任何源代码安全的方式更新主架构。只需编写自己的脚本类,您的数据库每次都会非常完美