{"record":{"id":"859ac7d034d3b92f","repo":"apache/seatunnel","slug":"supplemental-logging-not-properly-configured-use","errorCode":null,"errorMessage":"Supplemental logging not properly configured. Use: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA","messagePattern":"Supplemental logging not properly configured\\. Use: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA","errorType":"exception","errorClass":"DebeziumException","httpStatus":null,"severity":"critical","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/io/debezium/connector/oracle/logminer/LogMinerStreamingChangeEventSource.java","lineNumber":864,"sourceCode":"     * @param schema connector's database schema, should not be {@code null}\n     * @throws SQLException if a database exception occurred\n     */\n    private void checkDatabaseAndTableState(\n            OracleConnection connection, String pdbName, OracleDatabaseSchema schema)\n            throws SQLException {\n        final Instant start = Instant.now();\n        LOGGER.trace(\n                \"Checking database and table state, this may take time depending on the size of your schema.\");\n        try {\n            if (pdbName != null) {\n                connection.setSessionToPdb(pdbName);\n            }\n\n            // Check if ALL supplemental logging is enabled at the database\n            if (!isDatabaseAllSupplementalLoggingEnabled(connection)) {\n                // Check if MIN supplemental logging is enabled at the database\n                if (!isDatabaseMinSupplementalLoggingEnabled(connection)) {\n                    throw new DebeziumException(\n                            \"Supplemental logging not properly configured. \"\n                                    + \"Use: ALTER DATABASE ADD SUPPLEMENTAL LOG DATA\");\n                }\n\n                // Check if ALL COLUMNS supplemental logging is enabled for each captured table\n                for (TableId tableId : schema.tableIds()) {\n                    if (!connection.isTableExists(tableId)) {\n                        LOGGER.warn(\n                                \"Database table '{}' no longer exists, supplemental log check skipped\",\n                                tableId);\n                    } else if (!isTableAllColumnsSupplementalLoggingEnabled(connection, tableId)) {\n                        LOGGER.warn(\n                                \"Database table '{}' not configured with supplemental logging \\\"(ALL) COLUMNS\\\"; \"\n                                        + \"only explicitly changed columns will be captured. \"\n                                        + \"Use: ALTER TABLE {}.{} ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS\",\n                                tableId,\n                                tableId.schema(),\n                                tableId.table());","sourceCodeStart":846,"sourceCodeEnd":882,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-oracle/src/main/java/io/debezium/connector/oracle/logminer/LogMinerStreamingChangeEventSource.java#L846-L882","documentation":"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.","triggerScenarios":"execute -> checkDatabaseAndTableState finds isDatabaseAllSupplementalLoggingEnabled and isDatabaseMinSupplementalLoggingEnabled both false — i.e. SELECT SUPPLEMENTAL_LOG_DATA_MIN/ALL FROM V$DATABASE both show NO.","commonSituations":"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.","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;."],"exampleFix":"-- before: connector fails supplemental-logging check\nSQL> SELECT SUPPLEMENTAL_LOG_DATA_MIN FROM V$DATABASE;  -- NO\n-- after\nSQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;\nSQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;","handlingStrategy":"validation","validationCode":"SELECT SUPPLEMENTAL_LOG_DATA_MIN, SUPPLEMENTAL_LOG_DATA_ALL\n  FROM V$DATABASE;\n-- proceed only if at least MIN is YES/IMPLICIT","typeGuard":null,"tryCatchPattern":"try {\n    startConnector();\n} catch (DebeziumException e) {\n    if (e.getMessage().contains(\"Supplemental logging not properly configured\")) {\n        // run ALTER DATABASE ADD SUPPLEMENTAL LOG DATA via DBA, then restart\n    } else { throw e; }\n}","preventionTips":["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"],"tags":["oracle","cdc","logminer","supplemental-logging","database-config"],"backgroundTag":"invalid-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"}