代码之家  ›  专栏  ›  技术社区  ›  Phillip

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

  •  0
  • Phillip  · 技术社区  · 7 年前

    所以在搜索了没有找到类似的案例之后,我想提出一个新的问题。 以下是案例: 我们正在处理一个数据结构非常复杂的大型数据库。此外,我们正在多个系统上工作,以确保稳定性(开发、测试、质量和生产力),因此在这些系统之间移动数据一直是一个难题。正如我所说的,数据结构非常大,数据库内部也有很多逻辑。客户可以添加新的数据部分作为配置,也有一个静态的数据收入,用于统计和监控。让我用一个小例子来解释这个问题:

    enter image description here

    以这个数据库为例。我们有些家庭在互相竞争。他们会创建一些关于他们所得到的分数的统计数据。

    • 黄表正在改变配置。每个家庭都可以创建或删除多个比赛,并分配他们的孩子。
    • 此表将作为以后统计的基础。

    这个数据库是在两个系统上开发的:一个是家庭使用的生产系统,另一个是程序员/操作员使用的开发系统。

    • 有必要将新的/经过测试的/固定的家庭从开发区复制到生产系统中。
    • 同样有必要将竞赛、竞赛儿童作业和分数从生产系统复制到开发系统,以发现新的错误。
    • 此外,还必须能够更改开发系统上的表结构,并将此更改传递到生产系统。(这不应该是这里的主要主题,有时它可能是如此巨大的变化,以至于没有简单的方法,所以让我们把这一点简单化,但要记住这一点。)

    我想将表的一部分复制到另一个系统,但是可以忽略一些表(例如:点),并且我要确保不复制没有父族的子表,这样数据库中就没有“无父”对象。

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

    我们目前正在为这个问题开发一个工具(进展不顺利:不稳定,过于复杂,速度慢,可能会重新发明轮子)。

    另外,我知道的很多开发人员只是复制整个数据库(进行备份并运行到另一个服务器上),但这也造成了问题:用户被复制,他们的guid更改,因此他们失去了权限等等。我认为这不是一个好的解决方案。而且,数据库已经关闭了相当长的时间,它从来不是一个顺利的过程。

    手动生成有时是最简单的方法,但考虑到我们的数据结构的大小,这不仅是一项巨大的工作,而且还有很大的可能出错。

    所以我希望有人知道一个工具或类似的东西来帮助我。

    1 回复  |  直到 7 年前
        1
  •  2
  •   BeardOfTriumph    7 年前

    欢迎来到有状态实体(如数据库)的开发之痛。:)RedGate开发了一个名为SQL源代码管理的工具,它可以很好地将更改后的数据和架构移动到生产环境中,并且可以与GIT等源代码管理解决方案交互。有点贵,但这是我找到的最好的。一个让开发人员及时了解产品数据和开发变更的选项是我在上一个工作地点编造的,它是。。。不是百分之百完美,但总比没有好,而且免费。它是在Powershell中开发的,它是这样的:

    1. 创建预还原、预dacpac和后dacpac SQL脚本以存储数据和 开发和生产之间的权限差异
    2. 使用SQLPackage.EXE为了使DacPac成为Dev(DacPac基本上是一个db的xml模式,不是吗 数据)
    3. 执行预还原过程(通常复制需要持久化的测试数据)
    4. 恢复Prod over Dev
    5. 执行预dacpac脚本(可能导致数据丢失的任何DDL都需要在这里执行)
    6. 使用SQLPackage.EXE将步骤2中的DacPac应用于新恢复的数据库

    同样,正如我所说的,它可以工作并自动将prod数据恢复到我们的开发环境中,同时保持我们的开发更改不变,但是它需要一点很好的维护和维护。另外,请记住,一旦您的数据库达到一定的大小,由于恢复所需的时间,夜间恢复不再是一个可行的选择。

    推荐文章