2011-10-12 98 views
2

因此,这里的交易:SQL Server 2008的差异数据库

背景

  • 在Hyper-V虚拟机可以处理差异磁盘模式,其中一个可以设置原始VHD文件中读取 - 只有状态,并创建一个新的vhd,以跟踪和坚持这些变化。这样做的优点是你可以很容易,而不必重新安装Windows创建新虚拟机等

问题

  • 我所寻找的是类似的东西,但对于SQL Server数据库。我们在本地进行所有开发,然后我们有一个包含X实例的框(每个开发人员1个)。然后,我们有一个过程,将生成的生产备份复制到这些实例并将其恢复。完成之后,它会检查开发人员选择的分支(SQL脚本)并在实例上运行脚本。通过这种方式,他们可以在生产数据实际投入生产之前对其代码进行测试。然而,对于每个实例都有一份我们所有生产数据库的副本是一件非常痛苦的事情 - 最好有一套产品,并且有一个差异选项,它只是保持所做的更改。这是可能的还是我在做梦?

可能的解决方法

  • 一个解决方案我想到的只是使用一个实际的差异磁盘VHD。我将创建一个具有我们的生产备份数据库的基本VHD,这将在生产数据库的夜晚进行修改/创建。然后我会修改/创建差异磁盘并将脚本应用到每个差异磁盘。这样我们有1个dbs副本,开发人员的更改被记录到一个单独的差异磁盘。但是,我希望在SQL服务器中完成这一点。

回答

0

基本上结束我来是为了尝试和自动化如下差异磁盘的过程:

  1. 在网络西安商贸大厦,我们会打电话给这个NAS1创建一个新的虚拟硬盘。
  2. 山从NAS1的机器上充当SQL处理器VHD(我们将
    1. 复制BAK SQL从生产文件调用此SQLPROCESS1。
    2. SQLPROCESS1执行以下操作。到SQLPROCESS1(这可能需要但是这整个#3可以放入一个线程应用程序,因此它可以复制多个并同时恢复)
    3. 将SQLPROCESS1和点数据文件(mdf,ldf)上的文件恢复到驻留新的VHD
    4. 可选:将SQL dbs更改为SIMPLE备份模式并使用SHRINKFILE,因为我们将仅将它们用于开发(并且不需要备份)。这可以为我们节省很多空间。
    5. 分离所有dbs。
    6. 分离VHD。
  3. 从NAS1上的父级创建差异磁盘。
  4. 复制差异磁盘X次数(根据实例或开发人员的需要)。
  5. 可选:我们使用名为TEST1的中央服务器进行测试,这是我们要安装每个差异磁盘的位置 - 每个实例或开发人员1个。
    1. 我们首先需要从每个实例中分离所有dbs。
    2. 然后我们需要卸载/分离现有的差分VHD,如果有的话。
  6. 附加差异磁盘。
  7. 重新连接SQL Server中的所有dbs。
  8. 可选:根据每个开发人员指定的代码存储库分支运行SQL脚本。

参考文献:

要自动我会用一组简单的批处理文件,VBS或PowerShell的。

编辑:刚试过这个,它工作的很棒!开发人员现在拥有自己的实例,并且只记录其更改。