暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OGG配置

原创 杨佳 2020-03-21
2503

OGG配置相关说明
1.准备工作
1.1安装Linux系统(CentOS6.5/CentOS6.8)
系统需要开启支持图形化界面:如安装XWinDows
yum -y groupinstall “X Window System”
安装Oracle和OGG需要图形界面支持。
安装过程中需要支持xclock、xhost等命令验证安装。

磁盘空间要求100G以上。软件安装+系统约占用近20G空间,考虑数据增长加上如果开启归档,空间会暴增。

1.2安装配置JDK
版本:Jdk6.0

1.3安装Oracle11gR2
Oracle安装需要新建用户/用户组授权安装,并设置数据库相关目录等,Oracle规定root用户不能直接安装软件。
检查Oracle11gR2所需RPM软件包,如果系统为64位,需另外安装32位的软件包(Oracle检测需要)
rpm -q --queryformat %-{name}-%{version}-%{release}-%{arch}"\n" \ compat-libstdc+±33 glibc-kernheaders glibc-headers libaio libgcc glibc-devel xorg-x11-deprecated-libs
如果缺少,就继续安装缺失的组件包。yum install -y libgcc*
或者启动Oracle安装时候会提示缺少哪些软件包。注意区分是64位还是32位的。32位需要独立安装。yum命令默认安装跟系统匹配的软件包,不会额外安装32位的。需手动指定安装。由于系统和yum源不同,版本不同,软件包的名字可能有差异,可使用命令查找可安装的软件包yum list package*
Oracle安装的时候会检测32位的包,后缀为*.i386,单由于版本原因,可能后续的软件包32位的已经改为*.i686,安装时以实际支持的为准。如果确定已安装了对应软件包的32位,可以跳过Oracle的检查提醒继续安装,如未安装,可能导致安装过程报错。
开始安装:
1、编辑/etc/sysctl.conf文件,设置相关参数的系统默认值。如果该文件中已有相关参数的设置,则确保参数值不小于如下对应值;如果还没有相关参数的设置,则按照如下格式添加相应的参数设置行。
vi /etc/sysctl.conf

2、编辑/etc/security/limits.conf文件,修改操作系统对oracle用户资源的限制。
设置DISPLAY变量,让用户机器可以通过Xmanager – Passive打开服务器的Oracle安装界面。
vi /etc/security/limits.conf

3、规划安装空间和文件目录并授权

配置ORACLE_HOME等环境变量、还有oracle11g其他相关配置等,以下部分步骤省略,可以百度Oracle11gR2相关安装教程……

4、准备远程安装oracle
配置打开终端窗口,客户机选择允许
export DISPLAY={IP}:0.0
输入xclock测试,如果能够看见时钟证明图形化可用。
xhost +
access control disabled, clients can connect from any host
表示linux下视窗环境以及准备OK,可以进行oracle安装了。

5、运行安装文件,开始图形化界面安装,根据提示一步一步安装(跟windows下一样)
6、安装完毕。启动Oracle。

2.在源端数据库中关闭回收站

官方的说明是,由于一个已知的问题,回收站会对DDL触发器产生影响,因此需要关闭。由此可见,我们只需要在源库中关闭回收站即可。

SQL> show parameter recyclebin

NAME TYPE VALUE


recyclebin string on

SQL> alter system set recyclebin=off; // 如果不行则加上 deferred

System altered.

SQL> show parameter recyclebin

NAME TYPE VALUE


recyclebin string OFF

有些参数不能动态修改,需要使用alter system set recyclebin=off scope = spfile; 然后重新启动。

3.数据库开启归档模式
查询是否已开启归档模式
SQL>select log_mode,supplemental_log_data_min,force_logging from v$database;

如果为NO,需要添加,命令如下

1)archivelog

SQL>shutdown immediate;

SQL>startup mount;

SQL>alter database archivelog;
Database altered.

SQL>alter database open;
Database altered.

(2) force logging

SQL>alter database force logging;
Database altered.

(3)supplemental log data

SQL>alter database add supplemental log data;
Database altered.

