数据同步工具oracle goldengate安装与配置

2023-11-08 19:48

本文主要是介绍数据同步工具oracle goldengate安装与配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.前言

跨平台、异构数据库之间的数据同步,方案有限,Oracle OGG算比较靠谱的一个:

优点:性能好,大数据量速度快,对线上库性能的影响忽略不计;
缺点:安装配置、维护有点麻烦,尤其是后期有字段变更时;
个人觉得适合部署在小范围、大数据量、对性能要求较高的同步需求。

本案例以Oracle(10.10.10.1) -> mysql(10.10.10.2)说明其部署过程以及注意事项。
原理说明:
OGG从源库的redo log或归档日志中提取出相关表的数据变更,生成特定格式的文件,发送至目标库;目标库读取文件,应用到目标表;
源库有ext\pump进程,目标库有rep进程,这些进程分别完成数据提取、发送文件、应用文件的任务;
本案例中分别是ext1\pump1\rep1进程,每个进程有其各自的配置文件;
如果源库已经在线上跑过一段时间了,有了数据量,就需要通过初始化任务来先初始化目标库,然后再通过ext1\pump1\rep1进程增量同步‘
本案例中分别是initext1\initrep1完成初始化(注:初始化无pump进程)

此外,源和目标各有1个manager进程负责全局配置。

盗个图:


2.安装

for oracle
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/u01/app/oracle/ggs:$ORACLE_HOME/lib
./runInstaller
指定安装路径
./ggsci
create subdirs

for mysql
解压
直接执行./ggsci
create subdirs

3.准备

Oracle数据库归档模式;
Oracle数据库设置SUPPLEMENTAL LOG和FORCE LOGGING:
  SELECT supplemental_log_data_min, force_logging FROM v$database;
  SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
  SQL> ALTER DATABASE FORCE LOGGING;
Oracle数据库设置表trandata
./ggci
ggsci > dblogin userid system password mypwd
ggsci > add trandata myschema.mydb

mysql设置以下参数:
binlog_row_image:full(默认)
log_bin
log_bin-index
max_binlog_size
binlog_format

mysql库中在mydb中创建checkpoint表:chkpt_mysql_create.sql

源表和目标表表必须有主键或唯一键;
目标表清空;
目标表禁用外键、约束、触发器;
如果初始数据量较大,临时删除目标表索引,初始化导入后再建

4.配置文件

