数据同步工具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

相关文章

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

Spring中配置ContextLoaderListener方式

《Spring中配置ContextLoaderListener方式》:本文主要介绍Spring中配置ContextLoaderListener方式,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录Spring中配置ContextLoaderLishttp://www.chinasem.cntene

基于Python实现高效PPT转图片工具

《基于Python实现高效PPT转图片工具》在日常工作中,PPT是我们常用的演示工具,但有时候我们需要将PPT的内容提取为图片格式以便于展示或保存,所以本文将用Python实现PPT转PNG工具,希望... 目录1. 概述2. 功能使用2.1 安装依赖2.2 使用步骤2.3 代码实现2.4 GUI界面3.效

基于Python和MoviePy实现照片管理和视频合成工具

《基于Python和MoviePy实现照片管理和视频合成工具》在这篇博客中,我们将详细剖析一个基于Python的图形界面应用程序,该程序使用wxPython构建用户界面,并结合MoviePy、Pill... 目录引言项目概述代码结构分析1. 导入和依赖2. 主类:PhotoManager初始化方法:__in

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

浅谈配置MMCV环境,解决报错,版本不匹配问题

《浅谈配置MMCV环境,解决报错,版本不匹配问题》:本文主要介绍浅谈配置MMCV环境,解决报错,版本不匹配问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录配置MMCV环境,解决报错,版本不匹配错误示例正确示例总结配置MMCV环境,解决报错,版本不匹配在col

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数