如何保證數(shù)據(jù)庫同步中目的端交易提交的原子性 |
發(fā)布時(shí)間: 2012/7/27 17:23:29 |
數(shù)據(jù)庫同步過程中既要保證數(shù)據(jù)庫裝載的效率,又要保證數(shù)據(jù)庫每個(gè)交易的原子性,即保證一個(gè)事務(wù)中多條SQL語句執(zhí)行的成功出于以上目的,我們選擇多表并發(fā)加多斷點(diǎn)方式來進(jìn)行同步,原理是取出需要同步的事務(wù),按照表及SQL語句量進(jìn)行劃分,分給不同的進(jìn)程來執(zhí)行,每個(gè)進(jìn)程有一個(gè)斷點(diǎn),當(dāng)一個(gè)表的某一條SQL語句執(zhí)行出錯(cuò)的時(shí)候,該進(jìn)程會記錄下此斷點(diǎn),該表停止同步,其他表的數(shù)據(jù)同步繼續(xù)進(jìn)行,當(dāng)手工處理完該表出錯(cuò)的SQL語句后,該進(jìn)程根據(jù)標(biāo)志把錯(cuò)誤表需要同步的SQL語句重新執(zhí)行或跳過,這樣同步進(jìn)程會繼續(xù),并且個(gè)別表的錯(cuò)誤不會影響整體的同步 那么原子性如何能夠在同步過程中保持一致呢?借助網(wǎng)格斷點(diǎn)就可以達(dá)到該目的。網(wǎng)格斷點(diǎn)實(shí)際上就是把交易的SCN號和每條SQL語句的表順序進(jìn)行關(guān)聯(lián),記錄該SCN號中的某條SQL語句執(zhí)行情況的流水文件,日志分析進(jìn)程按照表名創(chuàng)建多個(gè)網(wǎng)格文件,內(nèi)容是SCN號以及執(zhí)行語句,按照SCN號來排序,這樣每個(gè)同步進(jìn)程就可以讀取屬于自己的相關(guān)表文件,并按照SCN號的順序進(jìn)行并發(fā)裝載,這樣保證同一時(shí)點(diǎn)的數(shù)據(jù)是按照SCN號進(jìn)行裝載的,保證了在備庫上查詢統(tǒng)計(jì)的一致性。 當(dāng)每個(gè)進(jìn)程執(zhí)行成功后就會修改自己對應(yīng)的斷點(diǎn)文件,所以當(dāng)系統(tǒng)出現(xiàn)異常的時(shí)候我們就會檢查所有的斷點(diǎn)文件,這樣數(shù)據(jù)庫就可以根據(jù)斷點(diǎn)情況繼續(xù)同步,對于不同的DDL和DML語句進(jìn)行相應(yīng)的錯(cuò)誤處理。 本文出自:億恩科技【www.allwellnessguide.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |