OGG技术原理
OGG架构
在一个典型的OGG环境中,会有两个数据库存在,同时也会有两个GG实例运行,主要包括四个核心对象:源数据库、目标数据库、源GG、目标GG。
数据复制运行流程大概如下:
源数据库在运行过程中,LGWR进程会源源不断地把日志记录到联机日志中(online log)。源GG的工作起点或者整个GG数据库流的起点也就是从源数据库的联机日志开始。
在源GG端:
1) Extract进程从联机日志挖掘数据,记录到本地的Source Trail文件中。
2) Data Pump进程从Source Trail文件把数据出来,然后通过网络,丢给目标GG上的Collector进程。
在目标端:
Collector进程从接收数据到一个本地文件(Remote Trail)中。
2)另一个Replicate进程从这些文件中挖取数据,然后在目标数据库上更新数据。
注:可以把源GG端步骤1,2合并成一个,直接把数据挖掘出来发送给目标端。
Capture(Local Extract)Process
捕获进程就是源GG把源数据库中变化(插入、更新、删除)数据抓出来的过程。通常指Local Extract进程,抽取进度还包括Data Pump Extract ,Inital-Load Extact和Discard File。
Inital-Load:主要用于目标数据库的初始化,这个过程类似Oracle EXP/IMP,数据泵。
Local Extract进程特点
可以直接把挖掘的数据发给目标GG或者缓存本地Source Trail
只会记录已经提交的变化,而把其他的活动(如回滚)过滤掉。
可以捕获DML,也可以捕获DDL
支持多进程或者单进程处理全部表或多个表
支持Schema级别、表级别、列级别不同粒度的抓取
Source Trail
Source Trail作为一个中间文件,保存抓取进程捕获的数据,以大块方式进行存储,等待下一个环节(Data Pump Extract)处理。Trail文件是一种GG特有的文件,具有自己的元数据。在每个文件或者每条记录上,都一个“头”记录。为了跟踪事物和保证数据一致性,采用CSN(Commit Sequece Number)这个概念,把CSN写到检查点文件(checpoint)和Trail文件中。