OGG学习笔记01-基础概述
OGG(Oracle Golden Gate),最近几年在数据同步、容灾领域特别火,甚至比Oracle自己的原生产品DataGuard还要风光,主要是因为其跨平台、跨数据库、跨版本的强大特性。
OGG理论概念
我们可以搜索到网上对它的简单介绍:
Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数据库同步。
Oracle Golden Gate可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台)之间实现大量数据亚秒一级的实时复制,从而可以在应急系统、在线报表、实时数据仓库供应、交易跟踪、数据同步、集中/分发、容灾、数据库升级和移植、双业务中心等多个场景下应用。同时,Oracle Golden Gate可以实现一对一、广播(一对多)、聚合(多对一)、双向、点对点、级联等多种灵活的拓扑结构.
目前许多客户环境都已经在广泛使用OGG。由于工作需要,近期我也会系统的学习下OGG,目前学习主要以OGG在Oracle数据库之间的同步来说明一些基本概念,后续看时间情况可能了解OGG对其他主流数据库的同步。
假设已有源数据库和目标数据库,且分别部署好OGG软件。
源数据库部署的OGG,简称源OGG;目标数据库部署的OGG,简称目标OGG。
同步的过程就是源OGG的EXTRACT进程从源数据库的联机redologs中抽取获得变化,把它写到本地trail文件中,然后源OGG的Data pump进程再从本地trail文件中抽取变化传给目标OGG的collector进程,目标的collector进程再把这些变化写入目标trail文件中,最后目标OGG的Replicat进程把目标trail文件中记录的变化应用到目标数据库中。
如果要同步的表数量比较多或是业务有区分,需要分开管理,OGG是支持分开多个extract进程,多个datapump进程,多个replicat进程,这样,可以启动或停止其中任意一类同步,而不影响其他的同步。
由此,我们可以得到一张Oracle Golden Gate的简要体系图:
需要注意的是,每套OGG所有的进程都是由其Manager进程来管理的,也就是说Manager进程负责管理,启动关闭其他进程。OGG用组来表示它的进程,上面简单提到的extract、replicat这些进程,实际上需要各自的参数文件、检查点文件等。这些内容共同组成一个组,且每个组需要有一个组名字。
可以将上面的简要体系图再标注一些内容,便于理解OGG实际的工作方式。
OGG的检查点信息,对于源OGG只能以文件形式默认存放在GGHOME/dirchk目录下,一个组对应一个文件。
而对于目标OGG检查点信息可以存放在数据库表中,且建议存放到数据库表中。
对于源数据库,如果要使用OGG,需要配置supplemental logging,原因是OGG相当于逻辑同步,除了要记录被修改的记录,还要把能够标识这条记录的信息同时记录在日志中。这样的话,Oracle默认情况是不达标的,需要额外开启supplemental logging才可以。
具体做法是:在数据库级别开启最小附加日志,在需要同步的表级别开启详细附加日志。
#数据库级别开启最小附加日志:
SQL> alter database add supplemental log data;
#表级别开启详细附加日志(这里举例是jy用户下的t_second表):
GGSCI> add trandata jy.t_second
对于目标数据库,配置检查点信息到目标数据库表中,具体做法:
#1.目标GG的全局参数(./globals)配置
checkpointtable ggt.chkpt
#2.命令添加checkpointtable
GGSCI> add checkpointtable ggt.chkpt
复制进程可以指定checkpointtable 从而使用数据库表记录检查点信息。
OGG安装介绍
OGG介质下载,在ORACLE官网就有提供最新版本下载,如果需要下载历史版本的,就需要MOS账号。
下载地址: https://edelivery.oracle.com
OGG的安装也非常简单,在期望的安装目录下,直接解压压缩文件即可。
[ogg@oradb30 ~]$ cd /u01/app
[ogg@oradb30 app]$ ls
oracle
[ogg@oradb30 app]$ mkdir ogg
[ogg@oradb30 app]$ cd ogg/
[ogg@oradb30 ogg]$ pwd
/u01/app/ogg
[ogg@oradb30 ogg]$ tar xvf /u01/media/fbo_ggs_Linux_x64_ora10g_64bit.tar
为了便于管理维护,我们创建新的操作系统用户和数据库用户,专门给OGG使用。
#创建系统用户ogg,隶属于oinstall组
useradd ogg -g oinstall
环境变量,除了设置OGG自己,还需要设置可以访问到库文件,这也是为何将系统用户ogg隶属于oinstall组,保证其有权限访问oracle安装目录的库文件。
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export GG_HOME=/u01/app/ogg
export PATH=$GG_HOME:$PATH
确定ggsci可以正常使用,然后使用create subdirs创建OGG的子目录,最后配置好Manager。
#1.确定ggsci可以正常使用
[ogg@oradb30 ~]$ ggsci
ggsci: error while loading shared libraries: /u01/app/oracle/product/10.2.0/db_1/lib/libclntsh.so.10.1: cannot restore segment prot after reloc: Permission denied
我这里遇到的这个错误关键点是“cannot restore segment prot after reloc: Permission denied”是因为主机系统SELinux开启的原因。关闭SELinux即可解决。
[root@oradb30 ~]# su - ogg
[ogg@oradb30 ~]$ cd /u01/app/ogg/
[ogg@oradb30 ogg]$ ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 11.2.1.0.1 OGGCORE_11.2.1.0.1_PLATFORMS_120423.0230_FBO
Linux, x64, 64bit (optimized), Oracle 10g on Apr 23 2012 07:30:46
Copyright (C) 1995, 2012, Oracle and/or its affiliates. All rights reserved.
GGSCI (oradb30) 1>
#2.使用create subdirs创建OGG的子目录
GGSCI (oradb30) 1> create subdirs
Creating subdirectories under current directory /u01/app/ogg
Parameter files /u01/app/ogg/dirprm: already exists
Report files /u01/app/ogg/dirrpt: created
Checkpoint files /u01/app/ogg/dirchk: created
Process status files /u01/app/ogg/dirpcs: created
SQL script files /u01/app/ogg/dirsql: created
Database definitions files /u01/app/ogg/dirdef: created
Extract data files /u01/app/ogg/dirdat: created
Temporary files /u01/app/ogg/dirtmp: created
Stdout files /u01/app/ogg/dirout: created
#3.配置好Manager
GGSCI (oradb30) 2> edit param mgr
port 7777
GGSCI (oradb30) 3> info mgr
Manager is DOWN!
GGSCI (oradb30) 4> start mgr
Manager started.
GGSCI (oradb30) 5> info mgr
Manager is running (IP port oradb30.7777).
后续extract、replicate等OGG实际工作的进程(组)配置,将在下篇《OGG学习笔记02-单向复制配置实例》详细说明。
Reference
- 张晓明. 大话Oracle Grid[M]. 人民邮电出版社, 2014.