apache/seatunnel · error · IllegalArgumentException
Oracle database name must be in all uppercase, database
Error message
Oracle database name must be in all uppercase, database: ${database} What it means
Thrown by validateConfig when a database name in database-list contains any lowercase letter. Oracle stores database/PDB names in uppercase, and the connector relies on exact uppercase matching against redo-log metadata, so mixed-case names would silently match nothing.
Solutions
- Uppercase the database name in database-list, e.g. ORCLPDB1.
- Check v$database.name / v$pdbs for the exact uppercase name.
- Avoid quoted mixed-case identifiers in the database configuration.
Example fix
// before database-list = ["orclpdb1"] // after database-list = ["ORCLPDB1"]
Defensive patterns
Strategy: validation
Validate before calling
if (!database.equals(database.toUpperCase(java.util.Locale.ROOT)))
throw new IllegalArgumentException("database must be uppercase: " + database); Prevention
- Uppercase database names when generating configs programmatically (toUpperCase(Locale.ROOT)).
- Confirm names against v$database / v$pdbs.
When it happens
Trigger: database-list = ["orclpdb1"] or ["OrclPdb1"] passed to OracleSourceConfigFactory before create().
Common situations: Users write the database name in the case it appears in their connection URL or OS, unaware Oracle identifiers are conventionally uppercase; frequent after copying lowercase service names.
Understand the failure class
Background: "Invalid value" and "allowed values are" config errors: what your library rejected and how to fix it — this error's family across 41 libraries.
Related errors
- Oracle table name must be in all uppercase, table
- Invalid table name
- Oracle-CDC specific startup mode uses…
- Oracle only supports single database, databaseList
- Oracle table name format must be is
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/ad94e8f683d1b55a.
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:200
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++) {
if (Character.isLetter(table.charAt(i))
&& !Character.isUpperCase(table.charAt(i))) {
throw new IllegalArgumentException(
"Oracle table name must be in all uppercase, table: " + table);
}
}
}View on GitHub (pinned to cf67b549a7)