分級存儲和交易隊列
DDS在數(shù)據(jù)傳輸部分使用了分級存儲機制,在遇到系統(tǒng)錯誤引起的復制中斷時,例如硬件故障、數(shù)據(jù)庫故障、網(wǎng)絡中斷或延遲,分級存儲機制能完好的保存已經(jīng)合成的交易信息,避免數(shù)據(jù)丟失。這些數(shù)據(jù)以二進制文件格式存儲在文件系統(tǒng)的緩存目錄下,直到系統(tǒng)故障解決。恢復從緩存文件傳輸?shù)闹袛帱c開始。
源端和目的端分級存儲
DDS的分級存儲分為兩級:第一級在復制源端,第二級在復制的目的端。Redo log里邊的交易的信息被整合成緩存文件后,首先存放到源端的一級緩存目錄;然后經(jīng)過網(wǎng)絡通訊進程處理被發(fā)送到目的端系統(tǒng)下的二級緩存目錄保存;最后由裝載進程負責裝載到目的端數(shù)據(jù)庫中。

在網(wǎng)絡傳輸出現(xiàn)中斷或大量延遲的情況下,DDS在源端仍然繼續(xù)讀取并分析數(shù)據(jù)庫日志產(chǎn)生的交易信息,這些信息暫時不能發(fā)送到目標端系統(tǒng),不斷地積累在源端的緩存目錄下,直到通訊恢復。源端緩存保證了故障情況下復制數(shù)據(jù)的完整性。
目的端的緩存目錄將保存交易信息文件直到它們正確的裝載到目的端的數(shù)據(jù)庫內(nèi),如果因為目的數(shù)據(jù)庫的故障或關閉,裝載不能進行,從源端傳送過來的數(shù)據(jù)文件將在目的端緩存目錄下保存。數(shù)據(jù)庫恢復后,緩存文件會嚴格按照交易時間順序進行裝載。
文件的格式和大小
交易信息以文件為單位進行傳輸、緩存和裝載,該文件為DDS獨有的二進制格式,其內(nèi)部的表達方式與Oracle內(nèi)部處理方式相類似,避免了很多復雜的信息轉換,因此具有很高的效率。
緩存文件的總量為源端實際產(chǎn)生redo log日志量的1/3~1/4左右。DDS不設置緩存空間控制機制,用戶可以根據(jù)每天交易產(chǎn)生的Oracle redo log日志量和以上比例計算需要預留的緩存空間。
內(nèi)存管理和大交易處理
DDS啟動后,將在源端和目的端系統(tǒng)上開辟多個內(nèi)存區(qū)供各進程使用,用來駐留參數(shù)、傳遞消息信號、緩存分析交易的中間信息等。內(nèi)存區(qū)的大小由系統(tǒng)參數(shù)指定,目的是防止無限制的使用內(nèi)存引起系統(tǒng)資源緊張或系統(tǒng)崩潰。
在復制源端,如果遇到數(shù)據(jù)庫產(chǎn)生非常大的交易,DDS會連續(xù)分析直到整個交易提交,其間產(chǎn)生的中間信息可能達到GB級。在這種情況下,DDS會自動將這些信息緩存在磁盤上等待處理,磁盤緩存由后臺進程自動處理,容量沒有限制。
交易隊列
DDS嚴格按照Oracle數(shù)據(jù)庫內(nèi)部SCN順序執(zhí)行交易的復制和裝載,保證復制數(shù)據(jù)的絕對一致性。
DDS在跟蹤redo log過程中,每隔一個固定的時間(通常是秒級)讀取一次日志文件,分析出本次讀出數(shù)據(jù)的內(nèi)容,同時記錄下該段數(shù)據(jù)的起始和終止SCN號。下一次讀取redo log時,從上一次獲取的終止SCN位置開始。多個實例的RAC模式下,則以SCN為參考給每個實例執(zhí)行的交易進行排隊,然后按照排隊順序形成緩存文件。緩存文件也嚴格按照交易的順序進行編號、傳遞。所有的交易在目的端裝載的順序與它們在源端產(chǎn)生的順序完全相同,這是保證數(shù)據(jù)完整性和一致性的關鍵。