环境描述
主机 | 角色 | 数据库版本 | 操作系统 | 数据库名称 | 管理员名称口令 |
192.168.0.201 | 源库 | oracle19c | Oracle Linux7.9 | PROD | sys/Cloud_4u |
192.168.0.111 | 目标库 | oracle19c | Oracle Linux7.9 | PROD | sys/Cloud_4u |
ogg版本:213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip
部署架构简介
最新的OGG架构目前有经典模式架构和微服务模式架构。本次部署采用的是经典模式,且为了理解它整个的运行机制和模式,采用的是非图形化模式部署(21版已经提供了一个web界面的管理图形界面,但是实际操作下来,对于我这样的新手,排查问题是个比较困难的事情,也不清楚其内在联系)。经典模式下,OGG和数据库部署在同一个节点,所以需要在每台数据库上分别配置OGG和数据库。作为入门,这里采用的是单向数据同步的架构,即单一源同步到单一目标,目标不同步到源的架构。OGG还支持多种不同的架构,如双向同步,一源多目标登复杂的场景。
参考文献
Oracle GoldenGate 12c Installation And Configuration -1 - IT Tutorial
Oracle GoldenGate 12c Installation And Configuration -2 - IT Tutorial
Oracle GoldenGate 12c Installation And Configuration -3 - IT Tutorial
Oracle Goldengate Step by Step Replication -1 - IT Tutorial
Oracle Goldengate Step by Step Replication -2 - IT Tutorial
操作流程
- 环境准备:创建虚拟机;安装操作系统;服务器网络设置;安装数据库软件。
- OGG软件安装(第一步,第二步可以先在一台机器上操作,目标服务器直接克隆源服务器,再稍作修改即可)
- 在源库和目标库上各自创建ogg对象(创建完全相同的对象)
- 源库上的OGG管理服务和提取服务,pump服务配置
- 目标库上的OGG管理服务和复制服务配置
- 验证数据同步
环境准备:
OGG安装(源和目标,用oracle用户操作)然后执行:
第一步 创建安装目录(/u01/app/ogg21),解压安装软件
# OGG安装目录
mkdir /u01/app/ogg21
# 解压安装包到/home/oracle/
unzip 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip -d /home/oracle/
cd /home/oracle/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1/response
# 备份后修改静默安装属性文件
cp oggcore.rsp oggcore-setup.rsp
vim oggcore-setup.rsp
# 修改下面几项,例如:
INSTALL_OPTION=ora21c
SOFTWARE_LOCATION=/u01/app/ogg21
START_MANAGER=false
# 保存退出(:wq)
第二步 执行静默安装
cd /home/oracle/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1
./runInstaller -silent -responseFile /home/oracle/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1/response/oggcore-setup.rsp
提示:OGG软件将安装在/u01/app/ogg21目录下
第三步 配置环境变量
# 长期生效可以编辑~/.bashrc
vi ~/.bashrc
export OGG_HOME=/u01/app/ogg21
export LD_LIBRARY_PATH=/u01/app/ogg21:$LD_LIBRARY_PATH
export PATH=/u01/app/ogg21:$PATH
# 数据库环境变量,如果安装数据库的时候已经配置了,这里可以省去
export ORACLE_SID=PROD
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
# 重新加载环境变量
source ~/.bashrc
第四步 验证
# oracle用户
cd $OGG_HOME
ggsci
# 成功登录说明安装完成
# 登录参考信息
Oracle GoldenGate Command Interpreter for Oracle
Version 21.3.0.0.0 OGGCORE_21.3.0.0.0_PLATFORMS_210728.1047_FBO
Oracle Linux 7, x64, 64bit (optimized), Oracle Database 21c and lower supported versions on Jul 29 2021 03:59:23
操作系统字符集标识为 UTF-8。
Copyright (C) 1995, 2021, Oracle and/or its affiliates. All rights reserved.
创建OGG对象(源库+目标库分别执行)
第一步 OGG增量同步需要Oracle端开启归档日志和补充日志:
su - oracle
# 创建归档目录(可选)
# mkdir /home/oracle/ora_PROD_archive
sqlplus / as sysdba
# 查看归档是否开启
archieve log list
# Automatic archival Enabled 是为开启,否则执行下面的开启归档脚本
-- 开启补充日志
SHUTDOWN IMMEDIATE
STARTUP MOUNT
-- 开启归档(可选)
-- ALTER SYSTEM SET log_archive_dest='/home/oracle/ora_PROD_archive';
-- ALTER DATABASE ARCHIVELOG;
ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE;
ALTER DATABASE FORCE LOGGING;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
ALTER DATABASE OPEN;
第二步 创建OGG专用账户和表空间,并授权
--获取数据文件目录(可选)
--select name from v$datafile;
--1. 创建ogg用户专用表空间(ggts),主要要打开闪回功能
CREATE TABLESPACE ggts DATAFILE '/u01/app/oracle/oradata/PROD/ggts01.dbf' SIZE 10M AUTOEXTEND ON NEXT 1024M MAXSIZE UNLIMITED
LOGGING
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
--2. 创建ogg用户(gguser)
CREATE USER gguser IDENTIFIED BY Cloud_4u DEFAULT TABLESPACE ggts
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
ACCOUNT UNLOCK;
--3. 给gguser授权
GRANT RESOURCE,CONNECT ,SELECT_CATALOG_ROLE ,dba TO gguser;
ALTER USER gguser DEFAULT ROLE ALL;
GRANT CREATE SESSION TO gguser;
GRANT ALTER SESSION TO gguser;
GRANT SELECT ANY TRANSACTION TO gguser;
GRANT SELECT ANY DICTIONARY TO gguser;
GRANT FLASHBACK ANY TABLE TO gguser;
GRANT SELECT ANY TABLE TO gguser;
GRANT UNLIMITED TABLESPACE TO gguser;
-- ggts表空间配额不限制
ALTER USER gguser QUOTA UNLIMITED ON ggts;
-- 闪回对象操作权限
GRANT EXECUTE ON SYS.DBMS_FLASHBACK TO gguser;
GRANT FLASHBACK ON SYS.USER_SOURCE TO gguser;
--4. ogg管理员权限
exec dbms_goldengate_auth.grant_admin_privilege('gguser');
在所有节点上完成上述脚本操作后,ogg所需的基础环境就准备好了。接下来可以开始分别在源库和目标库上配置OGG的各种服务。
OGG源库配置
配置流程大纲
- 创建OGG子目录(这个只在首次配置时需要)
- 创建OGG管理服务
- 创建Extract服务
- 创建Pump服务
首先打开GGSCI工具
cd $OGG_HOME
ggsci
第一步,创建子目录
这是初始化步骤,只需要第一次进入GGSCI执行
GGSCI > create subdirs
正在当前目录 /u01/app/ogg21 下创建子目录
参数文件 /u01/app/ogg21/dirprm:已存在。
报表文件 /u01/app/ogg21/dirrpt:已存在。
检查点文件 /u01/app/ogg21/dirchk:已存在。
进程状态文件 /u01/app/ogg21/dirpcs:已存在。
SQL 脚本文件 /u01/app/ogg21/dirsql:已存在。
数据库定义文件 /u01/app/ogg21/dirdef:已存在。
提取数据文件 /u01/app/ogg21/dirdat:已存在。
临时文件 /u01/app/ogg21/dirtmp:已存在。
身份证明存储文件 /u01/app/ogg21/dircrd:已存在。
主加密密钥 Wallet 文件 /u01/app/ogg21/dirwlt:已存在。
转储文件 /u01/app/ogg21/dirdmp:已存在。
* 提示:/u01/app/ogg21/dirdat将作为我们的提取文件主目录
第二步,配置manager服务
编辑manager配置文件:
GGSCI > edit param mgr
# 内容如下:
--Deletion interval of old trail file
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS
-- Autorestart Parameters
AUTORESTART ER *, RETRIES 3, WAITMINUTES 5, RESETMINUTES 30
-- Lag control parameters
LAGCRITICALMINUTES 20
LAGINFOMINUTES 20
LAGREPORTMINUTES 20
启动服务
GGSCI > start manager
# 可选,关闭manager
# GGSCI > stop manager
# 查看服务配置
# view params mgr
# 查看服务运行日志
# view report mgr
第三步,配置Extract服务
首先用ogg用户(gguser)连接到数据库
# GGSCI中的操作,需要用户连接到数据库,这个用户要有足够权限。
GGSCI >DBLOGIN USERID gguser@host201:1521/PROD PASSWORD Cloud_4u
3.1 编辑Extract配置文件(ex201)
文件名就是组名(最多8个字符),与对应Extract组名相同,编辑完后,$OGG_HOME/dirprm目录下将创建名为ext201.prm的文本文件:
-- Extract组名
EXTRACT ex201
-- 客户端的编码,如果oracle字符串编码不是UTF8会转为UTF8
SETENV (NLS_LANG="AMERICAN_AMERICA.UTF8")
-- 连接Oracle服务器的信息,最好OGG与Oracle安装在同一台机器上
USERID gguser@host201:1521/prod, PASSWORD Cloud_4u
-- discard文件,出错时可查看详细信息
DISCARDFILE /u01/app/ogg21/dirrpt/ex201.dsc, APPEND, MEGABYTES 100
-- Trail文件路径,会生成多个Trail文件,文件名为前缀ex+文件编号
EXTTRAIL /u01/app/ogg21/dirdat/ex
--支持truncate
GETTRUNCATES
GETUPDATEBEFORES
-- 捕获delete、update不使用压缩方式
NOCOMPRESSDELETES FETCHMISSINGCOLUMNS
NOCOMPRESSDELETES
NOCOMPRESSUPDATES
WARNLONGTRANS 1H, CHECKINTERVAL 10M
-- 需要捕获的表,每个表一行,全部列出,包含schema名
TABLE HR.EMPLOYEES;
配置文件更多参数说明可以参考:
Summary of Oracle GoldenGate Parameters
3.2 创建Extract组
GGSCI>ADD EXTRACT ex201,TRANLOG,BEGIN NOW
# 或者指定捕获时间点
# GGSCI>ADD EXTRACT ex201,TRANLOG,BEGIN 2022-03-25 17:00
# 可选:删除Extract组:
# GGSCI >DELETE EXTRACT ex201
3.3 注册Extract组
GGSCI >register extract ex201, database
# 否则启动Extract时,会有ERROR OGG-02022 Logmining server does not exist on this Oracle database
# 可选:取消注册Extract组:
# GGSCI >unregister extract ex201, database
3.4 创建Trail文件
GGSCI >ADD EXTTRAIL /u01/app/ogg21/dirdat/ex, EXTRACT ex201, MEGABYTES 100
# 可选,删除Trail文件:
# GGSCI >DELETE EXTTRAIL /u01/app/ogg21/dirdat/ex
# rm /u01/app/ogg21/dirdat/ex*
3.5 启动Extract服务
GGSCI >start extract ex201
# 可选
# 停止服务
# GGSCI >stop extract ex201
#查看状态:
# GGSCI >info ex201
# GGSCI >stats ex201
# GGSCI >status ex201
#如果成功运行,会在本地Trail路径下应该生成文件,如果出错,查看错误原因:
# GGSCI >view report ex201
第四步,配置Pump服务
首先用ogg用户(gguser)连接到数据库
# GGSCI中的操作,需要用户连接到数据库,这个用户要有足够权限。
GGSCI >DBLOGIN USERID gguser@host201:1521/PROD PASSWORD Cloud_4u
4.1 编辑Data Pump配置文件
文件名随便取(8个字符以内),组名和文件名相同
GGSCI >edit param pump201
# 编辑以下内容
-- Data Pump组名称
EXTRACT pump201
-- 不处理数据,直接转发给目标端
PASSTHRU
-- 目标端IP和manager监听端口(manager服务中设置的)
RMTHOST 192.168.0.111, MGRPORT 7809
-- 目标端Trail文件所在目录(源端和目标端目录结构一致可以省去很多麻烦)
RMTTRAIL /u01/app/ogg21/dirdat/ex
-- 需要转发给目的端的表名,每个表一行,包括schema名称
TABLE HR.EMPLOYEES;
# :wq 保存退出
4.2 创建Data Pump组
Data Pump进程也是一种Extract进程,只因配置不同而功能不同。
GGSCI >ADD EXTRACT pump201, EXTTRAILSOURCE /u01/app/ogg21/dirdat/ex
# EXTTRAILSOURCE指前面ex201的Trail文件
# 可选:删除Extract组:
# GGSCI >DELETE EXTRACT pump201
4.3 创建远程(目标端)Trail文件路径
Data Pump从本地Trail文件提取的变更,保存到远程Trail文件路径的位置,一个本地(源端)Trail文件可以分成多个远程Trail文件,在远程用多个Replicat同步,以增大速度。
GGSCI >ADD RMTTRAIL /u01/app/ogg21/dirdat/ex, EXTRACT pump201, MEGABYTES 100
# 可选,删除Data Pump组:DELETE EXTRACT pump201
# 删除远程Trail文件:
# DELETE RMTTRAIL /u01/app/ogg21/dirdat/ex
# rm /u01/app/ogg21/dirdat/ex*
4.4 启动:(注意:这一步要先启动目标端的manager)
GGSCI >start extract pump201
# 可选,查看状态:
# GGSCI >stats pump201
# GGSCI >status pump201
# GGSCI >info pump201
#如果成功运行,在远程的Trail目录下应该生成文件,如果出错,查看错误内容:
# GGSCI >view report pump201
OGG目标库设置
配置流程大纲
- 创建子目录
- 配置和启动manager服务
- 配置GLOBALS和检查点对象
- 配置和启动REPLICAT服务
cd $OGG_HOME
ggsci
第一步,创建子目录
这是初始化步骤,只需要第一次进入GGSCI执行
GGSCI > create subdirs
第二步,配置和启动manager服务
编辑manager配置文件:
GGSCI > edit param mgr
# 内容如下:
PORT 7809
--Deletion interval of old trail file
PURGEOLDEXTRACTS ./dirdat/*, USECHECKPOINTS
-- Autorestart Parameters
AUTORESTART ER *, RETRIES 3, WAITMINUTES 5, RESETMINUTES 30
-- Lag control parameters
LAGCRITICALMINUTES 20
LAGINFOMINUTES 20
LAGREPORTMINUTES 20
提示:这里的配置内容和源端保持一致可以减少很多麻烦。
启动服务
GGSCI > start manager
# 可选,关闭manager
# GGSCI > stop manager
# 可选,查看manager运行日志
# GGSCI > view report manager
第三步,配置GLOBALS
GGSCI (ogg2) 5> edit params ./GLOBALS
# 内容
ggschema gguser
checkpointtable gguser.checkpoint
连接目标库创建检查表
GGSCI (ogg2) 7> dblogin userid gguser@host111:1521/PROD PASSWORD Cloud_4u
GGSCI (ogg2) 8> add trandata hr.employees
GGSCI (ogg2 as ) 9> add checkpointtable gguser.checkpoint
第四步,配置replicat文件
GGSCI (host111) 2> edit params re201
# 加入下面的内容
replicat re201
SETENV (ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1)
SETENV (ORACLE_SID=PROD)
USERID gguser@host111:1521/prod, PASSWORD Cloud_4u
STATOPTIONS, RESETREPORTSTATS
REPORTCOUNT EVERY 1 MINUTES, RATE
REPORT AT 00:00
REPORTROLLOVER ON SUNDAY
DISCARDFILE /u01/app/ogg21/dirrpt/re201.dsc,APPEND,MEGABYTES 100
ASSUMETARGETDEFS
DBOPTIONS NOSUPPRESSTRIGGERS
-- dynamicresolution
MAP hr.employees, target hr.employees,colmap(usedefaults);
4.1 添加replicat组
GGSCI (ogg2 as ) 13> add replicat re201,exttrail /u01/app/ogg21/dirdat/re,checkpointtable gguser.checkpoint
4.2 启动replicat
GGSCI (ogg2) 1> start replicat re201
#可选,停止:GGSCI >stop replicat re201
#查看状态:
# GGSCI >info re201
# GGSCI >stats re201
# GGSCI >status re201
#如果成功运行,会在本地Trail路径下应该生成文件,如果出错,查看错误原因:
# GGSCI >view report re201
# GGSCI (ogg2) 2> info all
验证
源库
update hr.employees set salary=5000 where employee_id=200;
commit;
select salary from hr.employees where employee_id=200;
salary
--------
5000
目标库
select salary from hr.employees where employee_id=200;
salary
--------
5000
如果能同步过来就说明搭建成功。