我有一个Transaction
数据库,每天插入10,000多个条目。
我的客户要求我们允许他从自己的服务器下载报告,为此我们将Transaction
数据库的同一副本发送到他的服务器。
但现在的问题是我们如何在特定时间将数据移动到他的服务器上进行最新的数据输入?
答案 0 :(得分:0)
SQL Server中至少有几个选项。
如果您可以连接到客户的数据库,则可以选择使用SSIS更改数据捕获。 CDC收集可查询商店中的所有更改,SSIS随后会读取并推送到您的目标。在SSIS中编写ETL过程后,您可以根据需要选择移动的内容。 CDC的一个缺点是它只在企业版中出现。请参阅https://technet.microsoft.com/en-us/library/bb895315(v=sql.105).aspx
上的详细说明事务复制是另一种选择,可在企业版和标准版中使用。这种情况一直存在,许多组织都使用它来完成您所描述的内容 - 逐步将数据移动到另一个数据库。不像CDC那样灵活,但您仍然可以将过滤器应用于移动的行/列。不需要的企业版对很多客户都有帮助。关于此技术的大量细节https://msdn.microsoft.com/en-us/library/ms151198(v=sql.105).aspx,但强烈建议您查看Kendra Little关于trans repl的最优秀文章,并将其与CDC进行比较http://www.brentozar.com/archive/2013/09/transactional-replication-change-tracking-data-capture/
如果您无法直接连接到客户数据库,带有SSIS的CDC仍然有效,但输出目标将是一些平面文件,然后传输给客户并使用其他SSIS包或其他一些批量加载作业加载(TSQL,BCP等......)。请注意平面文件的移动方式,因为任何人都可以看到它的内容。
我避免使用任何手动方法,例如创建触发器或运行一些(通常是昂贵的)查询来查找更改的行。除了维护工作之外,您很可能遇到严重的性能问题。