前言
Oracle GoldenGate Microservice Architecture(以下简称为OGG MA) 12.3推出的架构。该架构基于Rest API,通过web就可以完成ogg的配置和监控。传统架构的ogg监控需要安装ogg monitor agent,配置起来也非常麻烦。
一、环境介绍
本环境数据库使用oracle 19.11,启用多租户特性,建立了两个pdb,pdb1作为源端,pdb2作为目标端。
OGG使用19.1.0.4版本。
二、安装OGGMA
创建ogg使用的目录
[root@ogg-ora19c ~]# mkdir /ogg [root@ogg-ora19c ~]# cd /ogg [root@ogg-ora19c ~]# mkdir oggma ogginst
oggma用于存放可执行文件
ogginst存放OGGMA的服务管理器(Service Manager)和部署(Deployment)文件。之所以这样是方便以后OGGMA跨版本升级,将可执行文件安装到其他目录,然后指向原有的部署即可。
将所有者更改为oracle
[root@ogg-ora19c ~]#chown oracle:oinstall /ogg [root@ogg-ora19c ~]#chmod -R 775 /ogg
解压安装文件
[oracle@ogg-ora19c ~]$unzip 191004_fbo_ggs_Linux_x64_services_shiphome.zip
安装OGGMA
[oracle@ogg-ora19c ~]$ cd fbo_ggs_Linux_x64_services_shiphome/Disk1/ [oracle@ogg-ora19c Disk1]$ ls install response runInstaller stage [oracle@ogg-ora19c Disk1]$ ./runInstaller 正在启动 Oracle Universal Installer... 检查临时空间: 必须大于 120 MB。 实际为 77296 MB 通过 检查交换空间: 必须大于 150 MB。 实际为 17199 MB 通过 检查监视器: 监视器配置至少必须显示 256 种颜色。 实际为 16777216 通过 准备从以下地址启动 Oracle Universal Installer /tmp/OraInstall2021-05-10_10-03-29PM. 请稍候...





三、配置OGGMA服务
使用OGGCA配置服务管理器和部署
[oracle@ogg-ora19c Disk1]$ cd /ogg/oggma/bin [oracle@ogg-ora19c bin]$ ./oggca.sh












新开一个root的窗口,执行该脚本
[root@ogg-ora19c ~]# /ogg/ogginst/sm/bin/registerServiceManager.sh Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. ---------------------------------------------------- Oracle GoldenGate Install As Service Script OGG_HOME=/ogg/oggma OGG_CONF_HOME=/ogg/ogginst/sm/etc/conf OGG_VAR_HOME=/ogg/ogginst/sm/var OGG_USER=oracle Running OracleGoldenGateInstall.sh... Created symlink from /etc/systemd/system/multi-user.target.wants/OracleGoldenGate.service to /etc/systemd/system/OracleGoldenGate.service.

