sqlserver服务自动停止_使用SQL Clone和SQL Toolbelt自动创建和刷新开发和测试数据库...

为了更快地交付数据库更改,必须自动完成几个任务。当存在大量副本且数据库很大时,要确保整个团队拥有最新的数据库版本可能是一项艰巨的工作。本文提供了一种PowerShell自动化脚本,该脚本可以在测试和开发工作所需的一台或多台服务器上创建和刷新各种数据库。它使用Redgate的SQL Clone(SQL Provision的一个组成部分),SQL Compare和SQL Toolbelt中的其他一些可选工具。

该解决方案的基本前提是正在开发数据库,并且其源存储在版本控制系统(VCS)中。自动化脚本将使用版本控制中的最新构建脚本来构建数据库,并在需要时向其存储数据,并在需要时记录数据库。在下一阶段,它将使用SQL Clone创建此数据库的映像,并根据该映像在指定的每个SQL Server开发和测试实例上创建数据库的“克隆”,或刷新现有的克隆。最终结果是,对于该数据库版本,所有开发和测试数据库最终都应具有与源中指定的元数据和数据相同的元数据和数据。

871d0c680e7dc6655a11f2ad0b746e6c.png

自动化脚本带有一些安全检查,以确保例如删除现有克隆并从新映像创建新克隆之前,对本地数据库克隆的任何更改都将写入到VCS中的目录中,以作为保护措施。

背景

还记得数据库开发过程中的纯真时光,那时通常在一台服务器上只有一个开发数据库,都在该数据库上进行了开发和测试。

在许多方面管理得很好,因为关系数据库毕竟是多用户,多进程的设备,并且是其自己的开发环境。将数据库对象脚本存储在源代码管理中,并将检出诸如表或视图之类的对象以对其进行编辑,进行工作,然后执行检入以将更改包括在下一个开发版本中。当一个开发人员决定根据另一个开发人员的工作相互依赖地更改对象时,会带来一些麻烦,因此在同一房间内大声喊叫也是如此。模式的出现结束了明显的冲突。

进行构建时,将完全根据源代码管理中的脚本来创建数据库的新版本。从理论上讲,这意味着没有多余的东西,没有被明确包括的东西,都不会潜入构建中。在实践中,即使数据库开发人员也是人,而且错误很常见。每晚进行集成测试,以证明每个构建都可以生成正常运行的数据库。

当然,在开发中拥有经过测试的功能正常的数据库并不一定意味着拥有可交付生产的数据库。通常,会四处乱写以确保数据库的更新测试版本可以与依赖该数据库的任何现有生产系统一起使用,并逐步进行实践,直到一切正常。这不是很漂亮,可能需要很长时间。会错过原本准备好的事情,并且会发现必须解决的冲突。

如今,通过脚本自动构建,集成和部署数据库。尽可能地练习此过程。没有太过欢乐的日子,因为数据库过于成熟,无法构建和部署。取而代之的是,编写完除了几个“ hello world”数据库对象以外的任何其他内容时,都希望立即开始将数据库进行升级。这意味着会立即收到有关问题的反馈,并且还可以随时说明是否具有可以交付的版本。如果应用程序开发人员正在等待数据库更改或有重要的安全修复程序,希望能够在数据库生命周期的任何阶段非常快速,可靠地交付数据库。

交付周期越快,对最新版本副本的要求就越高。有一些开发人员需要处理他们自己的数据库隔离副本,但是还需要数据库的多个副本来进行开发和测试,而不仅仅是共享一个。通常需要一个带有服务器和数据库的测试单元,以支持并行执行的各种测试,并且在某些测试中,我们需要针对其他版本的数据库来验证构建。

必须越快地交付,就越难以保持数据库文档的最新状态,并且就越需要使该过程自动化。如果用来开发的部分数据在隐私,公司安全性或财务方面敏感,需要对开发和测试的数据进行屏蔽,混淆或从头开始创建。所有这些因素都要求执行自动构建过程。

PowerShell自动化解决方案

在某个时候,必须停止一般性的交谈,停止挥舞着手臂,同时掩盖实际的技术问题,并编写出实用的脚本,以尽可能明智地应对这些挑战,并能够可靠地自动为开发和测试服务器提供数据库。

当然,这有一些固有的危险。首先,没有两个开发团队以相同的方式完成数据库开发,因此必须更改脚本以符合开发环境。其次,真实的脚本太特质了。它们过多地揭示了开发数据库的过程中的怪癖。

为了克服这些问题,创建一个PowerShell脚本,希望该脚本易于适应,但可以以一般方式处理所有问题。一般原则是:

  • 如果构建成功,则列表中指定的所有数据库必须最终成为当前成功构建的版本。

  • 在更新开发数据库之前,会保留更改,以防开发人员忘记将其工作保存在源代码管理中。

  • 会审核尽可能多的配置过程。

  • 需要允许任意的构建前脚本和构建后脚本,主要是用于插入数据。

  • 应该可以检查整个数据库构建脚本。

  • 用于使整个过程自动化的PowerShell脚本应没有硬编码的变量。这些应保存在单独的构建数据文件中。

解决方案一目了然

大致列出了脚本在数据库供应过程的每个阶段所执行的操作。

cccab0cdb14f01e2ec112d7d4d871781.png

需要做什么才能使其运行

至少需要几个SQL Server实例,一个SQL Compare副本和一个SQL Clone副本。需要安装SQL Clone并设置SQL Clone Server以及将在其上创建克隆的客户端开发和测试服务器。

如果有工具带,则可以根据需要使用SQL数据比较,SQL数据生成器和SQL Doc。将需要从GitHub下载PowerShell自动化解决方案。它由两个PowerShell文件组成:生成数据文件(MyInstallationData.ps1)和过程脚本(RedgateProvisioning.ps1)。该流程脚本从构建数据文件中获取构建和供应以及所有参数的说明。流程脚本中不包含任何配置信息。

需要更改存储在构建数据文件中的值,以定义数据库,服务器环境,网络路径,克隆列表等。将在本文后面描述构建数据文件的结构。

解决方案如何运作

该解决方案具有两个主要的运行阶段:构建阶段和供应阶段。

在构建阶段创建构建服务器上最新的数据库版本,其文档和测试数据的股票吧。为此,它使用各种SQL Toolbelt工具,即SQL比较,SQL数据比较,SQL Doc和SQL数据生成器。仅SQL比较是必不可少的。

所述提供阶段提供了对每个指定的开发或测试的实例与所述构建数据库的副本,通过生成阶段产生的。传统上,这可能意味着对构建数据库进行备份并将其还原到每个开发和测试服务器,或者将MDF文件复制到每个服务器并将其附加到实例。无论哪种情况,这都意味着需要通过网络多次复制相同字节的数据。随着构建数据库大小的增长和副本数量的增加,这在时间和磁盘空间方面都变得越来越昂贵。

在此解决方案中,供应阶段使用SQL Clone,该操作仅复制一次字节,然后使用Windows内置的磁盘存储虚拟化技术来虚拟化每个目标实例上的数据。

SQL Clone为构成源数据库的所有数据和元数据创建一个完整副本的图像。然后,可以从该映像在每个开发SQL Server实例上创建克隆。每个克隆只有几十MB的大小,但是可以通过读取映像来访问所有相同的字节。每个实例在本地存储的唯一数据是包含直接对本地克隆数据库进行的更改的数据页。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值