代码之家  ›  专栏  ›  技术社区  ›  Adam Ness

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

  •  2
  • Adam Ness  · 技术社区  · 17 年前

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

    多个站点(和Microsoft论坛)建议使用备份/还原选项从一台服务器复制另一台服务器上的数据库,但此解决方案由于多种原因无法工作(我在生产数据库上没有备份权限,我不想覆盖开发服务器上的权限,我不想覆盖对开发服务器等)

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

    11 回复  |  直到 14 年前
        1
  •  3
  •   Marcus King    17 年前

    没有适当的权利,它真的变得更乏味,也不太理想。

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

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

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

        2
  •  2
  •   Godeke    17 年前

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

    如果你的数据库很大,我建议你找一个拥有王国钥匙的人。执行无序备份可能会破坏从主备份还原数据库的能力(例如,如果他们在一周内执行分区操作),方法是在记录只在 你的 备份,所以如果你不确定安全性的原因,不要试图绕过它。

        3
  •  2
  •   Richard Harrison    17 年前

    假设您可以从同一台机器连接到两个数据库(这几乎总是可以的——我通过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;
    

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

        4
  •  1
  •   Ady    17 年前

    我会联系有权备份数据库的人。权限是 通常 这是有原因的。

        5
  •  1
  •   philsquared    17 年前

    导入/导出向导因这类事情而臭名昭著,实际上它有一个bug,使其在计算依赖项时更不有用(抱歉,没有详细信息可供参考)。

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

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

        6
  •  1
  •   Khayyam    17 年前

    如果您在生产服务器上没有备份权限,我想这是因为您使用的是来自Web宿主的共享SQL服务器。在这种情况下,请检查您的WebHoster是否提供了名为 myLittleBackup . 它允许在几次单击后从一台服务器安装数据库到另一台服务器…

        7
  •  0
  •   Robert    17 年前

    我可能会考虑得到一个备份,因为不管你是否运行它,都会有一个备份(至少理论上,一个prod-db正在被备份:)

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

    如果您恢复到一个新的数据库,您也可以手动拉表和数据,如果您想要的话,因为您创建了数据库,您给自己权利,这一切都可以。还有很多其他的方法,都很乏味。

        8
  •  0
  •   Santosh marotha    17 年前

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

        9
  •  0
  •   daharon    17 年前

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

    您将使用这个小实用程序生成一个T-SQL脚本,描述您的生产数据库(包括其所有数据)。然后连接到您的dev服务器并运行生成的脚本。

        10
  •  0
  •   BornToCode    14 年前

    如果您必须避免备份/恢复,我建议您这样做(假设您不想维护旧的模式名,只维护结构),-

    下载 opendbdiff . 在源和(空)目标之间选择“比较”。选择同步。脚本选项卡并只复制创建表行(不包括dbo.sysdiagrams表等)粘贴到SQL Management Studio新查询中,删除表名之前出现的所有架构名称。

    现在您有了完整的结构,包括主键、标识等。下一步-像以前一样使用SQL Server导入和导出数据(确保选择了“编辑映射”和“目标架构”作为dbo等)。还要确保勾选Drop并重新创建目标表。

        11
  •  -1
  •   ScottStonehouse    17 年前

    在开发人员计算机上,将链接服务器设置到生产计算机。然后只是

    插入dev.db.dbo.table(fieldlist)

    从prod.db.dbo.table中选择(fieldlist)