架构Oracle 19c多租户架构Oracle Golden Gate架构部署规划Oracle创建Oracle用户上传安装包安装配置Oracle配置环境变量启动Oracle修改管理员密码客户端连接部署Kafka集群
创建Kafka用户上传解压配置Kafka分发到每个节点挨个修改每个节点的broker id创建超链接启动Kafka集群简单测试Ogg for Oracle源端安装创建ogg用户上传安装包编辑参数安装配置ogg环境变量
创建库连接测试ogg配置oracleOGG初始化Oracle创建测试表Ogg for BigData目标端安装上传解压配置环境变量测试ggsci命令初始化目录Ogg源端配PHC管桩置配置ogg全局变量配置管理器添加复制表
配置extract进程配置pump进程配置define文件Ogg目标端配置启动Kafka集群修改trail文件权限配置管理器mgr配置checkpoint配置replicate进程配置kafka.props
添加trail文件到replicate进程测试启动所有进程查看进程状态测试同步更新效果架构Oracle 19c多租户架构关于多租户架构从Oracle 12c开始,Oracle数据库开始基于多租户架构构建。
也就是标志着,Oracle 12c是一个用作多租户的容器数据库(CDB——Container Database Base)而一个CDB可以包含0个、1PHC管桩个或者多个客户创建的可插拔的数据库(PDB)PDB是schema、schema object、以及非schema对象的一组集合。
而这也意味着,Oracle 12c之前的Oracle数据库都是non-CDB的关于CDB中的容器这里所说的容器(container)和Docker中的容器是不太一样的而我们之前所熟悉的概念是:一个DB Server,有若干个Database。
而CDB中的容器表示的是多租户体系结构中的数据、元数据的集合
可以看到CDB架构可以包含很多的容器:系统容器 系统容器包含了和CDB、以及所有的PDB它本身是CDB的逻辑容器Root的容器(我们一般称它为root) 如果仔细看上面的PHC管桩图,可以发现,所有的PDB(可插拔的数据库)的根容器都是Root(也就是CDB$ROOT)。
我们也可以看到CDB架构看起来就是一颗多叉树,可以是有若干层而ROOT容器中就需要包含整套架构的schema对象,也就是说CDB$ROOT需要有自己的数据字典、以及用户应用程序容器 一个应用程序容器仅由一个Application root组成,并且PDB插入到该root目录中。
前面我们说到,系统容器包含CDB根目录和CDB中的所有PDB,而Application container仅包含PDB应用程序根目录属于CDB根目录,不属于其他容器 用户创建的PDB PDB包含一组特定功能所需的数据和代码。
例如,PHC管桩PDB可以支持特定的应用程序,例如:HR管理系统或CRM系统等创建CDB时,是没有任何PDB的,需要我们自己根据业务需求添加PDB PDB属于一个应用程序容器如果PDB属于应用程序容器,则它是Application PDB。
例如,cust1_pdb和cust2_pdb应用程序PDB属于saas_sales_ac应用程序容器,在这种情况下,它们不属于任何其他应用程序容器Application seed是一个可选的Application PDB,它是用户创建的PDB模板,能够让我们快速创建新的Appliation PDB。
唯一的Seed PDB Seed PDB是CDB用来创建新的PDB模板。SePHC管桩ed PDB名为PDB$SEED。我们无法在PDB$SEED中添加或修改对象。没有应用容器的CDB架构
上述例子中,CDB包含了5个容器:系统容器(整个CDB)CDB$ROOTPDB$SEEDhrpdbsalespdb每个PDB有自己对应的应用,而且不同的PDB使用不同的管理员账户而SYS用户可以管理CDB$ROOT以及每一个PDB。
而在物理结构上,还是有数据库实例、以及数据温恩建的带有应用容器的CDB架构
可以看到,上图中有两个容器:CDB$ROOT、以及一个名为saas_sales_ac的应用容器CDB$ROOT容器中插入Lee一个hrpdbsaas_sales_ac容器插入了cust1_pdPHC管桩b、以及cust2_pdb。
角色有以下几类:CDB Administrator:整个CDB的管理员(系统容器管理员)Application Container Administrator:应用容器管理员Application PDB Administrator:应用PDB管理员
PDB Administrator for hrpdb:hrpdb的管理员现在我们可以明显看到Oracle数据库对多租户的支持了Oracle对数据库管理员角色进行重定义Oracle Golden Gate架构。
部署模式
单向同步双向同步(Failover)点对点(负载均衡、HA)广播数据分发合并(数据仓库、存储、集市)级联PHC管桩(弹性、数据库分层)OGG经典架构组件
流程解析:Extract过程Extract进程source解析操作,并写入到Trail文件中Data Pump从Trail文件中读取操作数据,并通过网络发送Replicat过程Collector接收Data Pump发送过来的数据,并写入到Trail文件
Replicat读取Trail文件,并将数据写入到Target端大家可以看到,Trail是核心数据文件,而整个过程其实还是经典的:source - transform -sink 模式和Flume的流程有点类似。
Extract进程负责对接source阶段,采集数据操作以及变更,Data Pump进程可以负责PHC管桩数据的转换与分发,而Replicat进程可以将数据下沉到Target端ggsciggsci是ogg的软件命令界面。
我们可以使用ggsci配置各个组件Manager进程OGG的控制进程,每个OGG端都需要运行Manager,然后在运行Extract或者Replicat进程在执行Extract(提取)和Replicat(复制)时,Manager进程必须保持运行,它会负责资源管理工作
一个Manager进程可以控制多个Extract和Replicat进程功能:启动Ogg启动动态进程维护进程端口号根据保留策略清楚trail file创建event、error或者threshold(阈值)报告
Data PPHC管桩ump配置了Data Pump(数据泵),在数据提取过程(Extract)会将所有的操作写入到源端数据库上的trail file中Data Pump读取trail文件,并将数据通过网络发送到目标端数据库上的目标trail文件。
Data Pump可以执行数据过滤、映射、以及转换工作可以根据需要来配置Data Pump:执行数据操作:将Data Pump配置为执行数据过滤、映射和转换不执行任何数据操作:直通模式,将数据原样发送这种方式Data Pump的吞吐量最高。
CollectorCollector由Manager进程启动,在target端后台运行它将事务数据重新组合到目标的trail中当ManPHC管桩ager接收到来自Extract进程的连接请求时,Collector绑定到可用的端口上,并将端口号发送给Manager以分配给请求的Extract进程。
Collector接收Extract发送的捕获数据,将数据写入到远程的trail文件每个Extract都有一个Collector,当关联的Extract终止时,Collector也会自动终止部署规划| 角色/节点 | ha-node1 | ha-node2 | ha-node3 | ha-node4 | ha-node5 | | --------------- | -------- | -------- | -------- | -------PHC管桩- | -------- | | oracle | √ | | | | | | ogg for oracle | √ | | | | | | ogg for bigdata | | √ | | | |
Oracle创建Oracle用户useradd oracle上传安装包[oracle@ha-node1 ~]$ ll 总用量 2631532 -rw-r--r-- 1 root root 2694664264 3月 12 12:34 oracle-database-ee-19c-1.0-1.x86_64.rpm -rw-r--r-- 1 oraclePHC管桩 oracle 18204 3月 15 09:11 oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
安装# 安装预安装rpm(安装Oracle所需依赖) sudo yum install -y oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm # 安装oracle sudo yum localinstall -y oracle-database-ee-19c-1.0-1.x86_64.rpm
配置Oraclesudo /etc/init.dPHC管桩/oracledb_ORCLCDB-19c configure配置环境变量#vim .bashrc export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin export ORACLE_SID=ORCLCDB export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK" # 加载环境变量:source ~/.bashrc
启动OraPHC管桩clesu oracle sqlplus / as sysdba # 启动服务 startup # 退出命令窗口 exit cd $ORACLE_HOME/bin #定位到bin目录 lsnrctl start #启动监听
修改管理员密码alter user sys identified by 123456; alter user system identified by 123456;客户端连接
部署Kafka集群为了能够测试Ogg和Kafka整合需要先部署好KafPHC管桩ka集群创建Kafka用户# 在所有 useradd kafka上传解压[kafka@ha-node1 ~]$ ll 总用量 60824 -rw-r--r-- 1 kafka kafka 62283588 3月 15 10:16 kafka_2.12-2.4.0.tgz # 解压 [kafka@ha-node1 ~]$ tar xvzf kafka_2.12-2.4.0.tgz -C /opt/。
配置Kafka# 第21行 broker.id=0 # 第60行 loPHC管桩g.dirs=/data/kafka-logs # 第123行 zookeeper.connect=ha-node1:2181,ha-node2:2181,ha-node3:2181,ha-node4:2181,ha-node5:2181
分发到每个节点scp -r /opt/kafka_2.12-2.4.0 ha-node1:/opt; scp -r /opt/kafka_2.12-2.4.0 ha-node2:/opt; scp -r /opt/kafka_2.12-2.4.0 ha-node3:/opt; PHC管桩 scp -r /opt/kafka_2.12-2.4.0 ha-node4:/opt; scp -r /opt/kafka_2.12-2.4.0 ha-node5:/opt # 修改权限 ssh ha-node1 "chown -R kafka:kafka /opt/kafka_2.12-2.4.0 "; ssh ha-node2 "chown -R kafka:kafka /opt/kafka_2.12-2.4.0 "; ssh ha-node3 "chown -R kafka:kafka PHC管桩/opt/kafka_2.12-2.4.0 "; ssh ha-node4 "chown -R kafka:kafka /opt/kafka_2.12-2.4.0 "; ssh ha-node5 "chown -R kafka:kafka /opt/kafka_2.12-2.4.0 "
挨个修改每个节点的broker id# vim /opt/kafka_2.12-2.4.0/config/server.properties # 第21行 broker.id=1/2/3/4创建超链接ssh ha-node1 "ln -s /PHC管桩opt/kafka_2.12-2.4.0 /opt/kafka"; ssh ha-node2 "ln -s /opt/kafka_2.12-2.4.0 /opt/kafka"; ssh ha-node3 "ln -s /opt/kafka_2.12-2.4.0 /opt/kafka"; ssh ha-node4 "ln -s /opt/kafka_2.12-2.4.0 /opt/kafka"; ssh ha-node5 "ln -s /opt/kafka_2.12-2.4.0 /opt/kafka"
启动Kafka集PHC管桩群# 先启动ZK su zookeeper start-all.sh # 在所有节点执行 su kafka cd /opt/kafka nohup bin/kafka-server-start.sh config/server.properties &
简单测试bin/kafka-topics.sh --list --bootstrap-server ha-node1:9092Ogg for Oracle源端安装创建ogg用户useradd ogg -g oracle
上传安装包su - ogg PHC管桩 [ogg@ha-node1 ~]$ ll 总用量 641700 -rw-r--r-- 1 root root 556240981 3月 15 11:51 191004_fbo_ggs_Linux_x64_shiphome.zip # 解压ZIP包 unzip 191004_fbo_ggs_Linux_x64_shiphome.zip cd /home/ogg/fbo_ggs_Linux_x64_shiphome/Disk1
编辑参数cd /home/ogg/fbo_ggs_Linux_x64_shiPHC管桩phome/Disk1/response vim oggcore.rsp # 修改第37行 INSTALL_OPTION=ORA19c # 修改第41行 SOFTWARE_LOCATION=/opt/ogg/source_endpoint
安装cd /home/ogg/fbo_ggs_Linux_x64_shiphome/Disk1 /home/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/runInstaller -silent -nowait -responseFilPHC管桩e /home/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp
配置ogg环境变量# vim ~/.bashrc export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 export ORACLE_SID=ORCLCDB export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK" export OGG_HOME=/opt/ogg/source_endpoint exportPHC管桩 LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export PATH=$OGG_HOME:$PATH export PATH=$PATH:/opt/oracle/product/19c/dbhome_1/bin # source /etc/profile
创建库连接ln -s $ORACLE_HOME/lib/libnnz19.so /opt/ogg/source_endpoint/libnnz19.so测试ogg[ogg@ha-node1 source_endpoint]$ cd /opt/ogg/souPHC管桩rce_endpoint [ogg@ha-node1 source_endpoint]$ ldd ggsci linux-vdso.so.1 => (0x00007fffa2f8a000) librt.so.1 => /lib64/librt.so.1 (0x00007f84d1612000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f84d140e000) libgglog.so => /opt/ogg/source_endpoint/./libgglog.so (0x00PHC管桩007f84d10a8000) libggutil.so => /opt/ogg/source_endpoint/./libggutil.so (0x00007f84d0e8c000) libggrepo.so => /opt/ogg/source_endpoint/./libggrepo.so (0x00007f84d0bd2000) libdb-6.1.so => /opt/ogg/source_endpoint/./libdb-6.1.so (0x00007f84d07bc000) liblmdb.so => /opt/ogPHC管桩g/source_endpoint/./liblmdb.so (0x00007f84d05a7000) libggperf.so => /opt/ogg/source_endpoint/./libggperf.so (0x00007f84d0375000) libggparam.so => /opt/ogg/source_endpoint/./libggparam.so (0x00007f84cec5c000) libicui18n.so.62 => /opt/ogg/source_endpoint/./libicui18n.so.62 (0x0PHC管桩0007f84ce777000) libicuuc.so.62 => /opt/ogg/source_endpoint/./libicuuc.so.62 (0x00007f84ce376000) libicudata.so.62 => /opt/ogg/source_endpoint/./libicudata.so.62 (0x00007f84cc35e000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f84cc142000) libxerces-c-3.2.so => PHC管桩/opt/ogg/source_endpoint/./libxerces-c-3.2.so (0x00007f84cbace000) libantlr3c.so => /opt/ogg/source_endpoint/./libantlr3c.so (0x00007f84cb8b3000) libnnz19.so => not found libclntsh.so.19.1 => not found libclntshcore.so.19.1 => not found libggnnzitp.so => /opt/PHC管桩ogg/source_endpoint/./libggnnzitp.so (0x00007f84cad9c000) libstdc++.so.6 => /opt/ogg/source_endpoint/./libstdc++.so.6 (0x00007f84caa05000) libm.so.6 => /lib64/libm.so.6 (0x00007f84ca703000) libgcc_s.so.1 => /opt/ogg/source_endpoint/./libgcc_s.so.1 (0x00007f84ca4ed000) PHC管桩 libc.so.6 => /lib64/libc.so.6 (0x00007f84ca11f000) /lib64/ld-linux-x86-64.so.2 (0x00007f84d221e000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f84c9f05000)
配置oracle登录su - oracle sqlplus / as sysdba查看是否为Archive模式# 当前是disabled SQL> archive log list Database log mPHC管桩ode No Archive Mode Automatic archival Disabled Archive destination /opt/oracle/product/19c/dbhome_1/dbs/arch Oldest online log sequence 4 Current log sequence 6
手动打开# 立即关闭数据库 shutdown immediate # 启动实例并加载数据库,但不打开 startup mount # 更改数据库为归档PHC管桩模式 alter database archivelog; # 打开数据库 alter database open; # 启用自动归档 alter system archive log start;
再次查看Archive模式SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination /opt/oracle/product/19c/PHC管桩dbhome_1/dbs/arch Oldest online log sequence 4 Next log sequence to archive 6 Current log sequence 6
Oracle打开日志相关SQL> select force_logging, supplemental_log_data_min from v$database; FORCE_LOGGING ---------------------------------------------------------------PHC管桩--------------- SUPPLEMENTAL_LOG ---------------- NO NO
当前为NO,通过以下命令修改:alter database force logging; alter database add supplemental log data;再次查看:SQL> select force_logging, supplemental_log_data_min from v$database; FORCE_LOGGING -------------PHC管桩----------------------------------------------------------------- SUPPLEMENTAL_LOG ---------------- YES YES
Oracle创建用于复制的用户su - oracle # 在/data目录创建ogg文件夹(ORCLCDB为实例名) mkdir -p /data/ogg/ORCLCDB创建全局用户sqlplus / as sysdba create user ogg identifiePHC管桩d by 123456 default tablespace oggtbs; exec dbms_goldengate_auth.grant_admin_privilege(ogg,container=>all); grant dba to ogg container=all;
开启ogg replicationALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE;打开PDB数据库show pdbs; CON_ID CON_NAME OPEN MODE RESTRICTED -PHC管桩--------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB1 MOUNTED
执行以下命令:alter pluggable database ORCLPDB1 open; alter session set container=ORCLPDB1; commit;OGG初始化ggsci create subdirs ---------------------------PHC管桩------------ [ogg@ha-node1 lib]$ ggsci Oracle GoldenGate Command Interpreter for Oracle Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO Linux, x64, 64bit (optimized), Oracle 19c on Oct 17 2019 21:16:29 Operating system character set identifiedPHC管桩 as UTF-8. Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved. GGSCI (ha-node1) 1> create subdirs Creating subdirectories under current directory /opt/oracle/product/19c/dbhome_1/lib Parameter file /opt/ogg/source_endpoint/dirprm: createPHC管桩d. Report file /opt/ogg/source_endpoint/dirrpt: created. Checkpoint file /opt/ogg/source_endpoint/dirchk: created. Process status files /opt/ogg/source_endpoint/dirpcs: created. SQL script files /opt/ogg/source_endpoint/dirsql: created. Database definitions fiPHC管桩les /opt/ogg/source_endpoint/dirdef: created. Extract data files /opt/ogg/source_endpoint/dirdat: created. Temporary files /opt/ogg/source_endpoint/dirtmp: created. Credential store files /opt/ogg/source_endpoint/dircrd: created. Masterkey wallet files /opt/ogg/sourcePHC管桩_endpoint/dirwlt: created. Dump files /opt/ogg/source_endpoint/dirdmp: created.
Oracle创建测试表su oracle sqlplus / as sysdba; alter session set "_ORACLE_SCRIPT"=true create user test_ogg identified by 123456 default tablespace users; grant dba to test_ogg; PHC管桩 # ctrl+d退出sqlplus sqlplus test_gg/123456 # 创建表 create table test_ogg(id int ,name varchar(20),primary key(id));
Ogg for BigData目标端安装在ha-node2节点上安装Ogg for BigData目标端上传解压su - ogg [ogg@ha-node1 ~]$ ll | grep OGG_BigData -rw-r--r-- 1 root root 100855044PHC管桩 3月 15 11:30 OGG_BigData_Linux_x64_19.1.0.0.5.zip # 解压zip包 unzip OGG_BigData_Linux_x64_19.1.0.0.5.zip # 解压tar包 mkdir -p /opt/ogg/target_endpoint tar -xvf OGG_BigData_Linux_x64_19.1.0.0.5.tar -C /opt/ogg/target_endpoint。
配置环境变量# vim ~/.bashrc export OPHC管桩GG_HOME=/opt/ogg/target_endpoint export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/amd64:$JAVA_HOME/jre/lib/amd64/server:$JAVA_HOME/jre/lib/amd64/libjsig.so:$JAVA_HOME/jre/lib/amd64/server/libjvm.so:$OGG_HOME/lib export PATH=$OGG_HOME:$PATH # source ~/.bashrc
测试ggsci命令[ogg@ha-node2 ~PHC管桩]$ ggsci Oracle GoldenGate Command Interpreter Version 19.1.0.0.200714 OGGCORE_19.1.0.0.0OGGBP_PLATFORMS_200628.2141 Linux, x64, 64bit (optimized), Generic on Jun 28 2020 23:01:58 Operating system character set identified as UTF-8. Copyright (C) 1995, 2019, PHC管桩Oracle and/or its affiliates. All rights reserved. GGSCI (ha-node2) 1>
初始化目录ggsci create subdirsOgg源端配置[ha-node1]配置ogg全局变量# 进入到ogg中 su - ogg ggsci # 以ogg用户登录到oracle dblogin userid ogg password 123456 # 编辑全局变量 edit param ./globals PHC管桩 # 添加 oggschema ogg
配置管理器edit param mgr PORT 7809 DYNAMICPORTLIST 7810-7909 AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3 PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
添加复制表add trandata CDB$ROOT.test_ogg.test_ogg info trandata CDB$ROOPHC管桩T.test_ogg.test_ogg显示信息如下:GGSCI (ha-node1 as ogg@ORCLCDB/CDB$ROOT) 8> info trandata CDB$ROOT.test_ogg.test_ogg 2021-03-15 15:06:57 INFO OGG-10471 ***** Oracle Goldengate support information on table TEST_OGG.TEST_OGG ***** Oracle Goldengate support native capture on table TEST_OGG.TPHC管桩EST_OGG. Oracle Goldengate marked following column as key columns on table TEST_OGG.TEST_OGG: ID. Logging of supplemental redo log data is enabled for table CDB$ROOT.TEST_OGG.TEST_OGG. Columns supplementally logged for table CDB$ROOT.TEST_OGG.TEST_OGG: "ID". PreparPHC管桩ed CSN for table CDB$ROOT.TEST_OGG.TEST_OGG: 2291122
配置extract进程edit param extkafka extract extkafka dynamicresolution DDL INCLUDE MAPPED SETENV (ORACLE_SID = "ORCLCDB") SETENV (NLS_LANG = "american_america.AL32UTF8") userid ogg,password 123456 PHC管桩 exttrail /opt/ogg/source_endpoint/dirdat/to sourceCatalog CDB$ROOT table test_ogg.test_ogg
说明:第一行指定extract进程名称dynamicresolution——动态解析SETENV设置环境变量,分别设置了Oracle数据库以及字符集userid ggs,password ggs——GG连接Oracle数据库的帐号密码
exttrail——定义trail文件的保存位置以及文件名,注意这里文件名只能是2个字母,其余部分OGG会补齐;table——复制表的表名,支持*通配,PHC管桩必须以;结尾添加extract进程register extract extkafka database container(ORCLPDB1); 2021-03-15 17:55:33 INFO OGG-02003 Extract EXTKAFKA successfully registered with database at SCN 2319414. ADD EXTRACT extkafka,INTEGRATED TRANLOG,BEGIN NOW # 删除extkafka进程 # delete extract extkaPHC管桩fka # extract进程绑定trail文件 add exttrail /opt/ogg/source_endpoint/dirdat/to,extract extkafka
配置pump进程edit param pukafka extract pukafka passthru dynamicresolution userid ogg,password 123456 rmthost ha-node2 mgrport 7809 rmttrail /opt/ogg/PHC管桩target_endpoint/dirdat/to sourceCatalog CDB$ROOT table test_ogg.*;
说明:第一行指定extract进程名称passthru——禁止OGG与Oracle交互,这里使用pump逻辑传输,故禁止即可dynamicresolution——动态解析userid ogg,password ogg——OGG连接Oracle数据库的帐号密码
rmthost和mgrhost——目标端(kafka)OGG的mgr服务的地址以及监听端口(目标端为ha-node2)rmttrail——目标端trail文件存储位置以及名称(注PHC管桩意修改目标端的trail文件目录)
将本地trail文件和目标端trail绑定到extract进程add extract pukafka,exttrailsource /opt/ogg/source_endpoint/dirdat/to # 删除pukafka进程 # delete pukafka add rmttrail /opt/ogg/target_endpoint/dirdat/to,extract pukafka
配置define文件Oracle与MySQL,Hadoop集群(HDFS,Hive,kafka等)等之间数据传输可以定义为异构PHC管桩数据类型的传输,故需要定义表之间的关系映射,在OGG命令行执行:edit param test_ogg defsfile /opt/ogg/source_endpoint/dirdef/test_ogg.test_ogg userid ogg, password 123456 sourceCatalog CDB$ROOT table test_ogg.test_ogg;
在ogg的HOME目录执行以下:cd /opt/ogg/source_endpoint ./defgen paramfile dirprm/tesPHC管桩t_ogg.prm若执行成功,显示如下:[ogg@ha-node1 source_endpoint]$ ./defgen paramfile dirprm/test_ogg.prm *********************************************************************** Oracle GoldenGate Table Definition Generator for Oracle Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1PHC管桩054 Linux, x64, 64bit (optimized), Oracle 19c on Oct 17 2019 15:32:20 Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved. Starting at 2021-03-15 16:09:21 *********************************************************************** OperatPHC管桩ing System Version: Linux Version #1 SMP Wed Aug 7 18:08:02 UTC 2019, Release 3.10.0-1062.el7.x86_64 Node: ha-node1 Machine: x86_64 soft limit hard limit Address Space Size : unlimited unlimited Heap Size : unlimited unlimited File SizePHC管桩 : unlimited unlimited CPU Time : unlimited unlimited Process id: 19127 *********************************************************************** ** Running with the following parameters ** **********************************************************************PHC管桩* defsfile /opt/ogg/source_endpoint/dirdef/test_ogg.test_ogg userid ogg, password *** table PDB$ROOT.test_ogg.test_ogg; Could not find table PDB$ROOT.test_ogg.test_ogg. Definitions generated for 0 tables in /opt/ogg/source_endpoint/dirdef/test_ogg.test_ogg.
将PHC管桩生成的/opt/ogg/source_endpoint/dirdef/test_ogg.test_ogg发送到目标端ogg目录下的dirdefscp -r /opt/ogg/source_endpoint/dirdef/test_ogg.test_ogg root@ha-node2:/opt/ogg/target_endpoint/dirdef/。
Ogg目标端配置[ha-node2]启动Kafka集群修改trail文件权限chown ogg:oracle /opt/ogg/target_endpoint/dirdef/test_ogg.test_ogg
配置管理器mgrggsci PHC管桩 edit param mgr PORT 7809 DYNAMICPORTLIST 7810-7909 AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3 PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 3
配置checkpointedit param ./GLOBALS CHECKPOINTTABLE ogg.checkpoint配置replicate进程edit param rekafka PHC管桩 REPLICAT rekafka sourcedefs /opt/ogg/target_endpoint/dirdef/test_ogg.test_ogg TARGETDB LIBFILE libggjava.so SET property=dirprm/kafka.props REPORTCOUNT EVERY 1 MINUTES, RATE GROUPTRANSOPS 10000 MAP CDB$ROOT.test_ogg.test_ogg, TARGET CDB$ROOT.test_ogg.test_oggPHC管桩;
说明:REPLICATE rekafka定义rep进程名称sourcedefs——即在在源服务器上做的表映射文件(前面通过scp已经复制到target_endpoint目录)TARGETDB LIBFILE——定义kafka一些适配性的库文件以及配置文件,配置文件位于OGG主目录下的dirprm/kafka.props
REPORTCOUNT——复制任务的报告生成频率GROUPTRANSOPS——以事务传输时,事务合并的单位,减少IO操作;MAP——即源端与目标端的映射关系配置kafka.propscd /opt/ogg/target_endpoint/dirprm/ vim PHC管桩kafka.props #handler类型 gg.handlerlist=kafkahandler gg.handler.kafkahandler.type=kafka # kafka相关配置 gg.handler.kafkahandler.KafkaProducerConfigFile=custom_kafka_producer.properties # kafka的topic名称,无需手动创建 gg.handler.kafkahandler.topicMappingTemplPHC管桩ate=ogg_test_ogg # 传输文件的格式,支持json,xml等 gg.handler.kafkahandler.format=json # OGG for Big Data中传输模式,即op为一次SQL传输一次,tx为一次事务传输一次 gg.handler.kafkahandler.mode=op gg.classpath=dirprm/:/opt/kafka/libs/*:/opt/ogg/target_endpoint:/opt/ogg/target_endpoint/lib/*
注意删除上面中的中PHC管桩文注释配置Kafka属性:# vim custom_kafka_producer.properties bootstrap.servers=ha-node1:9092,ha-node2:9092,ha-node3:9092,ha-node4:9092,ha-node5:9092 acks=1 compression.type=gzip reconnect.backoff.ms=1000 value.serializer=org.apache.kafka.common.serialization.ByteArrayPHC管桩Serializer key.serializer=org.apache.kafka.common.serialization.ByteArraySerializer batch.size=102400 linger.ms=10000。
添加trail文件到replicate进程ggsci add replicat rekafka exttrail /opt/ogg/target_endpoint/dirdat/to,checkpointtable ogg.checkpoint
测试启动所有进程源端切换到ha-node1su - oPHC管桩gg cd /opt/ogg/source_endpoint ggsci start mgr start extkafka start pukafka # 停止 stop mgr stop extkafka stop pukafka
目标端切换到ha-node2ggsci start mgr start rekafka查看进程状态源端ggsci info all目标端ggsci infPHC管桩o all ------------ GGSCI (ha-node2) 1> info all Program Status Group Lag at Chkpt Time Since Chkpt MANAGER RUNNING REPLICAT RUNNING REKAFKA 00:00:00 00:00:03
注意: 如果发现状态是STOPPING,则可以在ogg的HOMT目录查看日志文件less ggserr.log测试同步更新效果执行以下SQL语句insert into test_ogg.test_ogPHC管桩g values(1,test); commit; update test_ogg.test_ogg set name=zhangsan where id=1; commit; delete test_ogg.test_ogg where id=1; commit;。
查看trail文件状态源端:GGSCI (ha-node1) 6> [ogg@ha-node1 source_endpoint]$ ls -l /opt/ogg/source_endpoint/dirdat/to* -rw-r-----PHC管桩 1 ogg oracle 2185 3月 15 18:02 /opt/ogg/source_endpoint/dirdat/to000000000
目标端:/opt/ogg/target_endpoint/dirdat/to* -rw-r----- 1 root root 1504 May 23 10:31 /opt/ogg/dirdat/to000000
查看Kafka topic和消息bin/kafka-topics.sh --list --bootstrap-server ha-node1:9092 bin/kafka-console-consumer.shPHC管桩 --bootstrap-server ha-node1:9092 --topic ogg_test_ogg --from-beginning
安装错误排查[FATAL] [INS-75012] Oracle GoldenGate静默安装失败报错信息:[FATAL] [INS-75012] Software Location specified is already an existing Oracle home and does not contain the selected Oracle GoldenGate install type. 原因: Software LocatPHC管桩ion specified is found registered in the central inventory already and does not contain the selected Oracle GoldenGate install type. 操作: Specify an empty directory or an Oracle home containing the selected Oracle GoldenGate install type.
解决办法:vim /opt/oracle/oraInventory/ContentsXML/inventoryPHC管桩.xml # 删除下面这一行
Classic Extract does not support multitenant container databases.报错信息:2021-03-15T15:58:28.563+0800 ERROR OGG-06220 Oracle GoldenGate Capture for Oracle, extkafka.prm: Classic Extract does not support multitenant container databases. 2021-03-15T15:58:28.563+0800 ERROR OGPHC管桩G-01668 Oracle GoldenGate Capture for Oracle, extkafka.prm: PROCESS ABENDING.
解决办法:# 需要使用 register extract extkafka database container(ORCLPDB1); # 注册extkafka到ORCLPDB1参考文档:[1] https://
docs.oracle.com/en/middleware/goldengate/core/19.1/index.html[2] https://docs.oracle.com/goldengate/cPHC管桩1230/gg-winux/GGCON/introduction-oracle-goldengate.htm
[3] https://docs.oracle.com/en/database/oracle/oracle-database/19/index.html