Oracle GoldenGate软件是一种基于日志的结构化数据复制软件。
GoldenGate 能够实现大量交易数据的实时捕捉、变换和投递,实现源数据库与目标数据库的数据同步,保持秒级的数据延迟。
通常GoldenGate队列文件大小与数据库日志大小的比例为1:4,GoldenGate网络传输压缩比例为1:8,TCP/IP网络传输效率最高为0.7;
以业务高峰期每小时产生50GB数据库日志为例, 同步延迟的带宽要求为:
50 * 1024 (MB/小时) * 8 (每字节8位) / 3600 (秒/小时) / 4 (队列/日志比例) / 8 (传输压缩比例) / 0.7 (网络传输效率) = 5.08 Mbps
(1)保证事务一致性
GoldenGate在灾备数据库应用复制数据库交易的顺序与在生产中心数据库上的顺序相同,并且按照相同的事务环境提交,确保在目标系统上数据的完整性和读一致性,为实时查询和事务处理创造了条件。
(2)检查点机制保障数据无丢失
GoldenGate的抽取和复制进程使用检查点机制记录完成复制的位置。对于抽取进程,其检查点记录当前已经抽取日志的位置和写队列文件的位置;对于投递进程,其检查点记录当前读取队列文件的位置。检查点机制可以保证在系统、网络或GoldenGate进程故障重启后数据无丢失。
(3)可靠的数据传输机制
GoldenGate用应答机制传输交易数据,只有在得到确认消息后才认为数据传输完成,否则将自动重新传输数据,从而保证了抽取出的所有数据都能发送到备份端。数据传输过程中支持128位加密和数据压缩功能。
Dirchk: checkpoint存放检查点,存放由extract进程到replicat进程创建的检查点文件
Dirdat: 源端存放为等待被投递的trail文件,目标端存放为等待被replicat的trail文件
Dirdef: date definition 过DEFGEN工具生成的源端或目标端的数据文件
Dirprm: 存放参数文件,修改参数时可直接修改本文件
Dirpcs: process status存放进程状态文件
Dirrpt: report 存放所有进程日志文件
Dirsql: sql script 存放sql脚本文件
Dirtmp: temproary files 临时文件,当事务所需要的内存超过已分配内存时,缺省存储
https://www.cnblogs.com/hmwh/p/8681600.htmlogg详解
https://www.cnblogs.com/VoiceOfDreams/p/8576973.html ogg安装部署
https://dongkelun.com/2018/05/23/oggOracle2Kafka/ ogg安装实时同步kafka部署
https://www.charflower.com/?p=1499 OGG 19Cwin 安装
https://wenku.baidu.com/view/be65e3df02020740bf1e9b23.html ogg命令文档
https://www.askmaclean.com/archives/ogg-%E6%8A%A5%E9%94%99%E4%BF%A1%E6%81%AF%E6%B1%87%E6%80%BBogg_error_messages.html ogg报错信息汇总
归档模式(archivelog): 可以在线|离线备份数据库,可以是全备份或者是部分备份(单个表空间|数据文件) ;
非归档模式(noarchivelog): 只能离线备份而且必须备份所有的数据文件,控制文件,日志文件
https://blog.csdn.net/luckgrilwyy/article/details/53333965 oracle归档
https://blog.csdn.net/m0_37814112/article/details/77197476 Force Logging
安装jdk
@[root@localhost ~]# java -version
java version "1.8.0_212"
Java(TM) SE Runtime Environment (build 1.8.0_212-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.212-b10, mixed mode)
@[root@localhost ~]# vim ~/.bash_profile
export OGG_HOME=/develop/ogg
export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=:$PATH:$JAVA_HOME/bin
export LD_LIBRARY_PATH=/lib:/usr/lib:$JAVA_HOME/jre/lib/amd64/server:$JAVA_HOME/jre/lib/amd64
@[root@localhost ~]#sqlplus /nolog
conn /as sysdba //连接登录数据库
SQL> select log_mode,supplemental_log_data_min,force_logging from v$database;
//检查归档模式,附加日志,强制日志参数是否开启
SQL> shutdown immediate; //关闭数据库,在尽短的时间关闭数据库
SQL> startup mount; //装载数据库而不启动
SQL> alter database archivelog; // 启动归档模式(archivelog):非归档模式(noarchivelog)
SQL> alter database force logging; //来使得Oracle无论什么操作都进行redo的写入forcelogging(强制日志)模式:
SQL> alter database add supplemental log data; //添加补充日志 重做记录中变更矢量的补充信息,增加了变更矢量记载的记录量
SQL> alter database open; //打开数据库
oracle 11.2.0.4和oracle 12.1.0.2及之后的版本需要设置如下参数
alter system set enable_goldengate_replication=true scope=both;
SQL> create tablespace ogg_tbs datafile'C:\app\Administrator\oradata\orcl\ogg_tbs01.dbf'
size 1024M autoextend on; //创建表空间
SQL> create user ogg identified by ogg default tablespace ogg_tbs quota unlimited on ogg_tbs;
SQL> grant dba to ogg; (涉及到DDL复制,需授予给dba权限)
设置归档日志为非限制大小路径
alter system set db_recovery_file_dest_size=8G scope=both;
alter system set db_recovery_file_dest='D:\app\Administrator\oracle_log' scope=both;
@[root@localhost ~]#tar -zxvf 191004_fbo_ggs_Linux_x64_shiphome.zip
进入ggsci (goldengate software command interface)
创建文件夹
>create subdirs // 需要先创建文件
登陆ogg:
> dblogin userid ogg, password ogg // 密码加密使用encrypt password pwd,encryptkey default
>edit param mgr
同于vim /opt/ogg/dirprm/mgr.prm
开启管理进程 start mgr
PORT 7809 //mgr默认监听端口
USERID ogg , PASSWORD ogg //用户名密码 如果密码需要加密处理 >encrypt password ogg,encryotkey default 目标端
AUTOSTART EXTRACT * //当mgr启动后启动EXTRACT 进程
DYNAMICPORTLIST 7810-7936 //动态端口列表,当mgr端口不可用时选择一个,最大指定范围256个
AUTORESTART REPLICAT *, RETRIES 5, WAITMINUTES 2 //重启参数,最多重启5次,每次隔2分钟
PURGEOLDEXTRACTS /opt/ogg/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 10 //文件定期清理
LAGREPORTHOURS 1 //每隔1小时检查传输延迟情况并记录到roport文件
LAGINFOMINUTES 30 //进程复制延迟超过30分钟,发送错误日志
LAGCRITICALMINUTES 45 //传输超过45分钟提交日志
添加复制表
>add trandata ogg.empi_person //添加表级别的附加日志
添加抽取进程
>add extract extEmpi,tranlog,begin now //delete extract进程名 删除抽取进程
抽取文件与抽取进程绑定
>add exttrail C:/ogg/dirdat/sr, extract extEmpi,megabytes 20 //创建存放数据的trail文件
添加抽取进程与源端绑定
>add extract dpEmpi, exttrailsource /opt/ogg/dirdat/sr
>edit param extEmpi
同于vim /opt/ogg/dirprm/extempi.prm
extract extEmpi //指定抽取进程名称
SETENV(ORACLE_SID="orcl") //设置环境变量数据库实例
--SETENV (NLS_LANG=AMERICAN_AMERICA.UTF-8)
SETENV (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK) //修改ogg字符集信息与数据库一致
userid ogg, password ogg //ogg连接orcl用户名密码encryptkey default 加密密码
REPORTCOUNT EVERY 30 MINUTES, RATE //每30分钟报告一次抽取数
DISCARDFILE /opt/ogg/dirrpt/extsr.dsc, APPEND, MEGABYTES 100 //执行失败的记录存储位置,大小为100MB
EXTTRAIL /opt/ogg/dirdat/sr //定义trail保存文件地址及文件名
DYNAMICRESOLUTION //动态解析
DBOPTIONS ALLOWUNUSEDCOLUMN //当表中unusend导致抽取中止时,抽到unusend列时会向日志发送一条警告信息
FETCHOPTIONS NOUSESNAPSHOT //直接从源表读取相关数据 usesnapshot数据库闪回取数据
FETCHOPTIONS FETCHPKUPDATECOLS //当复制进程丢失update记录,将转换为insert
table ogg.empi_person,COLS //复制表的名字
(表映射字段); //字段需要扩容
> view param defgen //投递端映射文件名 sourcedefs /opt/ogg/dirdef/defgen
DEFSFILE dirdef/defgen, PURGE //映射文件名称
USERID ogg, PASSWORD xxxx //OGG用户名密码
TABLE xx.xx; //需要映射的表名
生成映射文件 需要扩容
@[root@localhost ~]# ./defgen paramfile dirprm/defgen
拷贝生成映射文件至目标端./dirdef目录下
投递进程与源端文件绑定
>add extract dpEmpi, exttrailsource C:/ogg/dirdat/sr //文件名与extract文件名一致
投递进程与目标端绑定
@[root@localhost ~]#
>add rmttrail /opt/ogg/dirdat/tr, extract dpEmpi,megabytes 20 //定义目标端文件位置
>edit param dpEmpi
同于vim /opt/ogg/dirprm/dpempi.prm
extract dpEmpi //指定投递进程名称
SETENV(ORACLE_SID="orcl") //环境变量数据库实例
RMTHOST 192.168.1.69, mgrport 7809, COMPRESS //目标端主机ip,端口,投递前压缩文件
PASSTHRU //传递时按照抽取进程交互,不和数据库交互,减少资源利用
RMTTRAIL /opt/ogg/dirdat/tr //定义目标端trail保存文件地址及文件名
DYNAMICRESOLUTION //动态解析
table ogg.empi_person; //投递表名,与抽取进程表名一致
安装ogg包
Oracle GoldenGate for Big Data 19.1.0.0.5 on Linux x86-64
https://www.oracle.com/middleware/technologies/goldengate-downloads.html
@[root@localhost ~]#tar -zxvf OGG_BigData_Linux_x64_19.1.0.0.0.zip
>edit param ./GLOBALS
拷贝ogg/AdapterExamples/big-data/kafka中所有文件至ogg/dirprm
·Kafak 复制进程配置
添加复制进程
add replicat rkafka,exttrail /opt/ogg/dirdat/tr,begin now
>edit param rkafka
同于vim /opt/ogg/dirprm/rkafka.prm
@[root@localhost ~]# start rkafka 开启进程
REPLICAT rkafka //定义名称
-- Trail file for this example is located in "AdapterExamples/trail" directory
-- Command to add REPLICAT
-- add replicat rkafka, exttrail AdapterExamples/trail/tr
sourcedefs /opt/ogg/dirdef/defgen //在源服务器上表做的表映射文件
TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props //kafka一些适配性的库文件及配置文件
REPORTCOUNT EVERY 1 MINUTES, RATE //复制任务的报告生产频率
GROUPTRANSOPS 10000 //以事物传输时,事务合并的单位,减少io操作
MAP ogg.empi_person, TARGET ogg.empi_person; //MAP 表名 TARGET 投递名
登录源端ogg(每个数据库对应一个ogg,根据数据库登录服务器)
登录oracle
>dblogin userid ogg, password ogg
添加表监控
> add trandata 表名 /抽取进程与投递进程配置的表名
可以通过info all 或者info [进程名] 查看状态,所有的进程都为RUNNING才算成功
start <进程名称> 开启进程 ;
stop <进程名称> 关闭进程
sview report +进程名称 *查看进程详细状态,有助于排错*
info <进程名称> showch 查看详细处理过的事物记录*
info <进程名称> detail 查看更详细的信息,包括所使用的trail文件,参数文件,报告文件,告警日志文件位置等*
修改kafka监听
@[root@localhost ~]#vi /opt/kafka/config/server.properties
listeners=PLAINTEXT://192.168.1.69:9092
开启kafka
@[root@localhost ~]#nohup bin/zookeeper-server-start.sh config/zookeeper.properties >zookeeperlog 2>&1 &
nohup bin/kafka-server-start.sh config/server.properties >kafkalog 2>&1 &
@[root@localhost ~]bin/kafka-topics.sh --list --zookeeper 127.0.0.1:2181 //查看数据
@[root@localhost ~]bin/kafka-console-consumer.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --topic topic名称 //查看消息
查看防火墙状态
@[root@localhost ~]#firewall-cmd --state
停止firewall
@[root@localhost ~]#systemctl stop firewalld.service
禁止firewall开机启动
@[root@localhost ~]#systemctl disable firewalld.service