apache/seatunnel · error · JdbcConnectorException
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED
Error message
Unsupported JDBC table_options for dialect '${dialectName}': ${unsupportedOptions}. Supported keys: ${supportedOptions} What it means
OracleDialect.validateTableOptions checks the user-supplied table_options map against the Oracle-supported keys (tablespace, pctfree). Any option outside that allowlist causes a JdbcConnectorException with CONFIG_VALIDATION_FAILED listing the unsupported and supported keys. This fails fast before DDL generation rather than silently dropping options.
Source
Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleDialect.java:546
.append(", 'NLS_SORT=")
.append(collate)
.append("')");
return sql.toString();
} else {
return "char_val";
}
}
@Override
public void validateTableOptions(Map<String, String> tableOptions) {
if (tableOptions == null || tableOptions.isEmpty()) {
return;
}
Set<String> unsupportedOptions = new LinkedHashSet<>(tableOptions.keySet());
unsupportedOptions.removeAll(SUPPORTED_TABLE_OPTIONS);
if (!unsupportedOptions.isEmpty()) {
throw new JdbcConnectorException(
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
String.format(
"Unsupported JDBC table_options for dialect '%s': %s. Supported keys: %s",
dialectName(),
String.join(", ", unsupportedOptions),
String.join(", ", SUPPORTED_TABLE_OPTIONS)));
}
for (Map.Entry<String, String> entry : tableOptions.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
if (StringUtils.isBlank(value)) {
throw new JdbcConnectorException(
SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED,
String.format(
"Invalid JDBC table_options for dialect '%s': key '%s' must not be blank",
dialectName(), key));
}View on GitHub (pinned to cf67b549a7)
Solutions
- Remove unsupported keys from table_options, keeping only 'tablespace' and 'pctfree'
- Fix typos in option keys to match the supported list exactly (case-sensitively as listed in the error message)
- If the option is genuinely needed for Oracle DDL, request/implement support in OracleDialect.SUPPORTED_TABLE_OPTIONS
Example fix
// before
table_options = {
ENGINE = "InnoDB"
pctfree = "10"
}
// after
table_options = {
pctfree = "10"
tablespace = "USERS"
} Defensive patterns
Strategy: validation
Validate before calling
Set<String> allowed = Set.of("tablespace", "pctfree");
if (!allowed.containsAll(tableOptions.keySet())) throw new IllegalArgumentException("Unsupported table_options for Oracle: " + tableOptions.keySet()); Try / catch
try {
submitJob(config);
} catch (JdbcConnectorException e) {
if (e.getSeaTunnelApiErrorCode() == SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED) { /* fix config */ }
} Prevention
- Only use keys documented for the JDBC Oracle dialect in table_options
- Never copy table_options between different dialects
- Validate config keys before job submission (CI config lint)
- Read the supported-keys list printed in the error message
When it happens
Trigger: A JDBC sink creating an Oracle table with table_options containing keys other than 'tablespace' or 'pctfree' (typos, MySQL-style options like ENGINE/CHARSET copied from another dialect config).
Common situations: Copy-pasting table_options from a MySQL/Doris connector config into an Oracle sink; misspelling 'pctfree' or 'tablespace'; adding extra tuning options not implemented by the Oracle dialect.
Related errors
- Invalid Oracle JDBC URL format: [%s], expected pattern: jdbc
- CONFIG_VALIDATION_FAILED
- CONFIG_VALIDATION_FAILED
- CONFIG_VALIDATION_FAILED
- SeaTunnelAPIErrorCode.CONFIG_VALIDATION_FAILED
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/a979cc50edce8062.
Report an issue: GitHub.