apache/seatunnel · error · IllegalArgumentException

Oracle only supports single database, databaseList

Error message

Oracle only supports single database, databaseList: ${databaseList}

What it means

Thrown by OracleSourceConfigFactory.validateConfig when database-list contains more than one database name. The Oracle CDC connector's redo-log reader attaches to a single database/PDB per job, so multi-database lists cannot be honored and validation rejects them.

Solutions

  1. Keep exactly one database in database-list.
  2. To read from multiple Oracle databases, run one CDC job per database.
  3. Remove placeholder/empty entries from database-list.

Example fix

// before
database-list = ["ORCL1", "ORCL2"]
// after
database-list = ["ORCL1"]
Defensive patterns

Strategy: validation

Validate before calling

if (databaseList.size() != 1) throw new IllegalArgumentException("Oracle CDC supports exactly one database");

Prevention

When it happens

Trigger: Configuring database-list = ["ORCL1","ORCL2"] and calling create(), which invokes validateConfig().

Common situations: Users migrating from MySQL CDC (which allows many databases) list multiple Oracle databases; also occurs when a template config leaves a placeholder second entry.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/3ffc1c087f1f516b. 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:193

                        hostname,
                        port,
                        username,
                        password,
                        originUrl,
                        fetchSize,
                        serverTimeZone,
                        connectTimeoutMillis,
                        connectMaxRetries,
                        connectionPoolSize,
                        exactlyOnce);
        // Propagate the enableConcurrentRead flag so the chunk splitter can skip split analysis.
        config.setEnableConcurrentRead(this.enableConcurrentRead);
        return config;
    }

    private void validateConfig() throws IllegalArgumentException {
        if (databaseList.size() != 1) {
            throw new IllegalArgumentException(
                    "Oracle only supports single database, databaseList: " + databaseList);
        }
        for (String database : databaseList) {
            for (int i = 0; i < database.length(); i++) {
                if (Character.isLetter(database.charAt(i))
                        && !Character.isUpperCase(database.charAt(i))) {
                    throw new IllegalArgumentException(
                            "Oracle database name must be in all uppercase, database: " + database);
                }
            }
        }
        for (String table : tableList) {
            if (table.split("\\.").length != 3 && table.split("\\.").length != 2) {
                throw new IllegalArgumentException(
                        "Oracle table name format must be is: ${database}.${schema}.${table} or ${schema}.${table}, table: "
                                + table);
            }
            for (int i = 0; i < table.length(); i++) {

View on GitHub (pinned to cf67b549a7)