Oracle Golden Gate是Oracle旗下一款支持异构平台之间高级复制技术,是Oracle力推一种HA高可用产品,简称“OGG”,可以实现Active-Active 双业务中心架构

1.1. 目的 
本文档描述OGG的相关配置和实际操作教程,旨在能够初步了解掌握OGG的原理和使用方法 
1.2. 定义、业务术语、缩略语 
Oracle Golden Gate有源端和目标端,源端捕获日志发送到目标端应用,这个过程分为六步骤 
 捕获:实时捕获交易日志(已提交数据),包含DML和DDL,并可根据规则进行过滤 
 队列:把捕获的日志数据加载入队列(写入trail文件),这是可选项,为了提高安全性,怕网络传丢了。 也可以不入队列,直接从redo buffer传递给目标端 
 数据泵:将trail文件广播到不同的目标端 
 网络:从源网络压缩加密后传送到目的网络 
 接收队列:接收从源端传过来的trail文件 
 交付:把trail文件内容转换成SQL语句在目标库执行 双向复制:在把另一端重新配置成源端,即可实现双向复制,这就是Active-Active双业务中心 
Golden Gate进程 
 Manager进程:这是GG全局主进程,它是GG守护进程统筹全局,它可以启动、监控、终止Golden Gate的其它进程,收集错误报告及事件,分配数据存储空间,发布阀值告警等,在源端和目标端有且只有一个Manager进程。 
 Extract进程:运行在源端的进程,实时捕获交易数据,可以直接在redo buffer捕获传递到目标端,也可以在redo buffer捕获先写入trail队列在传递到目标端。非Oracle库支持从数据表捕获数据。 
 Pump进程:运行在源端的进程,将源端产生的本地trail文件广播到不同的目标端,pump进程本质是extract进程的一种特殊形式,如果不使用trail文件,那么extract进程在捕获完交易日志后直接传递到目标端,生成远程trail文件。 
 Collector进程:运行在目标端的进程,专门接收从源端传过来的trail文件日志生成队列。 
 Delivery进程:运行在目标端的进程,通常我们也把它叫做replicat进程,是数据传递的最后一站,负责读取远程trail文件内容,解析为SQL语句在目标库上执行。 
1.3. 参考资料 
 《OGG MaxCompute插件.pdf》; 
 《OGG环境搭建手册.pdf》; 
 《Oracle Golden Gate图文并茂快速掌握.pdf》 
1.4. 原理特点 
 实时数据复制 
 异构平台数据同步 
 支持断点续传,不影响系统连续运行 
 高性能,属于轻量级软件 
 保证数据引用完整性和事物一致性 
 整合ETL Tools Message Service 
 灵活拓扑结构 1:1 1:N N:1 N:N 双向复制 
 复制冲突检测和解决 
 支持数据压缩和加密 
 TCP/IP WAN LAN 
 根据事务大小和数量自动管理内存 
 支持多活业务中心 
 以交易数据为单位复制,保证交易一致性 
 支持数据过滤和转换,可自定义基于表和行的过滤规则,实时在异构环境下转换数据

2. 安装使用

