繁体   English   中英

基于多系统数据库结构的复制/更新最佳实践

[英]Multi System Database structure based copying/updating best practice

因此,在搜索并没有找到类似案例之后,我想提出一个新问题。 情况就是这样:我们正在使用具有非常复杂的数据结构的大型数据库。 另外,我们正在开发多个系统,以确保稳定性(开发,测试,质量和生产性),并且始终难以解决,因此请在这些系统之间移动数据。 正如我所说的,数据结构非常大,数据库内部也有很多逻辑。 客户能够添加新的数据部分作为配置,并且还有静态收入的数据用于统计和监视。 因此,让我用一个小例子来解释这个问题:

在此处输入图片说明

让我们以该数据库为例。 我们有一些家庭互相竞争。 他们将针对他们提出的观点创建一些统计数据。

  • 紫色表是固定配置。 它们仅创建一次,只能通过操作员进行更改。 这些更改将首先在开发系统中进行和测试。
  • 黄表正在更改配置。 每个家庭都可以创建或删除多个竞赛并为其分配孩子。
  • 红色表只是纯数据。 每次孩子得分时,都会在新行中添加金额,当前时间以及与孩子和比赛的关系。 该表将成为以后的统计信息的基础。

该数据库是在两个系统上开发的,一个是供家庭使用的高效系统,另一个是供程序员/操作员使用的开发系统。

在开发过程中,程序员将添加测试数据,例如儿童家庭竞赛和积分。 在使用家庭时,将创建新的比赛并分配新的孩子,并填写积分表。

  • 有必要将新的/经过测试的/固定的族从开发复制到生产系统。
  • 还必须将竞赛,竞赛儿童作业和点数从生产者复制到开发系统中,以发现新的错误。
  • 同样,必须有可能更改开发系统上的表结构,并将此更改传递给生产系统。 (这不应该是这里的主要主题,有时更改可能是如此之大,以至于没有简单的方法,所以让这一点保持简单,但要牢记在心。)

我想将表的一部分复制到另一个系统,但是能够忽略某些表(例如:Points),并且我想确保不复制没有其父母家庭的孩子,因此数据库中没有“无父母”对象。

问题:什么是省事的好方法?

我不需要特定数据库类型或某些脚本的解决方案。 我正在寻找工具,库或良好实践。 (但请注意,我们正在使用mssql。)

我们目前正在为解决此问题制作工具(进展不佳:不稳定,过于复杂,缓慢且可能会重新发明轮子)。

我认识的很多开发人员也只是复制整个数据库(进行备份并将其运行到另一台服务器上),但这也造成了问题:正在复制用户并更改其GUID,因此他们失去了权限等。我不认为这是一个很好的解决方案。 而且数据库关闭了很长一段时间,而且从来没有一个平稳的过程。

手动进行创建有时是最简单的方法,但是考虑到我们数据结构的大小,这不仅是一项繁重的工作,而且很容易出错。

所以我希望有人知道某种工具或类似的东西可以帮助我。

欢迎使用像数据库这样的有状态实体的发展过程。 :) RedGate制作了一个称为SQL Source Control的工具,该工具非常适合将更改的数据和Schema移入生产环境,并且可以与GIT之类的源代码控制解决方案进行交互。 它有点贵,但这是我发现的最好的。 我在最后一个工作岗位上炮制了一个使开发人员与生产数据和开发人员变更保持最新的选择,这不是……不是百分百完美,而是总比没有好,而且免费。 它是用Powershell开发的,它的内容如下:

  1. 创建Pre-restore,Pre-dacpac和Post-dacpac SQL脚本以存储开发人员和生产人员之间的数据和权限差异
  2. 使用SQLPackage.EXE制作Dev的DacPac(Dacpac基本上是db的xml模式,没有数据)
  3. 执行Pre-restore Proc(通常复制需要保留的测试数据)
  4. 通过开发还原产品
  5. 执行Pre-dacpac脚本(任何可能导致数据丢失的DDL都需要转到此处)
  6. 使用SQLPackage.EXE将步骤2中制作的DacPac应用于新还原的数据库
  7. 执行后Dacpac脚本(权限,还原在步骤3中复制的数据)

再次,就像我说的那样,它可以将产品数据还原到我们的开发环境中并自动进行,同时又保持我们的开发变更完整无缺,但是需要大量的维护和维护。 另外,请记住,一旦数据库达到一定大小,由于需要花费大量时间,因此每晚进行还原不再是可行的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM