梁铭图,新炬网络首席架构师。具有十余年数据库运维、数据库设计、数据治理以及系统规划建设经验,拥有Oracle OCM和ACE Director、Togaf企业架构师(鉴定级)、IBM CATE等认证,曾获dbaplus年度MVP、华为云MVP等荣誉,并参与数据资产管理国家标准的编写工作。在数据库运维管理和架构设计、运维体系规划、数据资产管理方面有深入研究。
随着Oracle数据库版本的迭代,Oracle GoldenGate的版本也随之迭代。近期,oracle 已经发布了其最新的版本21c。在测试GoldenGate最新发布的21c过程中,遇到一些与以往版本相比变化比较大的地方,在此与各位分享。
安装方式
针对 Oracle 数据库的GoldenGate介质,现在只需要单一的安装配置,而不像以前的OGG版本,需要针对不同的DB版本(11g/12c/18c/19c)进行单独的安装;而且也不再需要安装额外的DB客户端。
通过响应文件也可以看到,已经无需指定数据库具体版本了,这一点相对以前来说有较大的改进。
连接数据库
软件安装完成后,尝试通过GGSCI连接数据库,发现报如下错误:
通过查询相关报错,发现其实跟上面所说的改变有关:
意思就是,OGG 21c自带了客户端lib文件,如果软件位于中间层(某些特殊架构下,OGG软件与Oracle软件不在同一台服务器上),可以不需要安装Oracle客户端。但是自此,通过GGSCI连接数据库就需要指定TNS,环境变量则需要配置TNS_ADMIN的具体路径。必须配置正确后,才可以正常连接数据库并启动进程。
测试的环境变量参考如下:
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
umask 022
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_SID=orcl
export ORACLE_BASE=/opt/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:$ORACLE_HOME/OPatch
export NLS_LANG=american_america.ZHS16GBK
export TNS_ADMIN=$ORACLE_HOME/network/admin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib
export OGG=/ogg
export PATH=$PATH:$ORACLE_HOME/bin:/ogg
export LD_LIBRARY_PATH=/ogg:$LD_LIBRARY_PATH
export PATH
OGG for Bigdata的元数据输出
OGG for Bigdata从21.1开始,默认不再自动输出元数据,以投递到kafka集群的参数为例,以下参数已经废弃:
gg.handler.name.includePrimaryKeys
gg.handler.name.includeTableName
gg.handler.name.includeOpType
gg.handler.name.includeOpTimestamp
gg.handler.name.includeCurrentTimestamp
gg.handler.name.includePosition
gg.handler.name.iso8601Format
官方文档里有相应说明:
使用新的gg.handler.name.format.metaColumnsTemplate参数,具体说明如下:
我测试的 to kafka的复制进程参数参考如下:
gg.handlerlist = kafkahandler
gg.handler.kafkahandler.type=kafka
gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties
gg.handler.kafkahandler.topicMappingTemplate=test
gg.handler.kafkahandler.SchemaTopicName=mytest
gg.handler.kafkahandler.format=avro_op
gg.handler.kafkahandler.format=delimitedtext
gg.handler.kafkahandler.format.fieldDelimiter=|
gg.handler.kafkahandler.format.pkUpdateHandling=update
gg.handler.kafkahandler.BlockingSend =false
gg.handler.kafkahandler.includeTokens=false
gg.handler.kafkahandler.mode=op
gg.handler.kafkahandler.format.nullValueRepresentation=
gg.handler.kafkahandler.format.iso8601Format=false
gg.handler.kafkahandler.format.metaColumnsTemplate=${optype},${objectname}
gg.handler.kafkahandler.format.insertOpKey=I
gg.handler.kafkahandler.format.updateOpKey=U
gg.handler.kafkahandler.format.deleteOpKey=D
gg.handler.kafkahandler.format.truncateOpKey=T
gg.contentreplaceregex=(?<=^.{10}):
gg.contentreplacestring=CDATA[ ]
goldengate.userexit.timestamp=utc+8
goldengate.userexit.writers=javawriter
javawriter.stats.display=TRUE
javawriter.stats.full=TRUE
gg.log=log4j
gg.log.level=INFO
gg.report.time=30sec
gg.classpath=dirprm/:/data/kafka/libs/*
javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar
测试消费时,可以正常显示源端数据DML操作的类型,以及具体的表名。
其他特性与改进
除了上面提过的针对Oracle版本不再需要针对不同的DB版本(11g/12c/18c/19c)进行单独的安装以外,还有Ogg 21c还有两个重要的新特性:
除oracle数据库外,其它数据库(DB2 on z/OS, MysQL, PostgreSQL, SQL Server)增加了微服务版本的支持。微服务架构支持用户按照hub的形式部署GoldenGate,从而实现统一的数据同步管理。
该版本支持在所有可投递的数据库上提供并行投递(parallel replicat)功能,并行投递从OGG 12.3开始提供,主要目的是提升目标数据库的写入性能,而且在保证事务完整性和数据一致性的情况下,简化了多线程的设置,12.3只支持Oracle数据库,而在21c中已经支持所有数据库。
此外,针对不同的数据库也有一些改进:
针对oracle 21c数据库:
全面支持21c的捕获和投递
支持原生 JSON 数据
自动配置捕获表
增强自动冲突检测和修复
支持按PDB捕获
按分区过滤
其它安全、可靠性和性能的多项增强
其它数据库的一些新特性:
GG for MySQL Database:远程抽取和投递到mysql8,支持mysql8.0中基于binlog的DDL复制,对json类型的支持等。
GG for PostgreSQL :支持postgresql 13版本,以及json类型的支持。
GG for DB2 for iSeries: 支持远程捕获。
如果字段的最大可能长度超过255字节,那么长度值可能…
只能说作者太用心了,优秀
感谢详解
一般干个7-8年(即30岁左右),能做到年入40w-50w;有…
230721