【发布时间】:2022-01-03 22:42:16
【问题描述】:
我必须做什么
我需要从一个复制很多表(超过 500 个)的数据 生产数据库到预生产数据库,以更好地测试我们的 部署前的系统。
很多桌子都很小,但其中一些非常 大,最大的当前有大约 5500 万行,但还在增长 有点快。
同事的建议
一位同事正在测试环境中做类似的事情,并且 开发了一个脚本来做到这一点,它基本上做到了:
TRUNCATE [TableName1] SET IDENTITY_INSERT [TableName1] ON INSERT INTO [TableName1] (Col1, Col2,...) SELECT (Col1, Col2,...) FROM [TableName2] SET IDENTITY_INSERT [TableName1] OFF并为他正在运行测试的大约 30 个表执行此操作。我试过了 从这种方法开始,但是当我使用第一个表进行测试时( 5500 万行一),这太耗时了。
我同事的案例和我的有什么不同
我发现我的同事所做的和我必须做的之间有 2 个不同 做:
- 他使用的最大的桌子远小于我们最大的桌子。
- 他从中复制和复制到的所有表都在同一台服务器上,但我必须将表从一台服务器复制到另一台服务器。
我的尝试
我第一次尝试使用链接服务器,它似乎工作,因为我看到 没有错误,但这需要很长时间,我的老板希望这项任务能够完成 每两周晚上进行一次,所以它是不可行的 这么久。
将 500 多个大表复制到另一个数据库最有效的方法是什么,希望不到两个小时?
【问题讨论】:
-
为什么他在插入之前截断?这样你将复制表的结构而不是数据
-
他在[Table1]上截断,这是我的预生产,插入从[Table2]中获取数据,没有被截断。
-
到此,鉴于复杂性,您可以开始使用 SSIS 构建适当的 ETL 流程
标签: sql-server