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

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