掌握和使用一个工具的最好方法,就是先掌握其原理,了解其架构,然后才能用起来得心应手,否则用起来,都不知道这一步为什么这样做,不能够快速定位问题,更别提快速解决问题。
OGG架构及原理:
Oracle GoldenGate 的原理,是相当简单的,就是通过抽取源端的redo log或者archive log,然后通过TCP/IP协议,传送到目标端,然后解析并应用到目标库上,从而实现源端到目标端的复制。
其架构图如下,下面会详细解释其中的进程
要想深入了解OGG,其官方文档是个不错的选择
下载地址:
http://www.oracle.com/technetwork/middleware/goldengate/documentation/index.html
官方文档上提供了官方的详细解释,这里就不做翻译了,我用自己的理解来阐述OGG的架构,如果有什么不对的地方,还请指出,共同进步。
进程理解:
我把一个OGG实例看作一个足球队,我的主队皇马。
1)Manager进程---中场节拍器(摩德利奇,克罗斯,龙哥[虽然已不在])
顾名思义,Manager进程就是OGG实例的管理进程,其同时运行在源端和目标端,控制着OGG其他进程的,启动,重启,监控,报告错误及事件,分配空间等。每个OGG实例需要一个Manager进程。Manager进程就像球场上的中场指挥官,把握着全队的节奏,组织着球队的防守和进攻。
2)Extract进程---后防天团(水爷,武僧,卡瓦哈尔,队宠,金毛)
extract进程,运行在源端数据库,负责从源端数据表或者日志中捕获数据。根据时间段的不同,extract的作用不同,初始阶段,extract直接从源端数据表中抽取数据,已完成数据的初始化,使源端数据和目标端数据相同。同步变化阶段,就是extract进程捕获源端数据库的变化(dml,ddl),已传送并应用到目标端。就像后防天团的水爷,武僧,,他们负责处理后场的变化,抢断球,并将球分给边后卫或者中场,让他们来传送到前场完成助攻【有时候水爷也他妈的直接进攻到前场,就像没有配置data dump的情况下,extract进程将捕获的数据直接传送到target端的remote trail文件里】。
checkpoint机制---门神(卡西)
Extract进程总会有异常终止或者服务器异常宕机或者网络中段的时候,当重新启动extract进程后,GG怎么会知道已经同步了哪些数据还有哪些没有同步? 这个时候,就需要配置checkpoint,Extract进程利用其内在的checkpoint机制,周期性的检查并记录其读写的位置,并通常记录到trail文件里,在重启Extract进程后,会读取trail文件,然后继续进行同步,防止了数据的损失。就像圣卡西,是球队的最后保障,在后防天团阻断冥想的时候,圣卡西站出来维护球队的尊严,力保球门不失,并发起反击。
3)Data dump进程---中场组织者(莫德里奇,伊斯科)
dump进程运行在源端,如果源端使用了本地的trail文件,dump进程降trail文件已数据块的形式,通过TCP/IP协议发送到目标端,通常这也是最保险的方式。当然,如果源端没有配置trail,extract进程就会直接在抽取完数据后,直接传递到目标端。就像软妹的外脚背和伊斯科的盘带,他们就是保证球能够通过中场,把球交到前场那几位爷脚下。
Server Collector进程---10号球员(j罗,本泽马)
Server Collector进程不需要配置,所以就想透明的,不需要特殊注意,其与运行在目标端,与源端的dump进程互相对应,其任务就是把extract或者dump进程传递来的数据块,重组成trail文件,就是所谓的remote trail文件,即远程trail文件。j罗嘛,我罗的脑残粉,拿到球来完成最后一传是分内的事,为什么本泽马加进来呢,我觉的本泽马是目前前锋中最会做球的,甚至是最适合皇马的。
4)Replicat进程---致命一击(我罗,大圣)
Replicat进程,也叫做应用进程,负责读取目标端trail文件内容,或者extract进程直接传递来的内容,将其解析成DML/DDL操作,并应用到目标端数据库中。就像我罗和大圣,总是球队进攻的最后一环,将球送进对方球门来完成最后一击。
Replicat进程,也有其内部的checkpoint机制,来保证replicate进程重启后,能够从上次记录的位置开始恢复,而无数据损失的风险。
5)GGSCI---教练(安胖)
GGSCI就是GoldenGate Software Command Unterface的缩写,GG的命令接口,来完成各种操作,就像安胖,不多说,有问题就吃速效救心丸。
需要注意的地方:
只是整理了一小部分,肯定有漏掉的地方,欢迎补充,也可能有说错的地方,欢迎纠正。
1: 内存
a. 并发进程数决定GG内存的大小
b. 在源端至少需要一个extract和data―pump进程
目标端至少需要一个replicate进程
每个GG instance 需要一个manager 进程
每个GG instance上,GGSCI最多支持300个extract和
replicate进程,每个extract和replicate进程大概需要25-55M的内存
c. GG的cache manager 利用cirtual memory来来保证GG的正常运行,所以系统需要保证一定的swap空间
--通过以下方法来确定需要的swap space的大小
(1) Start up oneExtract or Replicat.
(2) Run GGSCI.
(3) View thereport file and find the line PROCESS VM AVAIL FROM OS (min).
(4) Round up thevalue to the next full gigabyte if needed. For example, round up 1.76GB to 2GB.
(5) Multiplythat value by the number of Extract and Replicat processes that will be running.The result is the maximum amount of swap space that could be required. To determinethe number of processes you will need, consult the configuration chapters in theOracle GoldenGate Windows and UNIX Administrator’s Guide.
2:硬盘空间
a. GG软件需要50-150M的空间,根据数据库和gg版本来定
b. 每个gg实例的工作目录之类的 需要大概80M左右的空间
c. 注意 如果是在集群上部署OGG 那么,GG binaries和files需要放在共享存储上
d. 有可能data_pump进程死掉,但是extract进程还在不停的抓取数据,那么trails文件就会越来越大,所以至少需要1G的空间来存放trail文件,而且,为了避免trail文件被干扰,最好分配独立的disk或者文件系统来存放trail文件。
如果trail文件放在target端,那么就需要根据PURGEOLDEXTRACTS参数来定
3:集群环境
对于RAC集群,GG需要安装在共享设备里,这样就可以从任何一个接点启动,而且当一个接点启动失败时,可以从其他节点直接启动,而不需要配置
4:网络
a. GG的端口默认从7840开始
b. 可以在配置manager进程的时候,通过参数来指定一组端口,以便ogg的需要
A range ofports for local Oracle GoldenGate communications: can be the default rangestarting at port 7840 or a customized range of up to 256 other ports.
5:系统权限
就是最好建立一个GG用户,对gg安装目录有读写权限,也可以用oracle用户
6:数据库配置
a.如果是oracle 10G ,则必须要在sqlnet.ora中设置 bequeath_detach=true 以使用dequeath_detach
7:使用ASM
如果使用ASM,那么manager 需要能够访问asm 实例
8.环境变量
a. 在linux32bit系统上运行GG,需要指定LD_LIBRARY_PATH ,其要包含32bit的oracle libraries
b. 如果是一个instance 那么可以在系统级别设置oracle_home and oracle_sid
如果是多个instance 那么就可以在配置extract和replicate进程的时候通过setenv来指定
Oracle_home和 oracle_sid
SETENV (ORACLE_HOME = “<path to Oraclehome location>”)
SETENV (ORACLE_SID = “<SID>”)
多个实例就需要对每个extract replicate进程进行setenv设置
Setenv 参数 会覆盖掉系统级别的设置