apache/seatunnel · error · IllegalArgumentException
Debezium log mining strategy must be set to…
Error message
Debezium log mining strategy must be set to redo_log_catalog when schema changes are enabled
What it means
Thrown in OracleSourceConfigFactory.create when schema-change events are enabled but the Debezium 'log.mining.strategy' property is left at the default (not redo_log_catalog). Capturing DDL changes requires redo_log_catalog mining; the incompatible default strategy cannot emit schema changes, so startup fails fast with this explicit error.
Solutions
- Add debezium.properties { debezium.log.mining.strategy = redo_log_catalog }.
- If redo_log_catalog is too expensive, disable schema changes (schema-changes.enabled = false).
- Verify no other key overrides log.mining.strategy back to online_catalog after the check.
Example fix
// before
schema-changes.enabled = true
// after
schema-changes.enabled = true
debezium.properties { "log.mining.strategy" = "redo_log_catalog" } Defensive patterns
Strategy: validation
Validate before calling
boolean schemaChanges = true; // as configured
String strategy = dbzProps.getProperty("debezium.log.mining.strategy");
if (schemaChanges && !"redo_log_catalog".equals(strategy)) {
throw new IllegalArgumentException("set debezium.log.mining.strategy=redo_log_catalog");
} Prevention
- Pair schema-changes.enabled=true with log.mining.strategy=redo_log_catalog in every Oracle CDC template.
- Review merged debezium.properties for keys overriding the mining strategy.
When it happens
Trigger: Setting schema-changes.enabled=true (or passing debezium properties enabling schema changes) while 'debezium.log.mining.strategy' is absent or set to 'online_catalog'; create() detects the combination and throws before building OracleSourceConfig.
Common situations: Users enable schema evolution for pipelines whose tables are being altered online, but leave the Debezium mining strategy at its default; happens especially when copying sample configs that omit log.mining.strategy.
Understand the failure class
Background: Conflicting config options: "cannot be used together" — configuration validation errors across open-source libraries — this error's family across 162 libraries.
Related errors
- Cannot convert timestamp to SCN. Make sure the specified…
- Cannot read the redo log position via 'SELECT CURRENT_SCN…
- checkpointId is already set
- Column already exists in table . Skipping add column…
- Column already exists in table . Skipping add column…
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/5b607c9fa498d314.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/oracle/config/OracleSourceConfigFactory.java:152
}
if (splits.length == 3) {
return String.join(".", splits[1], splits[2]);
}
throw new IllegalArgumentException(
"Invalid table name: " + tableStr);
})
.collect(Collectors.joining(",")));
}
// override the user-defined debezium properties
if (dbzProperties != null) {
String debeziumSchemaChanges =
dbzProperties.getProperty(
SCHEMA_CHANGE_KEY, String.valueOf(schemaChangeEnabled));
String debeziumLogMiningStrategy = dbzProperties.getProperty(LOG_MINING_STRATEGY_KEY);
if (Boolean.parseBoolean(debeziumSchemaChanges)
&& LOG_MINING_STRATEGY_DEFAULT.equals(debeziumLogMiningStrategy)) {
throw new IllegalArgumentException(
"Debezium log mining strategy must be set to redo_log_catalog when schema changes are enabled");
}
props.putAll(dbzProperties);
}
OracleSourceConfig config =
new OracleSourceConfig(
useSelectCount,
skipAnalyze,
startupConfig,
stopConfig,
databaseList,
tableList,
splitSize,
splitColumn,
distributionFactorUpper,
distributionFactorLower,
sampleShardingThreshold,View on GitHub (pinned to cf67b549a7)