1、单项复制结构
源数据系统--(Capture)-->队列文件---(Pump)-->网络(Internet,Intranet)-->队列文件--(Delivery)-->目标数据系统
这种结构用于将数据从单个系统复制到一个或多目标系统。
三个进程:
extract (capture) 进程,
data pump 进程,
replicate (delivery)进程。
队列文件为二进制文件。
2、双向复制(双活)结构
这种结构可以用于系统的高可用,类似ADG技术,但是OGG和ADG技术相似,用于的场景各不相同。
3、实时数据仓库结构
应用企业所有数据进行整合在一个库中,类似于Hadoop,数据可进一步应用于大数据技术。
4、实时进行数据分发
可以从一个数据源端将数据或者部分数据分发到不同地理位置的目标数据源。
5、通过信息进行数据分发
通过富文本进行数据传输,如使用Microsoft Excel,将数据分发到不同数据库类型。
6、理解SCN(System Change Numbers)
在Oracle GoldenGate 中将SCN作为复制进程对Oracle数据库的事务进行复制的唯一标识。在Microsoft SQL Server和MySQL同样拥有相似的Number。
在启动捕获进程以后,记录SCN号。可以通过v$database视图或者dbms_flashback包进行获取。
获取SCN的SQL:
SQL> select current_scn from v$database;
SQL> select dbms_flashback.get_system_change_number from dual;
注:在RAC环境中使用gv$database视图获取SCN。
7、OGG进程
(1)管理进程
管理进程是OGG所有进程的主进程,只要有复制进程存在,在相关的每个系统中必须始终运行,主要功能如下:
a、启动和重启OGG进程;
b、启动动态进程;
c、操作进程的端口号;
d、队列文件的管理;
e、事件,错误和阀值报告
(2)收集进程
当OGG在线同步进行时,运行在目标数据端(交付端)的后台进程。主要任务包括:
a、对来自源端抽取进程的管理器进行端口的扫描和限制。
b、接收来自源端抽取事务,并将数据写入队列文件。
OGG为每一个抽取进程分配一个收集进程。抽取进程结束时,收集进程也随之结束。
(3)捕获进程
在OGG中抽取进程用于在数据发生变化时,从在线事务处理日志中(如:oracle的redolog)获取数据的变化,实现数据同步。
一次抽取可以使用两种方法进行配置:
a、initial load:用于数据的初始化,一般是静态数据的导入,经常使用specialrun 参数。
b、数据变更同步:当数据发生变化时从源端同步到目标端。
经典型捕获进程有内存的需求,每个捕获进程需要25M~55M的内存。
整合型捕获进程在11.2.0.2中引入并仅仅支持Oracle11.2.0.3及更高版本的数据库。在Oracle数据库中运行整合型捕获与日志挖掘进程进行互动。
在Oracle database内部有一些进程与整合型捕获进一同运行,成为日志挖掘进程配置的一部分。
日志挖掘服务器有以下几部分组成:
读:读取并将redolog进行分解。
准备:扫描redolog,预过滤事务 为并行使用做准备。
重组:使用SCN通过准备进程和服务对redo记录进行整合。
获取:按照redo记录的格式,将逻辑上改变记录传输到本地队列文件。
注意:根据实际设置SGA中streams_pool_size 参数以获取更好的性能。
(4)数据泵进程
其实数据泵组是一个二次抽取进程组,用于帮助数据通过网络传输。尽管数据泵是一个类似抽取组的捕获进程,但是并不冲突。数据泵进程的主要功能是将队列文件通过网络传输到远程的目标系统上。
为什么要使用数据泵进程?这要可以在网络出现问题的时候保护数据,避免数据出现不一致的情况产生。
数据泵进程不像捕获进程,数据泵进程无须过多的配置,经典模式下仅仅需要配置可用。
(5)交付进程(复制进程)
交付进程在OGG环境中其实是一个数据应用进程。交付进程的任务是:读取队列文件,按照时间顺序获取事务(按照SCN清单获取事务),并应用事务。
交付进程有三种模式:
经典交付:经典交付是OGG默认配置的交付进程,由操作系统层进行管理。 内存需求:25M~55M;
协同交付:协同交付与经典交付很类似,区别在于:协同交付进程将会产生由主交付进程协调的从属进程。并行的协同交付进程可以分解一个交付进程,使得长事务像小事务一般。
集成交付:
在OGG12C中引入集成交付进程。集成交付是基于主键,外键或者唯一键约束,依赖于事务和应用事务。
集成交付集成包括四个部分:Receiver,Prepare,Coordinator,Apply(n),如下图。
(6)队列文件
队列文件是OGG特有的二进制文件,在OGG结构中承载事务。当数据发生改变时,支持持续不断地进行数据抽取和数据复制。他可以存储在本地文件中,也可以存储在远程的目标系统文件中。