分级存储和交易队列
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为参考给每个实例执行的交易进行排队,然后按照排队顺序形成缓存文件。缓存文件也严格按照交易的顺序进行编号、传递。所有的交易在目的端装载的顺序与它们在源端产生的顺序完全相同,这是保证数据完整性和一致性的关键。