Sql-Server

將數據複製到有限制的總部

  • May 23, 2017

這是我的情況。我們有將交易發送到商店伺服器的收銀機。收到每個事務後,儲存伺服器都會更新表……同時其他管理事務會修改表。在晚上結束時,我們將所有內容髮送到總部,他們擁有所有商店的所有資訊。通常商店和收銀機只使用 SQL Express(我們支持 2008 及更高版本),而對於中央總部數據庫,它們通常使用 SQL Server 標準版及更高版本(同樣我們支持 2008 及更高版本)。

我正在嘗試修改該流程,因為現在我們的流程請求來自儲存已修改日期的所有數據以及數百個表中的 25 個。問題是,如果前一天有 1 條記錄發生更改,我們會發送當天所有 25 個表的所有數據。

這 25 個表格是在商店實時更新的每日摘要,並且通常在午夜時分每晚一次將更改發送到總部。

我的第一直覺是在 25 個表中的每一個上創建觸發器,直到我意識到事務的每個項目都會觸​​發 25 個不同的觸發器。這很快變得沒有吸引力。

我的下一個嘗試是將每筆交易發送一次到總部並在總部重播所有內容,但這對總部來說負擔過重,因為他們可能會同時從 200 家商店接收數據。

理想情況下,我正在尋找一種僅從需要傳輸的 26 個表中傳輸數據的方法。也許通過讓總部將每個表的某種類型的校驗和與商店的相同表的校驗和進行比較(SQL 校驗和將不起作用,因為總部總是有更多的數據)。

我正在徵求不同的意見,希望能找到我可以探索的其他想法。

非常感謝。謝謝

您可能可以使用實際的SQL 複製來做一些事情,但是如果您已經有了一個現有的常式,只需修改它以專門過濾每個表中的新位欄位:uploaded或者您想要呼叫的任何內容。

因此,當寄存器將更改寫入表時,請確保清除該位。或者,如果您無法更改常式的那部分,請在表上放置一個 ON UPDATE 觸發器,以便在更新行時清除它。

然後確保“上傳到公司”常式在複製數據時設置了所有這些位。

或者,可能更有用的是通過您的註冊上傳更新“上次更改”欄位,以及“上次上傳到公司”欄位。這樣你就可以比較兩者了。

我會採取最低級別的交易並將它們轉移到一個中心位置。載入然後批處理。最好沒有觸發器。

Id 有 create_dt 和 change_dt 欄位,id 用於標識需要重新發送的增量。Id 然後定期協調源和目標。

是否覆蓋更改的記錄或附加增量將取決於您擷取的內容、您的帳戶實踐和所需的詳細程度。即現金與應計以及您是否需要重建它在某個時間點的外觀。(記錄的平穩性)

我對我的數據倉庫做了類似的事情。我們使用 ssis 發送低級數據,但在我們的 etl 中也有一個步驟,它在兩個系統上執行求和/計數並儲存結果。如果它變化,我們知道重新載入。

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