Sql-Server

將 DB2 表複製到 SQL Server 2008

  • September 24, 2012

我需要將數據從 DB2 數據庫複製到 SQL Server 數據庫中(大約有 80 個表)。我可以創建一個 SSIS 包,將數據從一個平面複製到另一個非常容易,但是記錄的數量是幾百萬,所以這樣做需要一段時間,但對於初始設置來說它很好。但是,我需要進行“幾乎”實時更新,所以這種方法不可行。什麼是最好的方法,以及如何從 DB2 添加更改和刪除複製到 SQL Server?

您可以在 DB2 中的複製表上創建一個隱藏的時間戳列。當您執行複製作業時,您可以僅提取自上次複製以來已更改的數據。這將降低發送的數據量。

例如,每分鐘執行一次 SSIS 包,只提取最後幾分鐘的數據。

或者,您可以使用自動遞增int並在複製實例上保留一個小表來記錄最後int複製的值,而不是時間戳欄位。複製過程將抓取任何新記錄,並更新小表的值以反映最後複製的值。

如果您在 DB2 端有足夠的日誌記錄,那麼您應該能夠輕鬆地辨識自上次近實時更新以來已創建、修改或刪除的記錄。但如果這麼簡單,您就不需要 Stack Exchange。

如果上述日誌記錄失敗,您最快的選擇可能是MERGE命令。在整個連結中,這可能會很慢;如果是這樣,請考慮將 DB2 數據庫批量複製到 SQL 數據庫上的臨時表中,然後MERGE在 SQL 伺服器上本地執行該表和永久表之間的關係。填充暫存表仍需要一段時間,但活動表的更新將盡可能快,因為它可能在沒有模式更改的情況下獲得。

如果有太多數據需要每五分鐘複製一次(或任何您的近乎實時的計劃要求),您可能別無選擇,只能開始在 DB2 端記錄事件,可能帶有觸發器。

另一種方法是在每次更新時檢查一段記錄。在 5:20,您將所有以零 ( ) 結尾的記錄從 DB2 複製到 SQL ID % 10 = 0,並將它們合併到主表中。在 5:25,您複製並合併 ID 以 1 結尾的所有記錄。這顯然假設您有某種相當均勻分佈的合成密鑰。您的數據不會一直都是最新的,但大部分時間都是最新的。為了獲得最佳貨幣,在您的時間視窗內使切片盡可能厚;除以十隻是一個例子。如果需要,您可以通過對錶進行分區來擴展此方法。

引用自:https://dba.stackexchange.com/questions/20329