欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

10.Oracle Golden Date(ogg)的搭建和管理

程序员文章站 2022-05-25 16:25:02
一. GoldenGate 概述 GoldenGate现在是业内成熟的数据容灾与复制产品;GoldenGate是一种基于日志的结构化数据复制方式,它通过解析源数据库在线日志或归档日志获得数据的增删改变化(数据量只有日志的四分之一左右),再将这些变化应用到目标数据库,实现源数据库与目标数据库同步、双活 ......

一. 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的日志信息, 目标端根据源端传送过来的日志信息进行重塑,实现源端-目标端数据同步,可以参考下图。

10.Oracle Golden Date(ogg)的搭建和管理

  只有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实战》或者查看官方文档