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

  1. Qualify the table as SCHEMA.TABLE (e.g. HR.EMPLOYEES) in table-names.
  2. If specifying the PDB/database, use exactly DATABASE.SCHEMA.TABLE (e.g. ORCLPDB1.HR.EMPLOYEES); the database part must match database-list.
  3. Check for stray dots or empty segments in the table name string (trailing '.' etc.).
  4. 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

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


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)