2.1. 下载安装 
配置:源端数据库192.168.2.78 实例名orcl 
目标数据库192.168.2.78 实例名orcl 
安装OGG 
需要下载两个文件,源端安装OGG,目标端安装Adapters 
安装包下载 
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html 
然后解压安装,选择静默安装 
源端配置/response/oggcore.rsp文件 
有两个需要注意的地方 
INSTALL_OPTION=ORA11g –oracle版本是多少就填多少 
UNIX_GROUP_NAME=oinstall –这个组名需要填对,可以通过ll命令查看文件夹属性组名,否则会报错,还有每次重新安装时都要把以前生成的文件全部del掉,不然会报错 
静默安装步骤: 
./runInstaller -silent -responseFile {YOUR_OGG_INSTALL_FILE_PATH}/response/oggcore.rsp 
具体操作参见 
https://help.aliyun.com/document_detail/28294.html?spm=5176.doc28291.6.593.mdVnrX 
2.2. 双端配置 
2.2.1. 源端数据库配置 
以dba身份进入数据库:sqlplus / as sysdba 
*# 创建独立的表空间,这个路径根据自己安装的oracle路径填写* 
create tablespace ATMV datafile ‘/home/oracle/u01/app/oracle/oradata/uprr/ATMV.dbf’ size 100m autoextend on next 50m maxsize unlimited; 
*# 创建ogg用户,密码也为ogg,也可以不用创建新用户,但是一定要要给使用ogg的用户赋予dba权限* 
create user ogg identified by ogg default tablespace ATMV; 
*# 给ogg用户赋予充分的权限以便ogg正常使用* 
grant connect,resource,dba to ogg; 
*# 检查附加日志情况,若是返回YES则代表日志已开启最小补全日志* 
Select SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_PK, SUPPLEMENTAL_LOG_DATA_UI, SUPPLEMENTAL_LOG_DATA_FK, SUPPLEMENTAL_LOG_DATA_ALL from v$database; 
*# 增加数据库附加日志,可以指示数据库在日志中添加额外信息到日志流中,以支持基于日志的工具如ogg,帮助ogg目标端分析识别修改的数据* 
alter database add supplemental log data; 
alter database add supplemental log data (primary key, unique,foreign key) columns; 
*# rollback,回滚机制,帮助数据库回到某一时间点的数据,OGG使用时可以不配置这一步* 
alter database drop supplemental log data (primary key, unique,foreign key) columns; 
alter database drop supplemental log data; 
*# 全字段模式,开启补全日志* 
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; 
*# 开启数据库强制日志模式,无论什么操作都进行redo的写入,一些nologging的操作也会写如日志* 
alter database force logging; 
*# 执行marker_setup.sql 脚本,会让你填写用户名,这些脚本在ogg安装文件夹里* 
@marker_setup.sql 
*# 执行@ddl_setup.sql* 
@ddl_setup.sql 
*# 执行role_setup.sql* 
@role_setup.sql 
*# 给ogg用户赋权* 
grant GGS_GGSUSER_ROLE to ogg_test; 
*# 执行@ddl_enable.sql,开启DDL trigger* 
@ddl_enable.sql 
*# 执行优化脚本* 
@ddl_pin ogg_test 
*# 安装sequence support* 
@sequence.sql 
alter table sys.seq$ add supplemental log data (primary key) columns; 
2.2.2. 源端mgr配置 
通过./ggsci 进入命令行模式 
创建必须目录GGSCI>create subdirs 
源端配置要配置好mgr(类似于主机的cpu),extract(进程)和pump(策略) 
 配置mgr 
GGSCI> edit params mgr 
PORT 7839 –端口号可以随意配置,本机传本机端口号要不同 
DYNAMICPORTLIST 7840-7849 
USERID ogg, PASSWORD ogg 
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS, MINKEEPDAYS 7 
LAGREPORTHOURS 1 
LAGINFOMINUTES 30 
LAGCRITICALMINUTES 45 
PURGEDDLHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7 
PURGEMARKERHISTORY MINKEEPDAYS 3, MAXKEEPDAYS 7 
 启动mgr: start mgr 
运行日志在dirrpt文件夹下 
 查看mgr状态:info mgr 
 查看mgr配置:view params mgr 
2.2.3. 源端extract配置 
 配置extract 
GGSCI>edit params extract –extract是组名可以任取 
EXTRACT extract 
SETENV (NLS_LANG=” AMERICAN_AMERICA.ZHS16GBK”) 
–通过env查看本机获取这个NLS_LANG 
setenv (ORACLE_SID = orcl) 
USERID ogg, PASSWORD ogg 
EXTTRAIL ./dirdat/st 
DYNAMICRESOLUTION 
TABLE OGG.*; 
 增加该进程 GGSCI> add ext extract,tranlog, begin now 
2.2.4. 源端pump配置 
 配置pump 
GGSCI>edit params pump –pump是组名可以任取 
EXTRACT pump 
setenv (NLS_LANG = “AMERICAN_AMERICA.ZHS16GBK”)  #这里改为了UTF-8之后失败,使用这个配置是对的
PASSTHRU 
RMTHOST 192.168.2.78, MGRPORT 8839, COMPRESS 
RMTTRAIL ./dirdat/st 
DYNAMICRESOLUTION 
TABLE OGG.*; 
 增加抽取进程,开始进程之前目标端一定要配置好,否则会报错 
GGSCI> add ext pump,exttrailsource ./dirdat/st 
2.2.5. 生成def表定义文件 
 编辑defgen 
GGSCI> edit params defgen 
DEFSFILE ./dirdef/ogg.def 
USERID ogg, PASSWORD ogg 
table OGG.*; 
 在shell中执行如下命令,生成ogg.def,并把这个ogg.def 拷贝到目标端dirdef下 
./defgen paramfile ./dirprm/defgen.prm 
2.2.6. 目标端配置并开启 
 解压Ada文件并运行./ggsci 
 GGSCI>create subdirs 
 配置mgr 
GGSCI> edit param mgr 
PORT 8839 
DYNAMICPORTLIST 8840-8849 
 配置接收进程 
