apache/seatunnel · error · IllegalArgumentException
Oracle-CDC specific startup mode uses…
Error message
Oracle-CDC specific startup mode uses startup.specific-offset.scn instead of file or position offsets.
What it means
When startup.mode = specific, Oracle CDC positions the reader at an SCN, not at a binlog-style file/position. getOracleStartupConfig therefore rejects startup.specific-offset.file or startup.specific-offset.pos if either is set, since those generic JDBC-source offsets are meaningless for Oracle redo logs.
Solutions
- Delete startup.specific-offset.file and startup.specific-offset.pos from the config.
- Specify startup.specific-offset.scn with the target SCN instead.
- Obtain a current SCN via SELECT current_scn FROM v$database if unsure.
Example fix
// before startup.mode = "specific" startup.specific-offset.file = "mysql-bin.000001" startup.specific-offset.pos = 4 // after startup.mode = "specific" startup.specific-offset.scn = 2518210
Defensive patterns
Strategy: validation
Validate before calling
if ("specific".equals(config.get("startup.mode")) &&
(config.hasPath("startup.specific-offset.file") || config.hasPath("startup.specific-offset.pos")))
throw new IllegalArgumentException("use startup.specific-offset.scn for Oracle"); Prevention
- Never copy MySQL file/pos startup blocks into Oracle CDC configs.
- Use startup.specific-offset.scn exclusively for Oracle specific mode.
When it happens
Trigger: startup.mode = "specific" combined with startup.specific-offset.file = "..." or startup.specific-offset.pos set; getStartupConfig calls getOracleStartupConfig and hits the guard after the non-specific branch.
Common situations: Users copy a MySQL CDC specific-offset config (file + pos) and reuse it for Oracle; templates shared between MySQL/Oracle jobs.
Related errors
- startup.specific-offset.scn is only supported when…
- Convert timestamp to redoLog offset error
- Invalid table name
- not supported create new Offset by filename and position.
- Oracle database name must be in all uppercase, database
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/6ce08fff2f679af7.
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/source/OracleIncrementalSource.java:121
Optional<Long> startupSpecificOffsetScn =
config.getOptional(OracleIncrementalSourceOptions.STARTUP_SPECIFIC_OFFSET_SCN);
if (startupMode != StartupMode.SPECIFIC) {
if (startupSpecificOffsetScn.isPresent()) {
throw new IllegalArgumentException(
OracleIncrementalSourceOptions.STARTUP_SPECIFIC_OFFSET_SCN.key()
+ " is only supported when startup.mode is specific.");
}
return new StartupConfig(
startupMode,
config.get(SourceOptions.STARTUP_SPECIFIC_OFFSET_FILE),
config.get(SourceOptions.STARTUP_SPECIFIC_OFFSET_POS),
config.get(SourceOptions.STARTUP_TIMESTAMP));
}
if (config.getOptional(SourceOptions.STARTUP_SPECIFIC_OFFSET_FILE).isPresent()
|| config.getOptional(SourceOptions.STARTUP_SPECIFIC_OFFSET_POS).isPresent()) {
throw new IllegalArgumentException(
"Oracle-CDC specific startup mode uses "
+ OracleIncrementalSourceOptions.STARTUP_SPECIFIC_OFFSET_SCN.key()
+ " instead of file or position offsets.");
}
Long scn =
startupSpecificOffsetScn.orElseThrow(
() ->
new IllegalArgumentException(
OracleIncrementalSourceOptions.STARTUP_SPECIFIC_OFFSET_SCN
.key()
+ " is required when startup.mode is specific."));
if (scn <= 0) {
throw new IllegalArgumentException(
OracleIncrementalSourceOptions.STARTUP_SPECIFIC_OFFSET_SCN.key()
+ " must be greater than 0.");
}
View on GitHub (pinned to cf67b549a7)