Golden Gate 数据库复制应用
Oracle Goldengate (GG) 是一款实时访问、基于日志变化捕捉数据,并且在异构平台和数据库之间进行数据传输的外部软件和产品。利用这个技术,Goldengate 能够实现低延迟、高性能、低影响业务连续的数据集成。
本案例将会实现使用 Golden Gate 在两台 Oracle 数据库之间进行数据同步的操作。首先实现的是从源数据库到目标数据库的同步。
相关配置环境为:
- 源数据库:Oracle Enterprise 12C, CentOS 7.9, 192.168.9.71
- 目标数据库:Oracle Enterprise 12C, CentOS 7.9, 192.168.9.75
- 同步工具:Oracle Golden Gate 19.1 For Oracle on Linux x86-64
OGG 的原理
GoldenGate 的运行主要包含以下过程:
- Manager 进程
在源和目标端,首先都需要运行一个 Manager 进程,它用于负责启动、关闭、监控其他进程的健康状态,报告错误事件、分配数据存储空间,发布阀值报告等。
- Extract 进程
运行在数据库源端,负责从源端数据表或日志中捕获数据,然后捕获到的将写到本地 trail 文件。 想要复制的对象数据发生改变时,Extract 进程 就会进行捕捉,当事务提交时,所有和该事务相关的日志记录被以事务为单元顺序的记录到 trail 文件中。Extract 进程利用其内在的 checkpoint 机制,周期性的记录其读写的位置,实现断点同步。
Extract 包括两种捕获模式:
传统模式:基于在线日志或归档日志进行抽取
集成(Integrated, 11G 以上) 模式: Logmining server 负责以 LCR 格式从数据库日志中捕获数据变化,extract 进程再将这些数据存入 trail 文件。
- Pump 进程(可选)
运行在数据库源端, 其作用是将源端产生的本地 trail 文件,把 trail 以数据块的形式通过 TCP/IP 协议发送到目标端。
但是如果如果不使用 trail 文件,那么 extract 进程在抽取完数据以后,直接投递到目标端,生成远程 trail 文件,那么这时候,Pump 进程就可以不用配置(存在) 了。
- Replicat 进程
运行在数据库目标端 ,负责读取源端传送到目标端的 trail 文件中的内容,并将其解析为 DML 或 DDL 语句, 然后应用到目标数据库中。
- Replicat 也有两种模式
- 传统模式:基于 sql 交付,最常用的一种方式
- Integrated 模式:对应这种模式,官方文档是这样描述的
Replicat 操作的过程如下:
读取源端传输过来的 trail 文件;执行 data 数据过滤和转换操作;
DML 操作:根据 commit 顺序,构造 LCR;DDL 操作:Replicat 进程直接 apply;
Replicat 通过 lightweight streaming 接口和目标库后台进程(Database inbound server)建立连接;
将 LCR 传输到 inbound server,然后 apply 这些数据到目标数据库。
两个 Apply Servers 的 Integrated 模式
其实对于进程的 Capture and Apply Modes 可以参考一下官方文档:http://docs.oracle.com/goldengate/1212/gg-winux/GIORA/process_mode.htm#GIORA554
- Server Collector 进程
运行于目标端,作用就是把 Extract/Pump 进程投递过来的数据块重新组装成 Trail 文件。运行期间无需任何配置。是一个完全自动的进程
环境准备、安装和配置
在需要安装配置 OGG 的主机上,需要进行相关的配置,不分源数据库或者目标数据库。我们这里简化之间使用 oracle 用户,作为 ogg 用户。
我们假设 OGG 将会安装到 /u01/app/ogg 文件夹之下
安装 OGG
直接将 OGG 安装文件解压到 /u01/app/ogg 文件夹下?(可能已经不能使用)
在 11 版本之后,Oracle 提供了类似安装数据库产品的安装过程来安装 OGG。
我们假设我们将安装包解压到了 /stage/ogg 文件夹下,并从此处启动安装过程
unzip 123012_fbo_ggs_Linux_x64_shiphome.zip mv fbo_ggs_Linux_x64_shiphome/Disk1 /stage/ogg chown -R oracle:oinstall /stage/ogg
编辑响应文件,修改或增加以下内容
nano /stage/ogg/ogg.rsp // rsp file content INSTALL_OPTION=ORA12c SOFTWARE_LOCATION=/u01/app/ogg START_MANAGER=true MANAGER_PORT=7809 DATABASE_LOCATION=/u01/app/oracle/product/12.2.0/dbhome_1 INVENTORY_LOCATION=/u01/app/oraInventory UNIX_GROUP_NAME=oinstall // 启动安装 cd /stage/ogg ./runInstaller -silent -responseFile /stage/ogg/ogg.rsp
过程中,可能需要使用 root 来运行一些脚本程序。
.bash_profile
编辑 oracle 的 bash_profile 文件增加以下内容
# Path Oracle GoldenGate export OGG_HOME=/u01/app/ogg export PATH=$OGG_HOME:$PATH export LD_LIBRARY_PATH=$OGG_HOME:$LD_LIBRARY_PATH // 重载环境变量 source ~/.bash_profile
准备 OGG 文件夹
启动 ggsci 命令行
cd $OGG_HOME ./ggsci // 创建相关目录 create subdirs
准备 OGG 凭据库和别名 (ggadmin)
add credentialstore // 创建凭据库 alter credentialstore add user c##ggate alias ggadmin // 增加凭据和别名 info credentialstore // 检查当前凭据 dblogin useridalias ggadmin // 使用凭据别名登录
下面的操作分别在源和目标数据库上进行。
数据库参数配置
// goldengate replication ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE SCOPE=BOTH; show parameter ENABLE_GOLDENGATE_REPLICATION // recyclebin off alter session set recyclebin=off;
GG 管理用户和测试用户(表)
CREATE TABLESPACE ggs_data LOGGING DATAFILE '/opt/oradata/ggs_data.dbf' SIZE 1024M AUTOEXTEND ON NEXT 512M MAXSIZE 8096M EXTENT MANAGEMENT LOCAL; create TEMPORARY TABLESPACE ggs_temp TEMPFILE 'ggs_temp.dbf' SIZE 5M AUTOEXTEND ON; create user c##ggate identified by Ulsc_0202 default tablespace ggs_data temporary tablespace ggs_temp; grant dba to c##ggate container=all ; // gg 权限配置 EXEC dbms_goldengate_auth.grant_admin_privilege('c##ggate');
我们将使用使用一个用户数据表先作为测试
conn C##ULPLAT; create table tb_ggate (id number not null ,vl varchar2(200) ,primary key(id));
源数据库准备
源端数据库必须置于归档模式,force logging,并且启用 supplemental logging。查看这几个选项是否启动,最简单的方式是查询 v$database 视图;
// 查看当前模式 select log_mode,supplemental_log_data_min,force_logging from v$database;
如果不是,需要进行相关修改操作,如下:
--启动到 mount 状态: startup mount; --置于归档模式: alter database archivelog; --强制日志记录: alter database force logging; --启用最少附加日志,数据库级别附加日志 alter database add supplemental log data;
源数据库用户级别附加日志配置
dblogin useridalias ggadmin add schematrandata c##ulplat@orcl.root add schematrandata c##ulplat@orcl.root
目标数据库配置和准备
按照源数据库的方式创建表空间、使用用户和 GG 管理用户。
目标 OGG 配置和准备
按照源数据库的方式准备 OGG,包括 OGG 账号、确认 mrg 状态等。还需要设置检查表如下:
ggsci dblogin useridalias ggadmin add checkpointtable CDB$ROOT.c##ggate.chktable
测试数据同步
两端数据库和相关环境参数配置完成之后,就可以进一步配置 OGG 本身,并且完成数据同步的过程了。基本的思路和过程是首先准备好测试数据,然后进行源端的 manager 进程管理配置,
目标 Manager 进程和管理用户
cd $OGG_HOME ggsci add credentialstore alter credentialstore add user c##ulplat alias ggadmin dblogin useridalias ggadmin stop | start mgr info all
目标 replicat 进程
add replicat rp000,specialrun edit params rp000 REPLICAT re000 DISCARDFILE ./dirrpt/repgg.dsc, APPEND DBOPTIONS ENABLE_INSTANTIATION_FILTERING ASSUMETARGETDEFS USERID c##ggadmin@pdb1, PASSWORD ggadmin DDL INCLUDE ALL DDLOPTIONS REPORT MAP pdb.C##ULPLAT.*, TARGET pdb.C##ULPLAT.*; start replicat rp000 info all
测试数据准备- (源端)
// 测试数据 conn C##ULPLAT; insert into tb_ggate select rownum rn,object_name from all_objects;
源 Manager 进程和管理用户
GGSCI edit params mgr add credentialstore alter credentialstore add user gguser alias ogguser dblogin useridalias ogguser
配置 extract(源端)
配置 pump(源端)
本来 pump 是可选的。它的引入主要是增强数据同步的可靠性。使用 pump 的情况下,extract 抽取数据后,首先保存在本地的 trail 文件中,然后由 pump 负责将本地 trail 文件中的数据传输到远端,就可以避免由于网络问题而引起的数据传输错误。
checkpoint 表
源端进程启动
分别启动 mrg、extract 和 pump 进程
start mgr start ext01 start PUMP01 info all
数据导入
目标端进程启动
start mgr start rep01,aftercsn 54995990597 info all
创建 ULPT 的 pdb
CREATE PLUGGABLE DATABASE ulptdb ADMIN USER ulpt IDENTIFIED BY Ulsc_0202 STORAGE (MAXSIZE 2G) DEFAULT TABLESPACE ulpt DATAFILE '/opt/oradata/ulpt/ulpt.dbf' SIZE 200M AUTOEXTEND ON PATH_PREFIX = '/opt/oradata/ulpt/' FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/orcl/pdbseed', '/opt/oradata/ulpt');
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: CockroachDB 系统部署和应用
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论