apache/seatunnel · error · DmlParserException
DML statement couldn't be parsed. Please open a Jira issue…
Error message
DML statement couldn't be parsed. Please open a Jira issue with the statement '${redoSql}'. What it means
When parsing a DML statement from SQL_REDO, the parser throws DmlParserException; parseDmlStatement wraps it, re-throwing DmlParserException with a message asking to report the redo SQL via a Jira issue. This means LogMiner emitted a DML string the connector's parser cannot understand — usually a parser gap rather than user misconfiguration.
Solutions
- Capture the full redoSql and open a Debezium Jira issue as the message instructs (include Oracle version and connector version).
- Check for a newer Debezium release — many parser gaps are fixed incrementally; upgrade the connector artifact.
- As a workaround, adjust application write patterns that produce the exotic DML (e.g. avoid special characters needing nonstandard escaping).
- If only one table is affected, temporarily exclude it from capture until the parser fix lands.
Example fix
null
Defensive patterns
Strategy: try-catch
Try / catch
try {
event = parseDmlStatement(redoSql);
} catch (DmlParserException e) {
LOGGER.warn("Unparseable DML, capture for Jira: {}", redoSql, e);
} Prevention
- Track Debezium releases for DML parser fixes and upgrade promptly
- Avoid exotic literal escaping patterns in application writes
- File the Jira issue with the full redo SQL as the message requests
- Temporarily exclude the offending table from capture until fixed
When it happens
Trigger: AbstractLogMinerEventProcessor's DML parse path (called while handling data events) encounters a redo SQL string whose structure defeats the DmlParser — e.g. novel syntax, unusual quoting, long identifiers, or unsupported predicates in the WHERE clause.
Common situations: Oracle-generated DML with unusual column/value escaping (embedded quotes, special characters); inserts/updates with subquery-style predicates after an Oracle upgrade; long column lists exceeding parser assumptions; NLS/session-specific formatting of literals.
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
- Oracle failed to re-construct redo SQL
- Unable to parse unsupported LOB_WRITE SQL
- Cannot get maximum archive log SCN as no archive logs are…
- Cannot get maximum archive log SCN as no logs were…
- Failed to calculate oldest SCN available in logs
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/4fa3e0009463037c.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/io/debezium/connector/oracle/logminer/processor/AbstractLogMinerEventProcessor.java:1093
*
* @param redoSql the redo SQL statement
* @param table the table the SQL statement is for
* @param transactionId the associated transaction id for the SQL statement
* @return a parse object for the redo SQL statement
*/
private LogMinerDmlEntry parseDmlStatement(String redoSql, Table table, String transactionId) {
LogMinerDmlEntry dmlEntry;
try {
Instant parseStart = Instant.now();
dmlEntry = dmlParser.parse(redoSql, table);
metrics.addCurrentParseTime(Duration.between(parseStart, Instant.now()));
} catch (DmlParserException e) {
String message =
"DML statement couldn't be parsed."
+ " Please open a Jira issue with the statement '"
+ redoSql
+ "'.";
throw new DmlParserException(message, e);
}
if (dmlEntry.getOldValues().length == 0) {
if (EventType.UPDATE == dmlEntry.getEventType()
|| EventType.DELETE == dmlEntry.getEventType()) {
LOGGER.warn("The DML event '{}' contained no before state.", redoSql);
metrics.incrementWarningCount();
}
}
return dmlEntry;
}
private static Pattern LOB_WRITE_SQL_PATTERN =
Pattern.compile(
"(?s).* := ((?:HEXTORAW\\()?'.*'(?:\\))?);\\s*dbms_lob.write\\([^,]+,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,[^,]+\\);.*");
/**View on GitHub (pinned to cf67b549a7)