如果启用DDL 支持,必须关闭recycle bin。官网的解释如下:
If the recyclebin is enabled, the Oracle GoldenGate DDL triggersession receives implicitrecycle bin DDL operations that cause thetrigger to fail.

Oracle 11g:

SQL> alter system set recyclebin=off scope=spfile;
System altered.

如果数据库是10g,需要关闭recyclebin并重启;或者手工purge recyclebin。

抽取进程使用的数据库用户需要额外的权限,我们将这些权限也授予数据库用户goldengate(在源端数据库中执行)

SQL>exec dbms_streams_auth.grant_admin_privilege(‘ogg’);
PL/SQL procedure successfully completed.
SQL> grant insert on system.logmnr_restart_ckpt$ to ogg;
Grant succeeded.
SQL> grant become user to ogg;
Grant succeeded.
– 为了确保GoldenGate正常运行,特别是在目标端,赋予ogg用户DBA权限:
SQL> grant dba to ogg;
Grant succeeded.

4.解压goldengate安装文件到安装目录
由于各种问题,ogg用户使用oracle相同用户。

5.配置环境变量

源端和目标端:
修改goldengate用户的环境变量配置文件(ORACLE_SID按实际情况修改)
su - oracle
vi .bashrc
ORACLE_HOME=/opt/oracle/product/11.2.0/dbhome_1
export ORACLE_HOME
ORACLE_SID=orcl
export ORACLE_SID
GG_HOME=/opt/ogg
export GG_HOME
PATH=ORACLEHOME/bin:ORACLE_HOME/bin:GG_HOME:PATHexportPATHLDLIBRARYPATH=PATH export PATH LD_LIBRARY_PATH=ORACLE_HOME/lib:GGHOME:GG_HOME:LD_LIBRARY_PATH
应用刚刚修改的环境变量,然后进入GoldenGate安装目录,执行ldd ggsci,确定需要的库文件都能够找到。如果出现共享库文件无法找到,例如libnnz10.so => not found,检查LD_LIBRARY_PATH环境变量的设置
[goldengate@ggdb goldengate]$ source ~/.bashrc
[goldengate@ggdb goldengate]$ cd GGHOME[goldengate@ggdbgoldengate]GG_HOME [goldengate@ggdb goldengate] ldd ggsci

6.配置goldengate[12.2.0.1]
版本:OGG-12.2.0.1
创建goldengate工作目录
源端和目标端:

[oracle@localhost ogg]$ cd GGHOME[oracle@localhostogg]GG_HOME [oracle@localhost ogg] ./ggsci

GGSCI (localhost.localdomain) 1> create subdirs

Creating subdirectories under current directory /opt/gg/goldengate

Parameter files /opt/gg/goldengate/dirprm: created
Report files /opt/gg/goldengate/dirrpt: created
Checkpoint files /opt/gg/goldengate/dirchk: created
……

GGSCI (gg1) 2> exit

5.1创建trail文件存放目录
源和目标端:

[oracle@localhost ~] $ mkdir /opt/gg/trails
[oracle@localhost ~]$ ls -l /opt/gg | grep trails

5.2配置MANAGER

源端和目标端:

DYNAMICPORTLIST中配置了GoldenGate(extract和replicat)进程使用的端口范围
PORT参数指定MANAGER使用的端口
AUTORESTART参数使抽取/复制进程失败后自动重启
配置MANAGER的参数,PURGEOLDEXTRACTS参数指定:当根据checkpoint发现已经完成抽取和复制的trail文件将被自动删除,但保留最近10个。
PURGEDDLHISTORY和PURGEMARKERHISTORY分别删除DDL历史表和marker表中的过期数据,以控制它们不会变得过于庞大。

[goldengate@rac1 goldengate]$ cd GGHOME[goldengate@rac1goldengate]GG_HOME [goldengate@rac1 goldengate] ./ggsci
GGSCI (gg1) 1> edit params mgr
PORT 7809

GGSCI (rhel131) 1>start mgr
Manager started.

5.3参数设置

源端:

GGSCI (rac1) 2> edit params ./globals
GGSCHEMA ogg

目标端:

