{"record":{"id":"3ffc1c087f1f516b","repo":"apache/seatunnel","slug":"oracle-only-supports-single-database-databaselist","errorCode":null,"errorMessage":"Oracle only supports single database, databaseList: ${databaseList}","messagePattern":"Oracle only supports single database, databaseList: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/oracle/config/OracleSourceConfigFactory.java","lineNumber":193,"sourceCode":"                        hostname,\n                        port,\n                        username,\n                        password,\n                        originUrl,\n                        fetchSize,\n                        serverTimeZone,\n                        connectTimeoutMillis,\n                        connectMaxRetries,\n                        connectionPoolSize,\n                        exactlyOnce);\n        // Propagate the enableConcurrentRead flag so the chunk splitter can skip split analysis.\n        config.setEnableConcurrentRead(this.enableConcurrentRead);\n        return config;\n    }\n\n    private void validateConfig() throws IllegalArgumentException {\n        if (databaseList.size() != 1) {\n            throw new IllegalArgumentException(\n                    \"Oracle only supports single database, databaseList: \" + databaseList);\n        }\n        for (String database : databaseList) {\n            for (int i = 0; i < database.length(); i++) {\n                if (Character.isLetter(database.charAt(i))\n                        && !Character.isUpperCase(database.charAt(i))) {\n                    throw new IllegalArgumentException(\n                            \"Oracle database name must be in all uppercase, database: \" + database);\n                }\n            }\n        }\n        for (String table : tableList) {\n            if (table.split(\"\\\\.\").length != 3 && table.split(\"\\\\.\").length != 2) {\n                throw new IllegalArgumentException(\n                        \"Oracle table name format must be is: ${database}.${schema}.${table} or ${schema}.${table}, table: \"\n                                + table);\n            }\n            for (int i = 0; i < table.length(); i++) {","sourceCodeStart":175,"sourceCodeEnd":211,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/oracle/config/OracleSourceConfigFactory.java#L175-L211","documentation":"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.","triggerScenarios":"Configuring database-list = [\"ORCL1\",\"ORCL2\"] and calling create(), which invokes validateConfig().","commonSituations":"Users migrating from MySQL CDC (which allows many databases) list multiple Oracle databases; also occurs when a template config leaves a placeholder second entry.","solutions":["Keep exactly one database in database-list.","To read from multiple Oracle databases, run one CDC job per database.","Remove placeholder/empty entries from database-list."],"exampleFix":"// before\ndatabase-list = [\"ORCL1\", \"ORCL2\"]\n// after\ndatabase-list = [\"ORCL1\"]","handlingStrategy":"validation","validationCode":"if (databaseList.size() != 1) throw new IllegalArgumentException(\"Oracle CDC supports exactly one database\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep one database per Oracle CDC job; split multi-DB workloads into separate jobs.","Remove placeholder entries from database-list before submission."],"tags":["oracle-cdc","config-validation","multi-database"],"backgroundTag":"unsupported-config-value","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}