一種方法是使用replication.
我們創建了舊的生產數據庫,這是用於數據遷移的奴隸之間的複製方案。當我們開始遷移時,我們暫時關閉了複製,並使用從數據庫作爲遷移的數據源;舊的生產系統仍然運作。
遷移腳本完成並且我們的一致性檢查已運行後,我們重新啓用了從舊生產系統到複製從屬系統的複製。複製完成後,我們在生產過程中掛上了「維護維護」標誌,重新運行數據遷移腳本和一致性檢查,將系統指向新數據庫,並取下「維護」標誌。
有停機時間,但它是幾分鐘,而不是數小時。
這取決於您的數據庫模式,以便識別更改/新數據。
如果您的模式不適合查詢新的或已更改的記錄,並且您不想添加新列以跟蹤此情況,最簡單的解決方案是創建單獨的表以跟蹤遷移狀態。
例如:
TABLE: USERS (your normal, replicated table)
----------------------
USER_ID
NAME
ADDRESS
.....
TABLE: USERS_STATUS (keeps track of changes, only exists on the "slave")
-----------------
USER_ID
STATUS
DATE
你可以通過在用戶表中的觸發器插入填充此表,刪除和更新 - 爲每個動作,您可以設置一個獨立的狀態。
這使您可以快速查找自運行第一個遷移腳本後發生更改的所有記錄,並且只遷移這些記錄。
由於您沒有修改生產環境,觸發器僅在「從屬」環境中觸發,因此不應在生產環境中引入任何性能或不穩定性問題。
非常感謝您的回覆。我已經考慮過相同的方法,但問題是 - 這隻適用於添加新行的表。如何知道行是否被刪除或數據集中間的某處發生了變化? – Mathew 2013-02-08 13:34:28
要跟蹤數據集中的更改,我通常在每個數據集中都有版本控制列。在每次更改(UPDATE)時,此值都會遞增。您可以輕鬆比較生產數據庫和遷移數據庫之間的數據。對於已刪除的行,恐怕在停機時間內您必須進行一些比較。基於PKs,應該不會花太長的時間才能找出生產中已刪除的行,並在遷移的DB上刪除它們。 – 2013-02-08 13:59:53