我们正在使用SSIS包从实际站点复制数据。 由于在我们处于复制过程中偶尔会完成交易,我们想知道SSIS是如何处理的。
具体来说,假设一个事务在SSIS复制数据的同时写入两个表。假设在复制第一个表之后事务完成。当SSIS包复制第一个表时,将不包括来自事务的数据。然后,当复制第二个表时,如果SSIS没有做任何事情来处理这种情况,那么将复制数据。然后数据不同步。
SSIS如何处理此问题以保证数据的一致性?
答案 0 :(得分:1)
对于sql server不确定你的数据库,一旦源表被更新/插入,默认情况下将阻止任何读取操作,因此在事务完成之前不会发生复制。另一方面,一旦复制开始,您的事务就无法更新/插入到源表中,因为它正在被读取。如果交易发生在ssis应对之前(ssis将等到交易完成)或交易将被ssis应对阻止,那么SO ssis将获取新行,因此表格将同步。
答案 1 :(得分:0)
SSIS通过MSDTC处理的分布式事务解决此问题。 More info on MSDTC and Distributed Transactions from MS。您可以在DataFlow中指定transactionsupport选项=必需,或在SSIS任务流中指定某个序列容器,这将启动分布式事务。在您的情况下 - 带有MSDTC的SSIS将在源站点启动一个事务,可能是 Serializable 隔离级别,并且提到的复制操作将被阻止,直到事务完成。
这种方法并不完美 - 源必须支持分布式事务和MSDTC,应该满足对网络基础设施的一些要求,此外,MSDTC不是很有效。