DDS系統結構
模塊化的系統結構
DDS采用模塊化設計,每個模塊完成單獨的功能,多個模塊互相配合工作。這樣的設計保證DDS有很好的可擴展性,功能可以做到并發處理,單獨的模塊維護和升級也不會影響整個軟件。模塊之間有并發和自我監控機制,即使有部分進程實效,也不會導致工作停止。
物理結構上,DDS包括內存進程和磁盤存儲兩個部分。內存進程包括后臺進程和共享內存區;磁盤存儲部分包括日志文件和緩存文件。
后臺進程
DDS有多組后臺進程,每組包括一個或多個相同的進程,進程間通過共享內存區和磁盤緩存交換數據和消息,互相配合工作,啟動多個同名的進程表示進行并發處理。源端和目的端在進程的功能和名稱上有較大區別,源端主要做日志的分析和傳輸,目的端則負責交易的接收和裝載。
源端主要進程:
Ø DDS_PMONS負責建立共享內存、信號燈、消息隊列,監控系統其它進程的狀態,重起異常退出進程并報告狀態;
Ø DDS_PMSGS負責收集其它所有進程報告的各種錯誤信息,將錯誤信息存放到日志文件 msg.log中;
Ø DDS_PRECVS負責接收界面發送來的管理命令并執行;
Ø DDS_PTRACK負責跟蹤數據庫redo log動態增量信息;
Ø DDS_PMERGE負責將DDS_PTRACK 輸出的增量信息進行過濾、合成;
Ø DDS_PCOMM負責將DDS_PMERGE 輸出的信息發送到目標端;
Ø DDS_PCLEAN負責將 DDS_PMERGE和DDS_PCOMM沒有成功處理的數據包提交進行處理;

圖1:DDS源端體系結構
PTRACK跟蹤到redo log增量信息,將其寫入共享內存,并通知 PMERGE 進行處理,PTRACK同時將此數據包寫入緩存目錄$DDS_DATA/track中,以便后續進程沒有成功處理或系統其它異常情況時,這些數據能夠恢復并重新進行處理。
PMERGE收到PTRACK和PCLEAN的通知,將收到的數據包進行各種必要的處理,生成處理后的數據包,將新數據包寫入共享內存,并通知PCOMM 進行處理。
PCOMM 收到PMERGE和PCLEAN的通知,將收到的數據包發送到目標端系統,如果發送不成功(目標系統未啟動、網絡故障),將數據包寫入緩存目錄 $DDS_DATA/comm中。
PCLEAN清道夫進程,負責將緩存中未處理的數據包提出并請求PMERGE、 PCOMM重新進行處理。
目的端主要進程:
Ø DDS_PMONT負責建立共享內存、信號燈、消息隊列,監控系統其它進程的狀態,重起異常退出進程并報告狀態;
Ø DDS_PMSGT負責收集其它所有進程報告的各種錯誤信息,將錯誤信息存放到日志文件msg.log中;
Ø DDS_PRECVT負責接收界面發送來的管理命令并執行,接收增量數據包,裝載歷史數據;
Ø DDS_PSCHED負責調度待裝載事務并通知裝載進程開始工作;
Ø DDS_PPUT負責裝載增量信息到數據庫中;
Ø DDS_PRID統一負責所有并行裝載進程的rowid存取;
PRECVT 接收由“源系統”發送的增量數據包后,通知PSCHED調度進程進行處理;接收界面發送過來的各種命令,處理后發送結果返回到界面;接收歷史數據,并啟動數據庫導入工具將歷史數據導入到數據庫中。
PSCHED在收到 PRECVT的通知后,查詢是否有數據包等待裝載,如果有,則將數據包裝載到共享內存中,將數據包分成事務列表,啟動不同的PPUT裝載進程進行操作。
PPUT在收到PSCHED的裝載通知后,在共享內存事務控制表中選擇一個合適的事務,將此事務在目標中數據庫重演再現。

PRECVT 接收由“源系統”發送的增量數據包后,通知PSCHED調度進程進行處理;接收界面發送過來的各種命令,處理后發送結果返回到界面;接收歷史數據,并啟動數據庫導入工具將歷史數據導入到數據庫中。
PSCHED在收到 PRECVT的通知后,查詢是否有數據包等待裝載,如果有,則將數據包裝載到共享內存中,將數據包分成事務列表,啟動不同的PPUT裝載進程進行操作。
PPUT在收到PSCHED的裝載通知后,在共享內存事務控制表中選擇一個合適的事務,將此事務在目標中數據庫重演再現。