GGSCI> edit param ffwriter 
EXTRACT ffwriter 
SOURCEDEFS ./dirdef/ogg.def 
CUSEREXIT ./flatfilewriter.so CUSEREXIT PASSTHRU INCLUDEUPDATEBEFORES, PARAMS “./dirprm/ffue.properties” 
TABLE OGG.*; 
 把源端生成的ogg.def 拷贝到目标端dirdef文件夹下 
 把目标端下这个文件/AdapterExamples/file-writer/ ffue.properties拷贝到目标端dirprm文件夹下 
 启动mgr:start mgr 
 添加进程:ADD EXTRACT ffwriter, EXTTRAILSOURCE dirdat/st 
 启动进程:start ffwriter 
当看到mgr 和ffwriter状态都是running时,说明目标端配置完成,现在可以去调整源端进行测试

#在虚拟机上start失败,错误提示:

2018-11-01 02:52:30  INFO    OGG-01635  BOUNDED RECOVERY: reset to initial or altered checkpoint.

2018-11-01 02:52:30  INFO    OGG-01815  Virtual Memory Facilities for: BR
anon alloc: mmap(MAP_ANON) anon free: munmap
file alloc: mmap(MAP_SHARED) file free: munmap
target directories:
/data/ogg/oggserver/BR/EXT01. Bounded Recovery Parameter:
BRINTERVAL = 4HOURS
BRDIR = /data/ogg/oggserver 2018-11-01 02:52:30 INFO OGG-01851 filecaching started: thread ID: 140736980846336. 2018-11-01 02:52:30 INFO OGG-01815 Virtual Memory Facilities for: COM
anon alloc: mmap(MAP_ANON) anon free: munmap
file alloc: mmap(MAP_SHARED) file free: munmap
target directories:
/data/ogg/oggserver/dirtmp. 2018-11-01 02:52:30 WARNING OGG-01590 cm_vm_max: failed in call to: VMF_probe error code: 11 (Resource temporarily unavailable). Source Context :
SourceModule : [ggapp.cachemgr]
SourceID : [/scratch/aime/adestore/views/aime_adc4150378/oggcore/OpenSys/src/gglib/ggapp/cachemgr/cmgr_restore.c]
SourceFunction : [cm_init_vm_facilities]
SourceLine : [2450]
ThreadBacktrace : [13] elements
: [/data/ogg/oggserver/libgglog.so(CMessageContext::AddThreadContext()+0x1b) [0x7fffed936f2b]]
: [/data/ogg/oggserver/libgglog.so(CMessageFactory::CreateMessage(CSourceContext*, unsigned int, ...)+0x134) [0x7fffed930f84]]
: [/data/ogg/oggserver/libgglog.so(_MSG_ERR_CACHEOBJ_FUNCTION_FAILED(CSourceContext*, char const*, CMessageFactory::MessageDisposition)+0x30) [0x7fffed912aec]]
: [/data/ogg/oggserver/extract() [0x698242]]
: [/data/ogg/oggserver/extract() [0x6997b9]]
: [/data/ogg/oggserver/extract(CM_cache_init(pool_info*, char const*, extract_vals*)+0x58) [0x69a668]]
: [/data/ogg/oggserver/extract() [0x5e9b5a]]
: [/data/ogg/oggserver/extract(ggs::gglib::MultiThreading::MainThread::ExecMain()+0x60) [0x6c7e70]]
: [/data/ogg/oggserver/extract(ggs::gglib::MultiThreading::Thread::RunThread(ggs::gglib::MultiThreading::Thread::ThreadArgs*)+0x14d) [0x6c90ed]]
: [/data/ogg/oggserver/extract(ggs::gglib::MultiThreading::MainThread::Run(int, char**)+0xb1) [0x6c91d1]]
: [/data/ogg/oggserver/extract(main+0x3b) [0x5eb26b]]
: [/lib64/libc.so.6(__libc_start_main+0xfd) [0x3793e1ed1d]]
: [/data/ogg/oggserver/extract() [0x556f39]] 2018-11-01 02:52:30 ERROR OGG-01264 The call to the cm_vm_max() function from line 2450 in cm_init_vm_facilities() returned an unexpected value.

在物理机上却没有报错,目前猜测是分配内存失败。下面是物理机正常情况的日志:

2018-11-01 10:39:53  INFO    OGG-01851  filecaching started: thread ID: 140242236507904.

