本文主要是介绍使用金仓kfs同步oracle数据到kadb,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景知识准备
了解kfs原理、了解《部署安装手册》
- 环境
Oracle版本:12c
Kfs版本:KingbaseFlySync-V002R002C004B20230320
数据同步方式:redo
- 安装
详细安装步骤参考
安装注意事项:
- 安装包只有一个,而不是文档中的三个。管控平台、replicator都在一个安装包里面。
- Replicator包,在管控平台登录后,使用节点安装到指定的目录里面
- 解压缩、安装完成后的目录结构:
- 节点使用图形化安装后节点的目录结构:
- 示例ini文件路径
- 所有机器都要在/etc/hosts文件中
- 日志文件位置
重点关注:fsrepsvc.log
附:
源端flysync.ini文件内容:
#Sat Aug 05 15:05:59 GMT+08:00 2023
[defaults]
install-directory = /home/flysync/oracle_kfs
profile-script = ~/.bash_profile
rmi-port = 11000
[oracle]
kufl-port = 3112
datasource-type = oracle
role = master
replication-host = 192.168.85.139
replication-port = 1521
replication-user = FLYSYNC
replication-password = flysync
repl_auto_recovery_max_attempts = 30
repl_auto_recovery_delay_interval = 60s
repl_auto_recovery_reset_interval = 300s
repl_mode = normal
property = replicator.store.kufl.fsyncOnFlush=false
property = replicator.extractor.dbms.minRowsPerBlock=1000
property = replicator.extractor.dbms.scnSegmentationThreshold=5000
property = replicator.extractor.dbms.maxLobSize=5000000
property = replicator.datasource.global.catalogPrefix=false
property = replicator.store.kufl.dataSource=global
property = replicator.extractor.dbms.lowLevelFilter=false
property = replicator.filter.bic.includeAllCols=false
property = replicator.filter.replicate.do=FLYSYNC.* //表过滤
property = replicator.filter.replicate.ignore=SYS.* //表过滤
property = replicator.extractor.dbms.tableLevelSupLog=false
property = replicator.extractor.dbms.offline=false
property = replicator.extractor.dbms.bigEndian=false
property = replicator.extractor.dbms.cacheMeta=false
property = replicator.filter.casetransform.to_upper_case=false //转换为小写,好像只需要在目标端配置,源端配置不起作用
master = kingbase
members = kingbase
datasource-oracle-service = orcl
oracle-extractor-method = redo
deployModel = 1
use_cluster = false
svc-extractor-filters=dropstatementdata,replicate //打开表过滤开关,不复制DDL
目标端flysync.ini文件内容:
#Sat Aug 05 15:05:38 GMT+08:00 2023
[defaults]
install-directory = /home/flysync/kadb_kfs
profile-script = ~/.bash_profile
rmi-port = 11000
[kadb]
kufl-port = 3113
datasource-type = kadb
role = slave
replication-host = 192.168.85.129
replication-port = 5432
replication-user = mppadmin
replication-password = mppadmin
repl_auto_recovery_max_attempts = 30
repl_auto_recovery_delay_interval = 60s
repl_auto_recovery_reset_interval = 300s
repl_mode = normal
property = replicator.applier.dbms.optimizeRowEvents=true
property = replicator.applier.dbms.maxRowBatchSize=20
property = replicator.applier.dbms.enableTypeOp=false
property = replicator.applier.dbms.conflictResolve=false
property = replicator.log.slave.updates=false
property = replicator.extractor.kufl-remote.compressType=none
property = replicator.applier.dbms.enable_handle_error=false
svc-remote-filters=casetransform,rename
property = replicator.filter.casetransform.to_upper_case=false //转换为小写
master = kingbase
members = 192.168.85.129
master-kufl-port = 3112
svc-parallelization-type = none
kadb-dbname = postgres
- 问题解决
- 源端没有配置表过滤,导致目标端日志文件fsrepsvc.log报错
Schema “SYS” not exists
解决方法:
源端(目标端)配置表过滤
在源/目标端的flysync.ini文件添加:
svc-extractor-filters=dropstatementdata,replicate //打开表过滤开关,不复制DDL
property = replicator.filter.replicate.do=FLYSYNC.* //表过滤
property = replicator.filter.replicate.ignore=SYS.* //表过滤
- oracle默认大写,kadb默认小写,导致报错
Schema “FLYSYNC” not exists
解决方法:
目标端配置大小写转换
在目标端的flysync.ini文件添加
property = replicator.filter.casetransform.to_upper_case=false //转换为小写
- 源端和目标端的seqno 对不上如何处理?
日志找不到了
解决方法:
可以在目标端进行reset 操作,使得目标端seqno 重新初始化即可
fsrepctl –service kadb reset
或者,源端和目标端都reset操作
或者使用下面的方法:
1、在fsrepsvc.log里查找报错语句的seqno
2、fsrepctl -service 服务名 offline
3、fsrectl -service 服务名 offline
查看服务的状态是否是offline:normal,如果不是,再次执行
4、kufl -service 服务名 purge -low 找到的seqno
5、kufl -service 服务名 index
查看最后一条的seqno范围是否已经是小于找到的seqno,如果没有,上面的purge再执行一次,直到index出来的最后一条的seqno小于找到的seqno
6、fsrepctl -service 服务名 online
- 源端和目标端Schema发生改变
目标端添加参数:
svc-remote-filters=rename
当svc-remote-filters 中加入rename 关键字,表明开启了名称映射,需要修改对应的映射
文件,路径为安装目录/filters-config/rename.csv
rename 文件的格式为
原模式, 原表, 原列, 新模式, 新表, 新列
其中
– * 表示所有
– - 表示保持不变
S1,T1,*,S2,T2,- 将S1 模式下的T1 表映射到S2 模式下的T2 表
S1,*,*,S2,-,- 将S1 模式下的所有表映射到S2 模式下
这篇关于使用金仓kfs同步oracle数据到kadb的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!