Flink Oracle CDC logminer ogg 对比, PDB logminer CDC 测试

维度 Flink CDC(主库) Flink CDC(备库) Flink connector(Kafka) ADG (Active Data Guard)
同步机制 基于 LogMiner 解析 Redo Log 需通过OGG 同步备库基于 LogMiner 解析 Redo Log 需通过OGG 捕获日志后写入 Kafka 物理复制,主备数据块一致
架构特点 需直连主库 独立进程,低侵入性 独立进程,低侵入性 仅支持查询,无法捕获实时变更
数据链路 oracle主库 -> Flink cdc Oracle 主库 -> ogg -> oracle 备库 -> Flink cdc Oracle 主库 -> ogg -> kafka -> Flink cdc -
限制与成本 主库压力 商业授权成本高部署复杂度高 商业授权成本高部署复杂度高 仅数据容灾,无变更捕获能力
速率 单线程上限 ≤1万条/秒 单线程上限 ≤1万条/秒 数千至数万条/秒 -
实时性 直接读取Redo Log,延迟通常在秒级 备库日志同步存在延迟 备库日志同步存在延迟 -
兼容性 Flink CDC原生支持,无需额外改造 Flink CDC原生支持,无需额外改造 需要额外开发 -
功能完整 支持DDL变更捕获支持存量支持增量 支持DDL变更捕获支持存量支持增量 支持DDL变更捕获存量需要额外处理支持增量 只支持存量数据

1、Table APi 使用

String sourceDDL = "CREATE TEMPORARY TABLE oracle_source (\n" +
                "  ID INT,\n" +
                "  NAME STRING,\n" +
                "  PRIMARY KEY(ID) NOT ENFORCED\n" +
                ") WITH (\n" +
                "  'connector' = 'oracle-cdc',\n" +
                "  'hostname' = '***',\n" +
                "  'port' = '1521',\n" +
                "  'username' = 'C##family',\n" +
                "  'password' = '***',\n" +
                "  'database-name' = 'ORCLPDB1',\n" +
                "  'debezium.database.pdb.name' = 'ORCLPDB1',\n" +
                "  'schema-name' = 'ZZZ',\n" +
                "  'table-name' = 'OGG1',\n" +
                "  'scan.startup.mode' = 'initial',\n" +
                "  'debezium.log.mining.strategy' = 'online_catalog',\n" +
                "  'debezium.snapshot.mode'='initial' "+
                ")";
        tableEnv.executeSql(sourceDDL);
        tableEnv.executeSql("CREATE TABLE print_sink (\n" +
                "  id INT,\n" +
                "  name STRING\n" +
                ") WITH (\n" +
                "  'connector' = 'print'  -- 关键配置\n" +
                ");");

        tableEnv.executeSql("INSERT INTO print_sink SELECT * FROM oracle_source");

2、debezium 配置

"log.mining.strategy" = "online_catalog"
"database.pdb.name" = "ORCLPDB1"

oracleSourceBuilder
                .hostname(host)
                .username(username)
                .password(password)
                .port(port)
                .databaseList("ORCLPDB1")
                .schemaList("ZZZ")
                .serverTimeZone(ZoneId.systemDefault().toString())
                .startupOptions(StartupOptions.initial())
                .tableList("OGG1");

3、oracle 授权用户

GRANT CREATE SESSION TO C##family CONTAINER=ALL;
GRANT SET CONTAINER TO C##family CONTAINER=ALL;
GRANT SELECT ON V_$DATABASE to C##family CONTAINER=ALL;
GRANT FLASHBACK ANY TABLE TO C##family CONTAINER=ALL;
GRANT SELECT ANY TABLE TO C##family CONTAINER=ALL;
GRANT SELECT_CATALOG_ROLE TO C##family CONTAINER=ALL;
GRANT EXECUTE_CATALOG_ROLE TO C##family CONTAINER=ALL;
GRANT SELECT ANY TRANSACTION TO C##family CONTAINER=ALL;
GRANT LOGMINING TO C##family CONTAINER=ALL;

GRANT CREATE TABLE TO C##family CONTAINER=ALL;
GRANT LOCK ANY TABLE TO C##family CONTAINER=ALL;
GRANT CREATE SEQUENCE TO C##family CONTAINER=ALL;

GRANT EXECUTE ON DBMS_LOGMNR TO C##family CONTAINER=ALL;
GRANT EXECUTE ON DBMS_LOGMNR_D TO C##family CONTAINER=ALL;

GRANT SELECT ON V_$LOG TO C##family CONTAINER=ALL;
GRANT SELECT ON V_$LOG_HISTORY TO C##family CONTAINER=ALL;
GRANT SELECT ON V_$LOGMNR_LOGS TO C##family CONTAINER=ALL;
GRANT SELECT ON V_$LOGMNR_CONTENTS TO C##family CONTAINER=ALL;
GRANT SELECT ON V_$LOGMNR_PARAMETERS TO C##family CONTAINER=ALL;
GRANT SELECT ON V_$LOGFILE TO C##family CONTAINER=ALL;
GRANT SELECT ON V_$ARCHIVED_LOG TO C##family CONTAINER=ALL;
GRANT SELECT ON V_$ARCHIVE_DEST_STATUS TO C##family CONTAINER=ALL;

问题

caused by: io.debezium.debeziumexception: the db history topic or its content is fully or partially missing. please check database history topic configuration and re-execute the snapshot.


OracleConnectionUtils listTables 方法需确保CDC的表可以获取到 

在这里插入图片描述

你可能感兴趣的:(Flink Oracle CDC logminer ogg 对比, PDB logminer CDC 测试)