2016-08-02 35 views
0

我們使用SSIS包來複制實時網站中的數據。 由於在我們處於複製過程中,偶爾會有事務完成,所以我們想知道SSIS如何處理它。SSIS包與數據一致性

具體來說,假設一個事務正在寫入兩個表,同時SSIS正在複製數據。假設事務在第一個表被複制後結束。當SSIS包複製第一個表時,交易中的數據將不會包含在內。然後,當複製第二個表時,如果SSIS無法處理這種情況,數據將被複制。數據不同步。

SSIS如何處理這個以保證數據的一致性?

回答

1

不確定你的數據庫,對於sql服務器,一旦源表被更新/插入,任何讀取操作都將被默認阻止,所以直到你的事務完成纔會發生拷貝。另一方面,一旦複製開始,您的事務將無法更新/插入到源表中,因爲它正在被讀取。如果事務在ssis應對之前發生(ssis將等待事務結束)或事務將被ssis應對阻止,則ssis將選擇新行,以便表同步。

+0

如果兩個操作都是原子的,則這是正確的。有理由相信在SSIS包中複製多個表是一個原子操作嗎? – BWhite

+0

我懷疑這是ssis發佈的兩個單獨的sql語句來檢索數據。我會建議在sql中(在一個語句中,或者在一個事務中)這樣做,數據庫對此有最好的控制。 – thotwielder

0

SSIS解決了MSDTC處理的分佈式事務。 More info on MSDTC and Distributed Transactions from MS。您可以指定DataFlow中的transactionsupport option = required或SSIS任務流中的某個序列容器,這將啓動分佈式事務。在你的情況下 - 具有MSDTC的SSIS將在源站點開始一個事務,推測是與隔離級別相關的10,並且所提及的複製操作將被阻塞,直到事務完成。
這種方法並不完美 - 源代碼必須支持分佈式事務和MSDTC,應該滿足網絡基礎設施的一些要求,另外,MSDTC的性能不是很好。