以下文件置于dirprarm目录下
--源端--
mgr:
PORT 7809
DYNAMICPORTLIST 7810-7820
ACCESSRULE, PROG *, IPADDR 192.168.*.*, ALLOW
--AUTOSTART ER *
--AUTORESTART ER *, RETRIES 3, WAITMINUTES 3
STARTUPVALIDATIONDELAY 5
PURGEOLDEXTRACTS /backup/ggs12/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 2initext1:
EXTRACT initext1
SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
SETENV (ORACLE_SID = "myora")
USERID system PASSWORD mypasswprd
RMTHOST 10.10.10.2, MGRPORT 7809
RMTTASK REPLICAT, GROUP initrep1
TABLE schema_name.table_name;ext1:
EXTRACT ext1
SETENV (ORACLE_HOME = "/u01/app/oracle/product/11.2.0/dbhome_1")
SETENV (ORACLE_SID = "myora")
USERID system PASSWORD mypwd
LOGALLSUPCOLS
EXTTRAIL /backup/ggs12/dirdat/aa
TABLE myschema.mytable;pump:
EXTRACT pump1
USERID system PASSWORD mypassword
RMTHOST 10.10.10.2, MGRPORT 7809
RMTTRAIL /data1/ggs/dirdat/aa
TABLE myschema.myname;
--目标端--
mgr:
PORT 7809
DYNAMICPORTLIST 7810-7820
#AUTOSTART ER *
#AUTORESTART ER *, RETRIES 3, WAITMINUTES 3
STARTUPVALIDATIONDELAY 5
PURGEOLDEXTRACTS /data1/ggs/dirdat/*, USECHECKPOINTS, MINKEEPHOURS 2initrep1:
REPLICAT initrep1
TARGETDB mydbname@10.10.10.2:3306, USERID root, PASSWORD mypassword
MAP myschema.mytable, TARGET mydb.mytable, COLMAP(USEDEFAULTS, source_cola = target_cola, source_colb = target_colb);rep1:
REPLICAT rep1
TARGETDB dbcopy@10.10.10.2:3306, USERID root, PASSWORD mypassword
MAP myschema.mytable, TARGET mydb.mytable, COLMAP(USEDEFAULTS, source_cola = target_cola, source_colb = target_colb);

5.创建进程

创建好配置文件后,收到执行以下命令创建进程(自动读取配置)

--源端--
ggsci > add extract initext1, sourceistable
ggsci > add extract ext1, tranlog, begin now
ggsci > add exttrail /backup/ggs12/dirdat/aa, extract ext1
ggsci > add ext pump1, exttrailsource /backup/ggs12/dirdat/aa
ggsci > add rmttrail /data1/ggs/dirdat/aa, ext pump1
--目标端--
ggsci > add replicat initrep1, specialrun
ggsci > add rep rep1, exttrail /data1/ggs/dirdat/aa, checkpointtable mydb.ggs_checkpoint

6.开始同步

source:
ggsci > start ext1
ggsci > start pump1target
rep1设置HANDLECOLLISIONSsource:
ggsci > start initext1target:
ggsci > view report initrep1
确认initrep1执行完成
ggsci > start rep1
ggsci > info rep1
rep1配置文件删除HANDLECOLLISIONS?配置
ggsci > send replicat rep1, nohandlecollisionsggsci > start rep rep1

7.注意事项

(1).OGG不能识别复合唯一键,因此有复合键的需要用keycols指定,否则以所有字段作为key;

(2).调整源或目标表的字段步骤:

停止ext\pump\rep进程
修改源和目标库字段

启动ext\pump\rep进程

为了防止DBA或运维误操作,在oracle相关表上创建触发器,提醒这是ggs table:

create or replace trigger tri_ddl_ggstab_permission
before drop or truncate or alter on database
beginif ORA_DICT_OBJ_NAME in ('TABNAME1','TABNAME2') thenraise_application_error(-20001,'GGS table, Contact DBA.');end if;
end;

(3).万事离不开监控,ggs的监控可以通过创建心跳表监控实时同步情况

说明:

在源和目标表建心跳表;

源通过JOB自动更新心跳表;

目标表定时检查心跳表的时间与当前时间之差;

目标表中now() - update_time,反应了ggs同步情况;

目标表中auto_time - update_time,反应了ggs延时情况;

source:
create table ggs_monitor(ggs_process varchar2(100), update_time date) tablespace lbdata;
alter table ggs_monitor add constraint pk_ggsmonitor primary key(ggs_process);
insert into ggs_monitor(ggs_process,update_time) values ('ext1',sysdate);
begindbms_scheduler.create_job(job_name        => 'job_ggs_monitor',job_type        => 'PLSQL_BLOCK',job_action      => 'begin update ggs_monitor set update_time=sysdate; commit; end;',start_date      => sysdate,enabled         => true, repeat_interval => 'Freq=Secondly;Interval=10');
end; 
target:
create table ggs_monitor (ggs_process varchar(100) COLLATE utf8_bin DEFAULT NULL,update_time datetime DEFAULT NULL,auto_tim` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,primary key(ggs_process)
);GGS配置注意事项:
ext1:  TABLE system.ggs_monitor, WHERE (ggs_process = 'ext1');zabbix
UserParameter=ggsAvail[*],/etc/zabbix/script/ggsAvail.sh $1
UserParameter=ggsDelay[*],/etc/zabbix/script/ggsDelay.sh $1ggsAvail.sh 
#!/bin/bash
if [ $# -ne 1 ]; thenecho "Usage:$0 extname"exit
fiextname=$1
rootPath=/etc/zabbix/script
tmpLog=$rootPath/tmpGgsAvail${extname}.logmysql -u root -pmypwd <<EOF > ${tmpLog} 2>/dev/null
select concat('RESULTLINE#',now() - update_time,'#') message from dbadmin.ggs_monitor where ggs_process='${extname}';
EOF
sed -i '/RESULTLINE/!d' ${tmpLog}
resultLine=`cat ${tmpLog} | wc -l`
if [ $resultLine -ne 1 ]; thenecho 3600exit
fi
echo `cat ${tmpLog} | cut -d "#" -f 2`
exitggsDelay.sh 
#!/bin/bash
if [ $# -ne 1 ]; thenecho "Usage:$0 extname"exit
fiextname=$1
rootPath=/etc/zabbix/script
tmpLog=$rootPath/tmpGgsDelay${extname}.logmysql -u root -pmypwd <<EOF > ${tmpLog} 2>/dev/null
select concat('RESULTLINE#',auto_time - update_time,'#') message from dbadmin.ggs_monitor where ggs_process='${extname}';
EOF
sed -i '/RESULTLINE/!d' ${tmpLog}
resultLine=`cat ${tmpLog} | wc -l`
if [ $resultLine -ne 1 ]; thenecho 3600exit
fi
echo `cat ${tmpLog} | cut -d "#" -f 2`
exit

zabbix监控效果




这篇关于数据同步工具oracle goldengate安装与配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/372091

相关文章

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

Jenkins分布式集群配置方式

《Jenkins分布式集群配置方式》:本文主要介绍Jenkins分布式集群配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装jenkins2.配置集群总结Jenkins是一个开源项目,它提供了一个容易使用的持续集成系统,并且提供了大量的plugin满

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核