我有一个包含大约500万条记录的表,我只需要将最后100万条记录转移到生产环境中(因为其他400万条记录已经存在)。这样做的最好方法是什么,这样我就不必每次都重新复制整个表?
发布于 2012-11-15 06:51:10
因为它们位于不同的服务器上,这会改变一切。简而言之:为了知道dev中没有什么,你需要将DEV中的所有东西都与PROD中的所有东西进行比较,所以没有简单的方法可以避免比较巨大的数据集。
用于在PROD和DEV系统之间进行复制的一些不同策略:
A.备份和恢复整个数据库,然后应用脚本进行清理
B.在PROD数据库中实现记录更改的触发器,然后仅复制发生更改的记录
C.识别一些你知道的没有改变的分区或记录集(例如12个月前),只刷新那些不在该数据集中的分区或记录集。
D.使用SSIS将所有prod复制到DEV服务器上的临时表中。使用与上面非常相似的查询,仅在整个数据库中插入新记录。删除临时表。
E.您也许能够找到一个第三方SSIS组件,它可以有效地完成这项工作。开箱即用,SSIS在比较更新方面效率低下。
你真的知道最后一百万条记录是什么吗?也就是说,表示的是地点、日期还是什么?你能写一个select来识别它们吗?
基于这条评论:
不需要比较,因为我知道ID>X会起作用
假设您已经在DEV服务器上创建了一个名为PRODSERVER的链接服务器,则可以在DEV服务器上运行此命令
INSERT INTO DB.dbo.YOURTABLE (COL1, COL2, COL3...)
SELECT COL1, COL2, COL3...
FROM PRODSERVER.DB.dbo.YOURTABLE
WHERE ID > X有关如何创建SQL Server链接服务器的详细信息,请查阅“SQL Server链接服务器”。
这对于一个人来说是很好的,但是如果你经常这样做,你可能想要做一些更健壮的东西。
例如,您可以创建一个脚本,使用BCP.EXE将数据导出到一个文件,将其复制到DEV,然后再次导入。这更可靠,因为它在一批中完成,而不是需要整个时间的网络连接。
https://stackoverflow.com/questions/13387017
复制相似问题