淺析多DM3數(shù)據(jù)庫(kù)體系及其互聯(lián)機(jī)制的策略
(作者未知) 2011/6/21
(接上頁(yè))中的服務(wù)器名,需復(fù)制的表名;分別登錄到兩個(gè)系統(tǒng)的服務(wù)器上;向存有待復(fù)制表的服務(wù)器發(fā)預(yù)復(fù)制消息;等待服務(wù)器消息;若失敗,發(fā)一條失敗的消息給服務(wù)器和用戶或應(yīng)用程序;若成功,從消息中取出待復(fù)制表的有關(guān)信息,根據(jù)這些信息,發(fā)一條建表消息給另一個(gè)系統(tǒng)的服務(wù)器;等待服務(wù)器消息;若失敗,發(fā)一條失敗的消息給服務(wù)器和用戶或應(yīng)用程序;若成功,調(diào)數(shù)據(jù)轉(zhuǎn)移程序,進(jìn)行數(shù)據(jù)復(fù)制;將有關(guān)信息寫入組間字典,退出。
服務(wù)器:當(dāng)服務(wù)器收到預(yù)復(fù)制消息后,將基表控制塊TV_CTRL_BLOCK中的IsReplication賦為true。同時(shí),取出待復(fù)制表的有關(guān)信息,組成應(yīng)答消息發(fā)給協(xié)調(diào)器。
當(dāng)服務(wù)器收到失敗的消息后,將基表控制塊TV_CTRL_BLOCK中的IsReplication賦為false。
2、維護(hù)算法。
協(xié)調(diào)器:從組間字典讀出相關(guān)信息,根據(jù)這些信息,登錄到相應(yīng)系統(tǒng)上;等待消息;從某系統(tǒng)的服務(wù)器上收到一條修改消息后,通過(guò)查找組間字典,確定該消息的目的地,然后將它轉(zhuǎn)發(fā)過(guò)去;若失敗,定時(shí)重發(fā)。
服務(wù)器:1)等待消息;2)當(dāng)收到某客戶或應(yīng)用程序的消息后,檢查它是否是修改數(shù)據(jù)的操作(如delete,update或insert等);若是,檢查基表控制塊TV_CTRL_BLOCK中的IsReplication是否為true;若是,向協(xié)調(diào)器發(fā)修改消息;繼續(xù)執(zhí)行服務(wù)器程序的其它部分。
3、恢復(fù)算法。
若協(xié)調(diào)器所聯(lián)接的系統(tǒng)中有一個(gè)跨掉了,則對(duì)副本的修改無(wú)法及時(shí)地反映到跨掉的系統(tǒng)中來(lái)。這時(shí),需要恢復(fù)算法來(lái)進(jìn)行處理。
協(xié)調(diào)器:當(dāng)協(xié)調(diào)器發(fā)現(xiàn)有一個(gè)系統(tǒng)已經(jīng)崩潰后,采取以下步驟。
將與該系統(tǒng)相關(guān)的變量open賦值為false;打開記時(shí)器;等待消息;若收到的消息是其它系統(tǒng)發(fā)出的修改崩潰了的系統(tǒng)上的副本的命令,則依次將這些消息存儲(chǔ)起來(lái);若收到的消息是記時(shí)器發(fā)出的時(shí)間到的消息,則向崩潰的系統(tǒng)發(fā)登錄命令;若登錄成功,將open的值改為true;將存儲(chǔ)的消息依次發(fā)送過(guò)去;若登錄失敗退出。
我們?cè)谌齻(gè)DM3數(shù)據(jù)庫(kù)系統(tǒng)上,用兩個(gè)協(xié)調(diào)器進(jìn)行聯(lián)接。結(jié)果,運(yùn)行情況良好,各副本最終都能保證一致,且各副本間存在差異的時(shí)間間隔很短。另外,在出現(xiàn)異常的情況下,協(xié)調(diào)器也能正常工作。
|