OGGMA配置完成,现在打开浏览器就可以访问OGGMA了。
四、配置oracle数据库
4.1 配置TNS
无论源端还是目标端,都建议为cdb和pdb都建立单独的tns, 在ogg配置里连接使用TNS
vi $ORACLE_HOME/network/admin/tnsnames.ora CDB = ( DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=ogg-ora19c.moon.com) (PORT=1521) ) (CONNECT_DATA= (SERVICE_NAME=orcl) ) ) PDB1 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ogg-ora19c)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb1) ) ) PDB2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = ogg-ora19c)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = pdb2) ) )
4.2 开启数据库对golengate的支持
sqlplus / as sysdba
SQL>ALTER SYSTEM SET enable_goldengate_replication = TRUE;
该步骤需要分别在源端和目标端执行,由于这里pdb1和pdb2在一个cdb,直接在cdb执行一次即可。
4.3 源端配置数据库
4.3.1配置归档模式
如果数据库不是归档模式,需要将数据库设置为归档模式。源端必须开启归档模式,目标端可以不用归档模式。
先关闭数据库
$sqlplus / as sysdba SQL>shutdown immediate
启动数据库到mount
$sqlplus / as sysdba SQL>startup mount
修改数据库为归档模式
SQL>alter database archivelog;
创建一个目录用于存放归档路径
# mkdir /arch
# chown oracle:oinstall /arch
# chmod 775 /arch
设置数据库的归档参数
SQL>ALTER SYSTEM SET log_archive_dest_1 = 'location=/arch';
启动数据库到open
SQL>alter database open;
4.3.2 开启FORCE LOGGING
数据库启用force logging
SQL>ALTER DATABASE FORCE LOGGING;
4.3.3在cdb添加附加日志
sqlplus / as sysdba
SQL>ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
4.3.4在pdb添加附加日志
sqlplus / as sysdba
SQL>alter session set container=pdb1;
SQL>ALTER PLUGGABLE DATABASE ADD SUPPLEMENTAL LOG DATA;
4.3.5创建OGG用户
先为ogg用户创建表空间,这里用的多租户,将用户建成通用用户,需要在cdb和每个pdb里创建ogg表空间
cdb:
CREATE TABLESPACE OGG
DATAFILE
'/u01/app/oracle/oradata/OGG/ogg.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
DEFAULT
NO INMEMORY
ONLINE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
PDB1:
CREATE TABLESPACE OGG
DATAFILE
'/u01/app/oracle/oradata/OGG/pdb1/ogg.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
DEFAULT
NO INMEMORY
ONLINE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
PDB2:
CREATE TABLESPACE OGG
DATAFILE
'/u01/app/oracle/oradata/OGG/pdb2/ogg.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
DEFAULT
NO INMEMORY
ONLINE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
创建用户
CREATE USER c##ogg IDENTIFIED BY AAAbbb123
DEFAULT TABLESPACE ogg;
给OGG用户授权
EXEC dbms_goldengate_auth.grant_admin_privilege('C##OGG','*', grant_optional_privileges=>'*',container=>'all');
给OGG用户授权DBA权限
GRANT DBA TO C##OGG container=all;
4.3.6 创建测试用户
在pdb1里创建一个测试用户。
先创建表空间
sqlplus / as sysdba
SQL>alter session set container=pdb1;
SQL>CREATE TABLESPACE test
DATAFILE
'/u01/app/oracle/oradata/OGG/pdb1/test01.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
DEFAULT
NO INMEMORY
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
创建用户
SQL>CREATE USER haifeng IDENTIFIED BY test1234
DEFAULT TABLESPACE test;
给测试用户授权
SQL>GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO haifeng;
4.3.7创建测试数据
创建测试表
sqlplus haifeng/test1234@pdb1
SQL>
--建表
CREATE TABLE HAIFENG.T1
(
id NUMBER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999999999999999999999999 CACHE 20 CYCLE ORDER KEEP),
name VARCHAR2(500)
);
--主键
ALTER TABLE HAIFENG.T1 ADD (
CONSTRAINT T1_PK
PRIMARY KEY
(id)
ENABLE VALIDATE);
写入测试数据
SQL>insert into haifeng.t1(name) select object_name from dba_objects;
SQL>commit;
4.4 目标端配置数据库
4.4.1 创建OGG用户
目标端上也需要创建OGG使用的用户。由于本例使用的是多租户,建的是通用用户,所以PDB2里已经有C##OGG用户,这一步可以省略。如果源端和目标端不在一个数据库或者cdb需要单独建用户。建用户的过程同4.3.5节。
4.4.2 创建测试用户
目标端创建测试的用户
先创建表空间
CREATE TABLESPACE test
DATAFILE
'/u01/app/oracle/oradata/OGG/pdb2/test01.dbf' SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
LOGGING
DEFAULT
NO INMEMORY
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
BLOCKSIZE 8K
SEGMENT SPACE MANAGEMENT AUTO
FLASHBACK ON;
创建用户
CREATE USER haifeng IDENTIFIED BY test1234
DEFAULT TABLESPACE test;
给用户授权
GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO haifeng;
数据库配置完成,下面开始配置OGG的进程
五、配置OGG进程
5.1 创建Credentials
源端和目标端都需要创建Credentials,将用户名、密码写入到Credentials中,OGG各进程使用别名,防止密码泄露。
使用浏览器登录Administration Server,上文安装时候配置的端口是7810,所以URL是http://主机IP:7810





为pdb1和pdb2也创建别名。

5.2 源端添加schematrandata




5.3 源端添加抽取进程
源端登录Administration Server





extract E_TEST useridalias oggcdb domain OracleGoldenGate SETENV (NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8") SETENV (ORACLE_HOME="/u01/app/oracle/product/19.0.0/dbhome_1") EXTTRAIL lt DDL include mapped TABLEEXCLUDE pdb1.haifeng.SYS_EXPORT_SCHEMA*; BR BROFF TABLE pdb1.haifeng.*;

5.4 源端添加投递进程
登录Distribution Server



5.5 目标端添加检查表
目标端登录Administration Server




5.6 目标端添加应用进程
目标端登录Administration Server





应用进程建好之后,不用马上启动。将源端数据初始化过来之后,再启动。
六、数据初始化
使用rman或者数据泵将源端的数据复制到目标端,这里使用的是数据泵。
6.1 创建目录
操作系统创建目录
# mkdir /datadump
# chown oracle:oinstall /datadump/
源端数据库创建目录
SQL> alter session set container=pdb1;
SQL> create directory datadump as '/datadump';
目标端创建目录
SQL> alter session set container=pdb2;
SQL> create directory datadump as '/datadump';
6.2 源端导出数据
查询当前SCN
SQL> select current_scn from v$database;
CURRENT_SCN
-----------
3390813
基于当前SCN,导出数据
expdp system@pdb1 dumpfile=datadump:haifeng.dmp logfile=datadump:haifeng.log schemas=haifeng flashback_scn=3390813
将导出的dmp通过ftp或者sftp上传到目标端,这里省略这一步骤。
6.3 目标端导入数据
impdp system@pdb2 dumpfile=datadump:haifeng.dmp logfile=datadump:haifeng.log table_exists_action=replace
修改目标端OGG启动SCN,开启同步



七、测试OGG
源端插入一条数据
sqlplus /nolog
@ >conn haifeng/test1234@pdb1
已连接。
HAIFENG @ pdb1>insert into t1(name) values('Haifeng cao');
已创建 1 行。
HAIFENG @ pdb1>commit;
提交完成。
HAIFENG @ pdb1>select * from t1 where name='Haifeng cao';
ID NAME
---------- ----------------------------------------
25466 Haifeng cao
目标端查看数据
@ >conn haifeng/test1234@pdb2
已连接。
HAIFENG @ pdb2>col name for a40
HAIFENG @ pdb2>select * from t1 where name='Haifeng cao';
ID NAME
---------- ----------------------------------------
25466 Haifeng cao




