如何将SQL Server 2005数据库从生产复制到开发?

时间:2008-10-29 18:34:19

标签: sql-server sql-server-2005

我们有一个生产SQL Server 2005数据库服务器,上面有我们应用程序数据库的生产版本。我希望能够将生产数据库的数据内容复制到开发服务器进行测试。

有几个网站(和微软的论坛)建议使用备份/恢复选项从一台服务器复制数据库,但是由于多种原因,这个解决方案不可行(我的生产数据库没有备份权限,我不知道我想覆盖开发服务器上的权限,我不想覆盖开发服务器上的结构更改等...)

我尝试在SQL Server 2005中使用SQL导入/导出向导,但它始终报告主键冲突。如何在不使用“备份/恢复”方法的情况下将数据库的内容从生产服务器复制到开发中?

11 个答案:

答案 0 :(得分:3)

没有适当的权利,它真的变得更乏味,而且不够理想。

我建议的一种方法是删除所有约束和索引,然后在导入/导出数据后再次添加它们。

不是一个优雅的解决方案,但它的处理速度非常快。

编辑: 另一个选择是创建一个SSIS包,您可以按照不违反约束的顺序专门转储表。

答案 1 :(得分:2)

我经常使用SQL数据比较(http://www.red-gate.com/products/sql_data_compare/index.htm)来执行此任务:它编写的同步脚本将在传输过程中删除关系并重新应用它们,但在大多数开发情况下都可以。它适用于较小的数据库或数据库子集。

如果您的数据库很大,我建议找一个带有王国钥匙的人。执行无序备份可能会破坏从主备份恢复数据库的能力(例如,如果他们在一周中进行部分操作),则标记仅在 备份中备份的记录,所以如果你不确定为什么它存在,请不要试图绕过那个安全。

答案 2 :(得分:2)

假设您可以从同一台机器连接到两台数据库(几乎总是可以 - 我通过VPN与我的生产服务器一起工作)。

每张桌子

DELETE FROM devserv.dbo.tablename;
SET identity_insert [devserv.dbo.tablename] ON;
INSERT into devserv.dbo.tablename SELECT * from prodserv.dbo.tablename;
SET identity_insert [devname.dbo.tablename] OFF;

显然值得注意的是,如果您的表具有外键约束,则需要按特定顺序执行此操作。

答案 3 :(得分:1)

导入/导出向导因这种事情而臭名昭着,实际上有一个错误,使得它在计算依赖关系时更没用(抱歉,没有详细信息)。

SSIS做得更好,但是您必须手动添加每个表复制任务(实际上是数据源,复制任务和数据目标对象。设置有点繁琐(超过它应该) ,但比编写自己的代码简单得多。

一个提示:避免使用导入/导出向导生成SSIS项目,认为调整它会更容易。即使有一些SSIS经验,它也能产生大多数人无法识别的东西!

答案 4 :(得分:1)

如果您在生产服务器上没有备份权限,我想这是因为您正在使用来自webhoster的共享SQL Server。在这种情况下,请检查您的webhoster是否提供名为myLittleBackup的工具。它允许通过几次点击将数据库从一台服务器安装到另一台服务器......

答案 5 :(得分:0)

我会联系有权备份数据库的人。由于某种原因,权限通常

答案 6 :(得分:0)

我可能会考虑获得一个备份,因为你会运行它或者不运行(至少理论上正在备份Prod DB :))

然后只需恢复到开发箱上的全新数据库,这样就不会与任何人或任何其他人发生冲突。

如果您还原到新数据库,您还可以根据需要手动提取表格和数据,并且因为您创建了数据库,所以您可以给自己权利,这一切都可以。还有很多其他的方法,都很乏味。

答案 7 :(得分:0)

显然值得注意的是,如果您的表具有外键约束,则需要按特定顺序执行此操作。

答案 8 :(得分:0)

我们只是在工作中使用SQL Server Database Publishing Wizard

您可以使用此小实用程序生成描述生产数据库(包括其所有数据)的T-SQL脚本。然后连接到您的开发服务器并运行生成的脚本。

答案 9 :(得分:0)

如果你必须避免备份/恢复,这就是我的建议(这些步骤假设你不想维护旧架构NAME,只是结构) -

下载opendbdiff。选择源和(空)目标之间的“比较”。选择同步。脚本选项卡和仅复制创建表行(不带dbo.sysdiagrams表等)粘贴到sql管理工作室新查询,删除表名前出现的所有模式名称。

现在您拥有完整的结构,包括主键,身份等。下一步 - 使用sql server导入和导出数据,就像之前一样(确保选择编辑映射并选择目标模式为dbo等)。还要确保勾选并重新创建目标表。

答案 10 :(得分:-1)

在您的Dev计算机上,将链接服务器设置到您的生产计算机。然后只是

  

INSERT dev.db.dbo.table(fieldlist)

     

来自prod.db.dbo.table的SELECT(fieldlist)