创建一个checkpoint表
replicat通过这个表来维护trail文件中的read position。这不是个必须的操作,如果没有这个表,则通过一个磁盘文件来维护

GGSCI (localhost.localdomain) 4> dblogin userid ogg,password ogg
Successfully logged into database.

GGSCI (localhost.localdomain) 5> add checkpointtable ogg.TB_TEST

Successfully created checkpoint table ogg.TB_TEST.

GGSCI (localhost.localdomain) 6> edit params ./globals

GGSCHEMA goldengate
CHECKPOINTTABLE ogg.chkpoint

5.3.1源端配置extract进程
配置源端抽取组ext1
GGSCI(rhel131) 1> add extract ext1,tranlog,begin now
EXTRACT added.
GGSCI(rhel131) 2> add rmttrail /opt/ogg/dirdat/lt, extract ext1
RMTTRAIL added…
这里不能用add exttrail,因为是直接将trail文件传输到目的端。
GGSCI(rhel131) 3> edit params ext1
extract ext1
TRANLOGOPTIONS EXCLUDEUSER ogg – tranlogoptions excludeuser ogg
–加上这个参加是为了避免双向复制时目标和源重复复制数据。
set env(oracle_sid=orcl,nls_lang= AMERICAN_AMERICA.WE8ISO8859P1)
userid ogg, password ogg
rmthost 192.168.27.133, mgrport 7809
rmttrail /opt/ogg/dirdat/lt
table ogg.*;

GGSCI(rhel131) 8> start extract ext1

SendingSTART request to MANAGER …
EXTRACTEXT1 starting

GGSCI(rhel131) 9> info all

Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXT1 00:13:28 00:00:01

至此源库的操作已结束。
如果报错:
ERROR:Manager not currently running.
GGSCI(zlm) 8> start mgr
Managerstarted.
GGSCI(zlm) 9> start extract eora
SendingSTART request to MANAGER …
EXTRACTEORA starting

5.3.2目标库建立checkpoint
GGSCI (rhel132) 1> edit params GLOBALS

GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint
GGSCI(rhel132) 2> dblogin userid ogg password ogg
GGSCI(rhel132) 3> add checkpointtable ogg.checkpoint

7) 目标库建立replicate进程
GGSCI(rhel132) 4> add replicat rep1, exttrail ./dirdat/lt, checkpointtable ogg.checkpoint
REPLICAT added.

GGSCI(rhel132) 5> edit params rep1

replicat rep1
ASSUMETARGETDEFS
userid ogg, password ogg
reperror default,discard
discardfile ./dirrpt/rora_aa.dsc, append, megabytes 200
REPORTROLLOVER AT 02:00
DISCARDROLLOVER AT 02:00
map ogg., target ogg.;
~
GGSCI(rhel132) 6> start replicat rep1

GGSCI(rhel132) 7> info all

Program Status Group Lag at Chkpt Time Since Chkpt

MANAGER RUNNING
REPLICAT RUNNING REP1 00:00:00 00:00:02

单向同步设置完毕。测试数据通过。

下面要进行双向同步的操作(其实就是将源和目标库的同步配置对换重新配置一次):

5.3.3目标库配置extract进程

GGSCI(rhel132) 8> add extract ext2, tranlog, begin now
EXTRACTadded.

GGSCI(rhel132) 10> add rmttrail /opt/ogg/dirdat/tl, extract ext2
RMTTRAILadded.

Trail产生的文件名必须要和之前的分开,之前用的是lt,现在是tl

GGSCI(rhel132) 11> edit params ext2
extract ext2
useridogg, password ogg
rmthost192.168.27.132, mgrport 7809
rmttrail /opt/ogg/dirdat/tl
table ogg.*;

GGSCI(rhel132) 19> start extract ext2
GGSCI(rhel132) 19> info all

5.3.4源库建立checkpoint
GGSCI (rhel131) 1> edit params GLOBALS

GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint

GGSCI(rhel131) 2> dblogin userid ogg password ogg

GGSCI(rhel131) 3> add checkpointtable ogg.checkpoint

11)源库建立replicate进程

GGSCI(rhel131) 1> add replicat rep2, exttrail ./dirdat/tl, checkpointtable ogg.checkpoint
REPLICATadded.

