Oracle GoldenGate 12c是一款数据复制软件,它允许用户在不同的数据库平台之间实现实时数据同步。在12c版本中,Oracle公司引入了协同交付(Coordinated Delivery)这一新功能,旨在解决传统数据复制过程中可能遇到的性能问题,并简化多进程管理。
在介绍协同交付之前,我们先要明白为什么需要这一功能。在OGG12.1.2版本之前,如果目标端数据库发生性能瓶颈,导致复制过程中的延迟增加,通常的做法是将一个复制进程拆分成多个进程。拆分方式主要有两种,一种是将复制进程中涉及的多张表拆分出来,让每张表单独成为一个复制进程。另一种则是针对一张大表,通过拆分操作(如根据主键字段的值范围),创建多个投递进程。
但这样的拆分方法存在一个问题,即拆分成的多个复制或投递进程之间并没有一个有效的协调机制。这导致在执行诸如DDL(数据定义语言)、PK更新或SQLExec这类需要顺序执行的操作时,可能会发生错误。例如,假设在拆分后的多个进程中有DDL操作,如果DDL操作在某个记录插入之前执行,则该记录的插入就会报错。为此,OGG12c引入了协同交付。
协同交付允许在非Oracle数据库上使用,与只能应用于Oracle数据库的集成交付不同。协同交付通过barrier操作确保了复制进程中的操作顺序性。barrier操作包括DDL、使用range参数拆分时进行的PK更新、事件操作(EventActions)和SQLExec。在执行这些barrier操作时,必须等待前序操作完成,所有线程都必须等待barrier线程结束后才能继续执行。
协同交付使用相对简单的参数来指定复制进程如何拆分。例如,针对多张表的拆分,可以指定每个表由不同的线程处理,如THREAD(1)表示第一个线程处理第一张表,THREAD(2)表示第二个线程处理第二张表,以此类推。对于大表的拆分,可以使用THREADRANGE来按范围拆分,如THREADRANGE(1-3,ID)表示根据ID字段的值范围来分配线程。
协同交付具有以下优点:它只需要一个单一的参数文件,便于管理;它自动控制复制投递的顺序,确保各拆分进程之间交易的完整性;再次,协同交付增强了错误恢复的能力。当交付进程出现故障时,使用协同交付可以保证各线程之间的投递进度不会差异过大,从而简化了恢复过程和同步的复杂性。
协同交付是Oracle GoldenGate 12c中的一个重大进步,它不仅提高了数据复制的效率和准确性,而且通过barrier协同机制解决了传统方法中数据一致性问题,极大地提高了系统的可靠性和可维护性。