2015-02-24 83 views
1

我一直無法找到有關如何使用SSIS在SQL Server 2014中使用更改數據捕獲(CDC)重新加載增量數據的文檔/說明。如何使用SQL Server CDC重新加載增量數據?

基本上,在給定的一天,如果你的SSIS增量處理失敗,你需要重新開始。您如何再次播放最近更改的記錄?

回答

0

所以我弄清楚瞭如何在SSIS中做到這一點。

我每次在我的數據倉庫中的一個表中運行我的SSIS包時,記錄最小和最大LSN編號。

如果我想從CDC源重新加載一組數據到分段,在SSIS包中,我需要使用CDC控制任務並將其設置爲「Mark CDC Start」,並在文本框中標記爲「SQL Server LSN開始......「我把我想用的LSN值作爲起點。

我還沒有想出如何設置終點,但我可以進入我的登臺表並刪除LSN值>然後是我的終端節點的任何數據。

您只能對尚未「清理」的CDC更改執行此操作 - 僅適用於最近3天內更改的數據。

作爲一個觀點,我還將lsn_time_mapping表引入我的數據倉庫,因爲我發現這些信息歷史上很有用,並且它在源數據庫中每4天得到一次「清理」。

2

我想這取決於你對數據做什麼,呃? :)但在一般情況下,您可以將其分解爲三種情況:

  1. 插入 - 檢查行是否存在。如果是,請跳過它。如果沒有,插入它。
  2. 刪除 - 假設您不重用主鍵,只需再次運行刪除。它會找到一行刪除或不會,但最終結果是具有該PK的行在刪除後不會存在。
  3. 更新 - 類似刪除方案。如果你重新處理一個更新,這並不是什麼大問題(假設你的CDC過程是唯一能夠在目的地保持最新狀態並且沒有覆蓋某人/其他更改的危險)。
+0

但是ETL的第一步 - 從源頭獲取已更改的數據。你如何「重置」它,以便再次分析最近的變化。一旦進入暫存數據庫,很容易處理。但是CDC - 黑匣子的一部分正在困擾着我。如果需要,我想重新安排相同的數據(手動很好)。 – tember 2015-02-24 18:28:01

+1

CDC數據的任何拉動都取決於您提供的first_lsn和last_lsn。據推測,如果出現故障,您只需再次提供相同的端點。 – 2015-02-24 18:30:25

+0

你會怎麼做?我想這有兩個問題:你如何讀取lsn值?你如何告訴SSIS使用自定義的lsn範圍? – tember 2015-02-24 18:36:09

2

假設您使用新的CDC SSIS 2012組件,特別是軟件包開頭和結尾的CDC控制任務。然後,如果軟件包因爲任何原因在軟件包末尾運行CDC控制任務之前失敗,那麼這些LSN(日誌序列號)將不會被標記爲已處理,因此您可以在解決問題之後從頂部重新啓動SSIS軟件包,並它只會重新處理這些記錄。你必須使用CDC控制任務來完成這項工作,或者自己跟蹤LSN(在SSIS 2012之前,這是唯一的方法)。

馬特·馬森(高級項目經理對MSFT SQL Server團隊)有一個很好的職位有一步一步的演練:CDC in SSIS for SQL Server 2012

而且,看到布拉德利沙赫特的帖子:Understanding the CDC state Value

+0

我確實在SSIS 2012中設置了CDC控制任務,而且我大部分都在工作。我想我問的是你如何「取消」這些記錄? – tember 2015-02-24 18:40:56

+1

另外,有關CDC控制任務使用的CDC狀態的細目以及如何修改CDC以重新處理CDC記錄,請參閱Bradley Schacht的文章:http://www.bradleyschacht.com/understanding-the-cdc-state-值/ – 2015-02-24 18:44:03

相關問題