GGSCI(rhel131) 2> edit params rep2

replicat rep2
ASSUMETARGETDEFS
userid ogg, password ogg
reperror default,discard
discardfile ./dirrpt/rora_aa.dsc, append, megabytes 5
map ogg., target ogg.;

GGSCI(rhel131) 3> start replicat rep2

GGSCI(rhel131) 4> info all
5.4同步结果
测试通过,反向同步成功。
同步略有零点几秒的延迟。
7.注意事项
1、extract进程停掉后数据库发生的数据变动,在进程启动之后会继续同步。但冲突的数据不处理。
2、先启动EXTRACT,再启动REPLICAT
3、
如果archive log模式下不能正常startup,则先恢复成noarchive log,startup成功后,再shutdown;
shutdown immediate;
startup mount;
alter database noarchivelog;
alter database open;
shutdown immediate;
再次startup以archive log模式
shutdown immediate;
startup mount;
show parameter log_archive_dest;
alter database archivelog;
archive log list;
alter database open;
如果还不行,则删除一些archlog log
8.OGG部分参数说明
SETENV (NLS_LANG=“AMERICAN_AMERICA.UTF8”)
设置字符集环境变量为UTF8
如果系统中存在多个数据库有时候会用参数SETENV设置ORACLE_HOME、ORACLE_SID等,例如:
SETENV (ORACLE_HOME = “/home/oracle/product/10.2.0/db)
SETENV (ORACLE_SID = “PROD”)
DBOPTIONS DEFERREFCONST
约束延迟设置。在复制进程的事物被提交之前,延迟级联删除、级联更新时的校验和实施。
GETTRUNCATES
不捕获生产端truncate table的操作。
REPORT AT 06:00
每天早上6点报告
REPORTCOUNT EVERY 30 MINUTES, RATE
每隔30分钟报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息
REPORTROLLOVER AT 02:00
为了防止report file被写满,每天2:00做一次文件过期设定
REPERROR DEFAULT, ABEND
除了特殊指定的REPERROR语句,报告所有复制期间出现的错误,回滚非正常中断的事物和进程。
HANDLECOLLISIONS
当灾备端已经存在数据的情况下,解决复制过程中出现的冲突。如果要重新做初始化,可以删除drop灾备端数据库后再rman恢复,这样做的话就不需要该参数了。
ALLOWNOOPUPDATES
当生产端有某些列但是目标表却没有,或者复制进程中配置了COLSEXCEPT 参数 在这些情况下,当生产端对那些列进行更新,目标表将不发生任何变化
assumetargetdefs
使用ASSUMETARGETDEFS参数时,用MAP语句中指定的生产库源表和灾备端目标表具有相同的列结构。它指示的Oracle GoldenGate不在生产端查找源表的结构定义。
DISCARDFILE ./dirrpt/repsa.dsc, APPEND, MEGABYTES 1024M
将执行失败的记录保存在discard file中,该文件位于./dirrpt/extya.dsc,大小为1024MB。 文件中已经包含记录的话,再后面继续追加,不删除之前的记录。
DISCARDROLLOVER AT 02:00
为了防止discard file被写满,每天2:00做一次文件过期设定
HANDLECOLLISIONS
1 对于没有主键以及唯一索引的表
对于update缺失行情况,目标库会转化为insert语句进行插入。
对于delete缺失行情况,目标会会忽略操作。
对于insert发现重复行情况,目标库会仍然进行插入操作。(导致数据重复) ----不受HANDLECOLLISIONS参数影响,继续插入

2 对于存在主键
对于update缺失行情况,且抓取进程不使用fetchoptions fetchpkupdatecols参数,更新主键则目标库转化为insert操作,如果未更新主键则忽略。
对于delete缺失情况,则忽略,
对于insert发现重复行情况,转化成update语句,将重复列更新主键值为原来插入主键值。
3 对于存在唯一值索引
对于update缺失行情况,目标库会转化为insert语句进行插入。
对于delete缺失行情况,目标会会忽略操作。
对于insert发现重复行情况,目标库执行先delete操作然后再insert。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论