2018-11-01 10:39:53  INFO    OGG-01815  Virtual Memory Facilities for: COM
anon alloc: mmap(MAP_ANON) anon free: munmap
file alloc: mmap(MAP_SHARED) file free: munmap
target directories:
/data/oggdata/oggadapter_error/dirtmp. CACHEMGR virtual memory values (may have been adjusted)
CACHEPAGEOUTSIZE (default): 8M
PROCESS VM AVAIL FROM OS (min): 24.35G
CACHESIZEMAX (strict force to disk): 22.35G
CACHEVMPAGEOUTMAX: 64M 2018-11-01 10:39:53 WARNING OGG-01842 CACHESIZE PER DYNAMIC DETERMINATION (16G) LESS THAN RECOMMENDED: 64G (64bit system)
vm found: 24.35G
Check swap space. Recommended swap/extract: 128G (64bit system

2.2.7. 源端进程开启 
GGSCI> start extract 
GGSCI> start pump 
通过info all 查看进程状态,若进程显示running则正常运行,若是ABENDING 或者STOPPED则代表启动错误 
通过view report 是进程名)来查看运行日志,空格到最后会有报错日志

这个报错已经说得很清楚了可以通过下面命令来解决 
GGSCI>ADD EXTRAIL ./dirdat/st , extract pump 
至于ERROR OGG-10668 ABENDING 这个错误是代表着配置有错误,即只要有错误配置这个ERROR就会出现,所以不用管它,只需更改好正确配置,错误标志就会消失 
当配置的pump和extract进程都显示RUNNING时,即代表源端,目标端都已准备好

2.3. 测试OGG

 在pl/sql里插入ogg.test表一行数据,并点击提交commit

 然后在目标端dirout文件夹下就可以看到有文件传进来,文件是由时间戳来命名的

 Strings/cat/more/vim等命令查看该dsv文件,即可得到更改讯息事件id,事件类型,发生时间,表,表数据等,其中事件类型有三类(I:insert,D:delete, U:update),这个文件也可以通过datax配置path路径上云 
 GoldenGate File Adapter提供了两个文件,用来生成数据文件。其中properties中有多个文件格式控制属性,通过设置这些属性,即可以控制生成文件的格式,它的文件属性如下: 
dsvwriter.includecolnames=false 
是否在字段值前放置字段名称,缺省为false 
dsvwriter.files.onepertable=true 
每个表格各生成一个文件,还是所有数据放入一个文件,缺省为true 
dsvwriter.files.data.rootdir=./dirout 
数据文件输出目录 
dsvwriter.files.data.ext=_data.dsv 
已就绪的数据文件扩展名 
dsvwriter.files.data.tmpext=_data.dsv.temp 
处理中的数据文件 
dsvwriter.files.data.rollover.time=1800 
数据文件由“处理中”切换为“就绪”的最大时间(秒) 
dsvwriter.files.data.rollover.size=104857600 
数据文件由“处理中”切换为“就绪”的最大文件尺寸(KB) 
dsvwriter.files.data.norecords.timeout=1800 
当无记录写入时,最多等待时间(秒)即切换数据文件为“就绪”,缺省120秒 
dsvwriter.files.rolloveronshutdown=true 
当本属性为true时,如果Extract进程停止,则所有空白“处理中”文件被删除,所有有数据的“处理中”文件切换为“就绪”文件。当本属性为false时,如果Extract进程停止,则所有空白“处理中”文件被删除,所有有数据的“处理中”文件状态不变。 
dsvwriter.dsv.fielddelim.chars=| 
数据文件中的字段分隔符 
dsvwriter.dsv.linedelim.chars=\n 
数据文件中的行终结符号 
dsvwriter.dsv.quotes.chars=” 
数据文件中的引号符号 
dsvwriter.dsv.quotes.escaped.chars=”” 
数据文件中的escape符号 
dsvwriter.metacols=opcode,timestamp 
数据文件中每行数据之前的元数据: 
Opcode - I,U与D代表Insert, Update和Delete Timestamp - 记录的提交时间戳 
dsvwriter.metacols.opcode.insert.chars=I 
数据文件中代表Insert操作的字符 
dsvwriter.metacols.opcode.update.chars=U 
数据文件中代表Update操作的字符 
dsvwriter.metacols.opcode.delete.chars=D 
数据文件中代表Delete操作的字符 
dsvwriter.files.formatstring=pump_%s_%t_%d_%05n 
数据文件名字格式: %s - schema 
%t - table 
%d- timestamp 
%05n - 5位序号

2.4. 备注

GGSCI 常用的操作有edit params * –编辑mgr,pump,extract这些文件 
start mgr –启动mgr 
start extract –启动某进程 
view report * –查看进程日志 
view params * –查看mgr等的配置信息 
info all –查看信息

