如何保證數據庫同步中目的端交易提交的原子性 |
發布時間: 2012/7/27 17:23:29 |
數據庫同步過程中既要保證數據庫裝載的效率,又要保證數據庫每個交易的原子性,即保證一個事務中多條SQL語句執行的成功出于以上目的,我們選擇多表并發加多斷點方式來進行同步,原理是取出需要同步的事務,按照表及SQL語句量進行劃分,分給不同的進程來執行,每個進程有一個斷點,當一個表的某一條SQL語句執行出錯的時候,該進程會記錄下此斷點,該表停止同步,其他表的數據同步繼續進行,當手工處理完該表出錯的SQL語句后,該進程根據標志把錯誤表需要同步的SQL語句重新執行或跳過,這樣同步進程會繼續,并且個別表的錯誤不會影響整體的同步 那么原子性如何能夠在同步過程中保持一致呢?借助網格斷點就可以達到該目的。網格斷點實際上就是把交易的SCN號和每條SQL語句的表順序進行關聯,記錄該SCN號中的某條SQL語句執行情況的流水文件,日志分析進程按照表名創建多個網格文件,內容是SCN號以及執行語句,按照SCN號來排序,這樣每個同步進程就可以讀取屬于自己的相關表文件,并按照SCN號的順序進行并發裝載,這樣保證同一時點的數據是按照SCN號進行裝載的,保證了在備庫上查詢統計的一致性。 當每個進程執行成功后就會修改自己對應的斷點文件,所以當系統出現異常的時候我們就會檢查所有的斷點文件,這樣數據庫就可以根據斷點情況繼續同步,對于不同的DDL和DML語句進行相應的錯誤處理。 本文出自:億恩科技【www.laynepeng.cn】 |