一. goldengate 概述
goldengate现在是业内成熟的数据容灾与复制产品;goldengate是一种基于日志的结构化数据复制方式,它通过解析源数据库在线日志或归档日志获得数据的增删改变化(数据量只有日志的四分之一左右),再将这些变化应用到目标数据库,实现源数据库与目标数据库同步、双活。
二. goldengate 搭建
目标在linux系统下安装oracle;利用goldengate 实现数据同步;可复制dml和ddl操作
环境如下:本环境目标端是源端的克隆;步骤请参考第8篇
源端 | 目标端 | |
操作系统 | linux6.5 | linux6.5 |
ip | 192.168.1.235 | 192.168.1.221 |
数据库版本 | 11.2.0.4.0 | 11.2.0.4.0 |
goldengate版本 | 11.2.1.0.1 | 11.2.1.0.1 |
2.1 创建 goldengate 操作系统用户
两台服务器都需要创建 ogg 操作系统用户(此步骤非必须,也可以使用oracle用户安装)。
useradd -u 1003 -g oinstall -g dba ogg passwd ogg
2.2 修改 goldengate 系统用户环境变量
source /home/oracle/.bash_profile # or export oracle_base=/u01/app export oracle_home=$oracle_base/oracle export oracle_sid=ora221 export path=$path:$home/bin:$oracle_home/bin/data/ogg export nls_lang=american_america.utf8 export ld_library_path=$oracle_home/lib:$ld_library_path alias sqlplus='rlwrap sqlplus' alias ggsci='rlwrap ggsci'
2.3 创建 goldengate 安装目录
两台服务器都需要做同样的操作。
mkdir -p /data/ogg chown -r ogg:oinstall /data/ogg
2.4 安装 goldengate
两台服务器都需要操作。
unzip fbo_ggs_linux_x64_ora11g_64bit.tar.zip tar -xvf fbo_ggs_linux_x64_ora11g_64bit.tar -c /data/ogg
登录 goldengate
执行ggsci命令即可。
2.5 建立 goldengate表空间
两台服务器都需要操作: 建议使用单独的表空间存放 goldengate 数据
create tablespace tsp_ogg datafile '/data/oracle/data/ogg01.dbf' size 100m autoextend on;
2.6 创建 goldengate 用户并赋权
两台服务器都需要操作
create user ogg identified by ogg default tablespace tsp_ogg; grant dba to ogg; grant create table,create sequence to ogg;
2.7 配置数据库
由于 goldengate 的原理是根据 oracle 的日志进行抽取复制。为了保证日志的完整性;需要打开 oracle 数据库归档;
alter system set log_archive_dest_1 = 'location=/data/arch' scope = spfile; shutdown immediate; startup mount alter database archivelog; alter database open;
还需要开启 force log 和 supplemental log
alter database force logging; alter database add supplemental log data;
最后查询结果如下:
sql> select name,open_mode,force_logging,supplemental_log_data_min from v$database; name open_mode for suppleme --------- -------------------- --- -------- ora235 read write yes yes
2.8 运行 goldengate 支持 ddl 脚本
如果要让 goldengate 支持ddl操作,还需要额外运行几个脚本,这些脚本是ogg带的而不是 oracle 带的,在 goldengate 的安装目录都可以找到,源端与目标端都需要运行,如下:
@marker_setup.sql @ddl_setup.sql @role_setup.sql @ddl_enable.sql
在11.2.0.4.0版本;需要设置
alter system set enable_goldengate_replication = true scope=both;
三. goldengate单向复制流程配置
现在就可以正式配置ogg了,在配置ogg之前,先看下ogg的复制流程,ogg和其他传统复制软件一样,也是通过源端捕获/挖掘oracle的日志信息, 目标端根据源端传送过来的日志信息进行重塑,实现源端-目标端数据同步,可以参考下图。
只有commit之后的日志信息才会被capture进程捕获,未提交的事务ogg不会捕获。
3.1 创建 goldengate 的工作目录
源端和目标端都需要创建,登录goldengate,只需要执行create subdirs命令就可以了。
[ogg@oracle235 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 11g on apr 23 2012 08:32:14 copyright (c) 1995, 2012, oracle and/or its affiliates. all rights reserved. ggsci (oracle235) 1> create subdirs creating subdirectories under current directory /data/ogg parameter files /data/ogg/dirprm: already exists report files /data/ogg/dirrpt: created checkpoint files /data/ogg/dirchk: created process status files /data/ogg/dirpcs: created sql script files /data/ogg/dirsql: created database definitions files /data/ogg/dirdef: created extract data files /data/ogg/dirdat: created temporary files /data/ogg/dirtmp: created stdout files /data/ogg/dirout: created
3.2 添加 checkpoint 表
为了保证源和目标端在传数据的时候不会重复或者少传,在目标端添加checkpoin表。
操作如下:
ggsci (oracle235) 2> edit params ./globals checkpointtable ogg.ggschkpt ggsci (oracle235) 3> exit [ogg@oracle235 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 11g on apr 23 2012 08:32:14 copyright (c) 1995, 2012, oracle and/or its affiliates. all rights reserved. ggsci (oracle235) 1> dblogin userid ogg, password ogg successfully logged into database. ggsci (oracle235) 2> add checkpointtable no checkpoint table specified, using globals specification (ogg.ggschkpt)... successfully created checkpoint table ogg.ggschkpt.
3.3 配置 mgr 进程组
在源端和目标端都必须运行一个mgr进程组;负责启动goldengate进程,以及启动动态进程,管理trail文件,错误信息。
运行ggsci程序;输入 “edit params mgr” 编辑参数文件:
[ogg@oracle235 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 11g on apr 23 2012 08:32:14 copyright (c) 1995, 2012, oracle and/or its affiliates. all rights reserved. ggsci (oracle235) 1> edit params mgr
输入内容如下:
port 7809 dynamicportlist 7800-8000 autorestart extract *, waitminutes 2, resetminutes 5 purgeoldextracts /data/ogg/dirdat, usecheckpoints, minkeepdays 3
- port:指定服务监听端口;默认端口为7809
- dynamicportlist:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的collector、replicat、ggsci进程通信也会使用这些端口
- autorestart:自动重启参数设置:本处设置表示每2分钟尝试重新启动所有extract进程;以后5分钟清零。
- purgeoldextracts:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除
启动mgr进程
ggsci (oracle235) 2> start mgr manager started. ggsci (oracle235) 3> info mgr manager is running (ip port oracle235.7809).
3.4 源端配置 extract 进程
负责抓取需要传输数据;下面在源端配置抽取进程。
ggsci (oracle235) 1> edit params eora_1 extract eora_1 setenv (nls_lang=american_america.utf8) userid ogg, password ogg exttrail /data/ogg/dirdat/aa table lottu.*;
在源端用 add extract 命令创建 extract 组;用add exttrail 命令创建本地 trail 文件
ggsci (oracle235) 2> add extract eora_1, tranlog, begin now extract added. ggsci (oracle235) 3> add exttrail /data/ogg/dirdat/aa, extract eora_1, megabytes 5 exttrail added.
启动 extract 进程;在 ggsci 中:可以使用 add, alter, cleanup, delete, info, kill命令管理extract进程
ggsci (oracle235) 4> start extract eora_1 sending start request to manager ... extract eora_1 starting ggsci (oracle235) 5> info eora_1 extract eora_1 last started 2018-08-23 00:52 status running checkpoint lag 00:06:20 (updated 00:00:04 ago) log read checkpoint oracle redo logs 2018-08-23 00:46:36 seqno 12, rba 34652672 scn 0.0 (0)
3.5 配置 pump 进程
extract进程负责将抓取的数据写入本地trail文件;而需要pump进程把trail文件传输到目标端。使用 edit params pora_1 添加配置文件
ggsci (oracle235) 6> edit params pora_1 extract pora_1 setenv (nls_lang=american_america.utf8) passthru rmthost 192.168.1.221, mgrport 7809 rmttrail /data/ogg/dirdat/pa table lottu.*;
用 add extract 指定本地 trail 文件
ggsci (oracle235) 7> add extract pora_1, exttrailsource /data/ogg/dirdat/aa extract added.
用 add rmttrail 指定远程 trail 文件
ggsci (oracle235) 8> add rmttrail /data/ogg/dirdat/pa, extract pora_1, megabytes 5 rmttrail added.
启动 pump 进程
ggsci (oracle235) 9> start extract pora_1 sending start request to manager ... extract pora_1 starting ggsci (oracle235) 11> info all program status group lag at chkpt time since chkpt manager running extract running eora_1 00:00:00 00:00:07 extract running pora_1 00:00:00 00:00:02
3.6 配置目标端的 replicat 进程
replicat 进程运行于目标端;负责将源端传过来的 trail 文件;在目标端数据库应用。实现源端和目标端数据同步。
ggsci (oracle221) 2> edit params rora_1 replicat rora_1 setenv (nls_lang=american_america.utf8) userid ogg, password ogg handlecollisions assumetargetdefs discardfile /data/ogg/dirrpt/rora_aa.rpt, append map lottu.*, target lottu.*;
在目标端使用 add replicat 添加 replicat 进程
ggsci (oracle221) 8> add replicat rora_1, exttrail /data/ogg/dirdat/pa replicat added.
使用 start replicat 启动 replicat 进程
ggsci (oracle221) 11> start replicat rora_1 sending start request to manager ... replicat rora_1 starting ggsci (oracle221) 12> info all program status group lag at chkpt time since chkpt manager running replicat running rora_1 00:00:00 00:00:00
四. 配置 ddl 同步
在前面我们已经配置 goldengate 支持ddl脚本;其中有创建 trigger;ddl跟dml 复制机制不同;dml复制是基于redo log。其ddl复制原理是基于trigger;它扑捉ddl操作记录在中间表;extract读取中间表ddl操作;pump投递到目标端;目标端在应用ddl语句。
4.1 运行 goldengate 支持 ddl 脚本
前面已级操作 ;略。
4.2 关闭 oracle 的 recyclebin
在执行上一步操作有一个温馨提示:‘note: for an oracle 10g source, the system recycle bin must be disabled. for oracle 11g and later, it can be enabled.’ goldengate10g ddl不支持oracle回收站功能;本文提供的goldengate版本是11g;该操作也略;
关闭oracle回收站功能
alter system set recyclebin=off scope=both;
4.3 源端配置
指定ddl复制的用户
ggsci (oracle235) 19> view params ./globals ggschema ogg
停mgr,extract进程;
配置extract配置文件;在配置文件添加一下内容:
ddl include all ddloptions addtrandata,report
4.4 目标端配置
停mgr,replicat进程;
配置replicat配置文件;在配置文件添加一下内容:
ddl include mapped ddloptions report
配置完成;在重启各进程进行验证。
五. 总结
本文只涉及到 goldengate 的单向复制的配置和安装;其实goldengate还有很多架构:例如1对多同步,级联同步;双向同步等等。根据场景不同应用不同架构;还有goldengate日常维护,错误分析,监控,以及性能优化调整。大家可以阅读《企业级it运维宝典之goldengate实战》或者查看官方文档