参考:

https://www.waitig.com/oggadapters安装部署配置文档.html

OGG到OGGAdapter配置详情-从Oracle直接抽取成csv文件的更多相关文章

  1. 从oracle导出数据成csv,将csv导入mongodb问题

  2. oracle导出多CSV文件的靠谱的

    oracle导出多CSV文件的问题 ---------------------------------------------------------------------- 用ksh脚本从orac ...

  3. 【翻译自mos文章】OGG的集成捕捉模式支持Oracle database标准版么?

    OGG的集成捕捉模式支持Oracle database标准版么? 来源于: Does OGG 11.2.1 Integrated Capture Work with Oracle Database S ...

  4. 【OGG】OGG的单向复制配置-支持DDL(二)

    [OGG]OGG的单向复制配置-支持DDL(二) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的 ...

  5. Linux下oracle11gR2系统安装到数据库建立配置及最后oracle的dmp文件导入一站式操作记录

    简介 之前也在linux下安装过oralce,可每次都是迷迷糊糊的,因为大脑一片空白,网上随便看见一个文档就直接复制,最后搞了乱七八糟,虽然装上了,却乱得很,现在记录下来,希望能给其他网上朋友遇到问题 ...

  6. Tomcat7配置数据源(Oracle)

    修改../conf/content.xml <?xml version='1.0' encoding='utf-8'?> <!-- The contents of this file ...

  7. mysql安装与配置详情

    一.概述 MySQL版本:5.6.43 下载地址:mysql-installer-community-5.6.43.0,提取码:tgmk 客户端工具:NavicatforMySQL 下载地址:Navi ...

  8. spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置

    spring BasicDataSource 数据源配置 sqlserver数据库 oracle数据库 mysql数据jdbc配置 jdbc.properties 文件信息如下: ---------- ...

  9. webpack4.x配置详情

    webpack打包工具现在非常流行,熟悉并且能够进行配置也变得非常重要.在学习和使用的过程中遇到过很多的问题,希望能够让自己记录下来,巩固自己的学习. 1.创建文件目录 先在自己的常用盘中(我自己的项 ...

随机推荐

  1. 同时执行2条不同sql

    select * from  a: select *from b; 用分号结束.

  2. ODP.NET Oracle12.1版本免安装发布(IIS WebServices)

    1.ODP.NET必须的DLL OCI.DLL Oracle.DataAccess.dll OraOps12.dll msvcr100.dll oraociei12.dll oraons.dll 2. ...

  3. windows库

    1.windows库的存在方式 1.1.静态库:不能被加载的程序,可以理解为目标程序的归档:*.lib. 1.2.动态库:是可以被加载的程序:*.dll. 2.静态库 2.1.静态库的特点    目标 ...

  4. 20145103 《Java程序设计》第7周学习总结

    20145103<Java程序设计>第7周学习总结 教材学习内容总结 第十三章 时间与日期 13.1 认识时间与日期 就目前来说,即使标注为GMT(无论是文件说明,或者是API的日期时间字 ...

  5. 洛谷 P2015 二叉苹果树(codevs5565) 树形dp入门

    dp这一方面的题我都不是很会,所以来练(xue)习(xi),大概把这题弄懂了. 树形dp就是在原本线性上dp改成了在 '树' 这个数据结构上dp. 一般来说,树形dp利用dfs在回溯时进行更新,使用儿 ...

  6. spring mvc 之初体验

    Spring MVC最简单的配置 配置一个Spring MVC只需要三步: 在web.xml中配置Servlet: 创建Spring MVC的xml配置文件: 创建Controller和View &l ...

  7. 在centos7上安装部署hadoop2.7.3和spark2.0.0

    一.安装装备 下载安装包: vmware workstations pro 12 三台centos7.1 mini 虚拟机 网络配置NAT网络如下: 二.创建hadoop用户和hadoop用户组 1. ...

  8. monkey测试小记

    本篇中不记录环境搭建,只是介绍一些经验和小秘诀吧. 一.使用安卓模拟器进行测试. 在刚刚接触到monkey测试的时候,用的真机进行测试,点击几万次甚至更多的时候,发现系统变慢了.也许是错觉,但是系统经 ...

  9. Sorl初始

    Sorl是什么 ? Solr是Apache下的一个开源项目,使用Java基于Lucene开发的全文检索服务:是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可 ...

  10. CSS元素隐藏的11种方法

    { display: none; /* 不占据空间,无法点击 */ } { visibility: hidden; /* 占据空间,无法点击 */ } { position: absolute; cl ...