apache/seatunnel · critical · DebeziumException
Supplemental logging not properly configured. Use: ALTER…
Error message
Supplemental logging not properly configured. Use: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA
What it means
Before streaming, checkDatabaseAndTableState verifies Oracle's supplemental logging setup. If neither ALL nor MIN supplemental logging is enabled at the database level, LogMiner cannot produce complete before-images and row identification, so the connector refuses to start with this DebeziumException. This is a prerequisite-check failure, not a runtime data problem.
Solutions
- Run ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; as a DBA-privileged user.
- Preferably enable full supplemental logging: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; then restart the connector.
- Verify with SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_ALL FROM V$DATABASE; both should be non-YES->YES/IMPLICIT as appropriate.
- Also add table-level logging for captured tables: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS; plus ALTER TABLE <schema>.<table> ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;.
Example fix
-- before: connector fails supplemental-logging check SQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE; -- NO -- after SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA; SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
Defensive patterns
Strategy: validation
Validate before calling
SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_ALL FROM V$DATABASE; -- proceed only if at least MIN is YES/IMPLICIT
Try / catch
try {
startConnector();
} catch (DebeziumException e) {
if (e.getMessage().contains("Supplemental logging not properly configured")) {
// run ALTER DATABASE ADD SUPPLEMENTAL LOG DATA via DBA, then restart
} else { throw e; }
} Prevention
- Bake 'ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;' into database provisioning runbooks
- Re-verify supplemental logging after any database restore/clone
- Add table-level supplemental logging for every captured table
- Include the V$DATABASE check in pre-flight health scripts
When it happens
Trigger: execute -> checkDatabaseAndTableState finds isDatabaseAllSupplementalLoggingEnabled and isDatabaseMinSupplementalLoggingEnabled both false — i.e. SELECT SUPPLEMENTAL_LOG_DATA_MIN/ALL FROM V$DATABASE both show NO.
Common situations: Fresh Oracle database never configured for CDC; DBA recreated the database or restored from a dump without reapplying supplemental logging settings; using a log-mining user that can query V$DATABASE but the DBA skipped the setup steps in the Debezium Oracle connector docs.
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
- Cannot get maximum archive log SCN as no archive logs are…
- Cannot get maximum archive log SCN as no logs were…
- DML statement couldn't be parsed. Please open a Jira issue…
- Failed to calculate oldest SCN available in logs
- Failed to resolve current SCN
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/859ac7d034d3b92f.
Report an issue: GitHub.
Appendix: source
Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/io/debezium/connector/oracle/logminer/LogMinerStreamingChangeEventSource.java:864
* @param schema connector's database schema, should not be {@code null}
* @throws SQLException if a database exception occurred
*/
private void checkDatabaseAndTableState(
OracleConnection connection, String pdbName, OracleDatabaseSchema schema)
throws SQLException {
final Instant start = Instant.now();
LOGGER.trace(
"Checking database and table state, this may take time depending on the size of your schema.");
try {
if (pdbName != null) {
connection.setSessionToPdb(pdbName);
}
// Check if ALL supplemental logging is enabled at the database
if (!isDatabaseAllSupplementalLoggingEnabled(connection)) {
// Check if MIN supplemental logging is enabled at the database
if (!isDatabaseMinSupplementalLoggingEnabled(connection)) {
throw new DebeziumException(
"Supplemental logging not properly configured. "
+ "Use: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA");
}
// Check if ALL COLUMNS supplemental logging is enabled for each captured table
for (TableId tableId : schema.tableIds()) {
if (!connection.isTableExists(tableId)) {
LOGGER.warn(
"Database table '{}' no longer exists, supplemental log check skipped",
tableId);
} else if (!isTableAllColumnsSupplementalLoggingEnabled(connection, tableId)) {
LOGGER.warn(
"Database table '{}' not configured with supplemental logging \"(ALL) COLUMNS\"; "
+ "only explicitly changed columns will be captured. "
+ "Use: ALTER TABLE {}.{} ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS",
tableId,
tableId.schema(),
tableId.table());View on GitHub (pinned to cf67b549a7)