将一个大型SQL Server表从一个数据库移动到另一个数据库的最佳方法是什么?

5
我有一个在测试级别数据库中拥有500万行及以上400列的表。
我想在生产数据库中暂时保存该表的副本。
我知道可以使用任务并生成脚本,可以选择脚本架构项和数据。这似乎需要很长时间。
我可以使用任务并生成脚本选项仅复制表定义,并通过其他方法处理数据复制。
我能否使用SQL Server跨多个服务器插入...选择..?
我可以将测试数据库和服务器添加为链接服务器。
我可以使用SSIS。
我询问普遍论坛以获得一个最佳(或更好)的建议,即比生成脚本选项更快的方法。
我正在尝试生成脚本选项,但这已经运行了整个下午。
我希望有一种方法可以在一两个小时内运行。

2
我会使用链接服务器,并使用INSERT INTO ... SELECT ...进行一些分区,例如每次100K行。 - Michał Turczyn
1
生产和测试数据库在同一台机器上还是分开的? - Squirrel
1
你可能会发现这个链接有用:https://dev59.com/6nRB5IYBdhLWcg3wQFLu#4198009 - 使用 bcp 将表备份到文件中,然后再导入该文件。这样,如果您可以物理访问数据,就不会有网络瓶颈的问题。 - Arie
生产和测试数据库位于不同的机器上。 - Allan F
3个回答

4
如果您使用的是 SQL Server,我倾向于使用导入导出向导作为快速简便的方法。如果存在问题,它会优雅地退回。
1)在目标数据库中创建表格。
2)右键单击目标数据库,然后选择“任务”->“导入数据”。
3)提示连接源服务器后,继续按照提示操作即可。
希望这有所帮助。

3

一个选项是右键单击数据库,然后选择任务 -> 导出数据。

但是,如果您了解SSIS,则认为这是最简单的方法,因为移动数据正是它的目的。您可以在那里增加批量大小以更好地适应数据量。

至于需要多长时间,这取决于您的硬件。最大的瓶颈很可能是您的网络和磁盘。


谢谢...我的一个同事也提到了这个方法,即创建表并使用任务->导入...(我猜这与导出...有关系,取决于是拉还是推...)。这至少可以显示进度指示...即每秒大约处理500条记录或更多...因此估计需要10,000秒...相当于166分钟...约为2.7小时...比其他脚本方法好! - Allan F
1
@AllanFYup,实际上就是完全相同的过程。我通常会坚持从源系统开始,但我猜那只是个人偏好。 - SchmitzIT
1
@AllanF,我希望5M行的数据只需要几分钟而不是几个小时。你是在源服务器还是目标服务器上运行它?否则,数据将通过客户端机器流动。确保目标表上没有非聚集索引 - 如果需要,之后再创建这些索引。 - Dan Guzman
非常感谢SchmitzIT和Dan Guzman的评论和帮助!我在自己的电脑上运行了它,即我进行了导入。我有一个PK聚集索引,但没有非聚集索引。它成功地工作了。我注意到生成的执行报告不包含任何日期时间戳信息。也许微软在2012年以后的更近版本中改进了这个执行报告,加入了日期时间戳? - Allan F

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接