apache/seatunnel · error · IllegalArgumentException
Invalid table name
Error message
Invalid table name: ${tableStr} What it means
Thrown by OracleSourceConfigFactory.create while normalizing table identifiers for Debezium. Each table name is split on '.'; only 2-part (schema.table) or 3-part (database.schema.table) names are accepted — a 3-part name has the database segment dropped because Oracle CDC supports a single database. Any other segment count (1, 4+, empty segments) makes the name impossible to normalize, so the factory rejects it.
Solutions
- Qualify the table as SCHEMA.TABLE (e.g. HR.EMPLOYEES) in table-names.
- If specifying the PDB/database, use exactly DATABASE.SCHEMA.TABLE (e.g. ORCLPDB1.HR.EMPLOYEES); the database part must match database-list.
- Check for stray dots or empty segments in the table name string (trailing '.' etc.).
- Ensure case matches: Oracle identifiers must be uppercase unless quoted.
Example fix
// before table-names = ["employees"] // after table-names = ["HR.EMPLOYEES"]
Defensive patterns
Strategy: validation
Validate before calling
for (String t : tableList) {
String[] p = t.split("\\.");
if (p.length != 2 && p.length != 3) throw new IllegalArgumentException("Bad table name: " + t);
} Prevention
- Always qualify tables as SCHEMA.TABLE or DATABASE.SCHEMA.TABLE.
- Trim and sanity-check table names read from variables/templates before building the factory.
When it happens
Trigger: Calling create() on an OracleSourceConfigFactory whose tableList contains an entry that is not 'SCHEMA.TABLE' and not 'DATABASE.SCHEMA.TABLE', e.g. a bare table name 'MY_TABLE' or a fully-qualified name with extra parts 'DB.SCHEMA.TABLE.PARTITION'.
Common situations: Users copy a MySQL-style table path, paste a table name without schema qualification, or include quoted/dotted identifiers with extra dot segments; also happens after renaming a config key so the value no longer matches the expected format.
Understand the failure class
Background: "Invalid ... format", "must be in format X", "does not look like a ..." — invalid argument format errors across CLI tools and libraries — this error's family across 17 libraries.
Related errors
- Oracle table name format must be is
- Oracle-CDC specific startup mode uses…
- Oracle database name must be in all uppercase, database
- Oracle only supports single database, databaseList
- Oracle table name must be in all uppercase, table
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/bd25c86cd7d613b5.
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:138
if (schemaList != null) {
props.setProperty("schema.include.list", String.join(",", schemaList));
}
if (tableList != null) {
// Oracle identifier is of the form schemaName.tableName
props.setProperty(
"table.include.list",
tableList.stream()
.map(
tableStr -> {
String[] splits = tableStr.split("\\.");
if (splits.length == 2) {
return tableStr;
}
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);
}View on GitHub (pinned to cf67b549a7)