{"record":{"id":"a89d1168a8ddf841","repo":"apache/seatunnel","slug":"no-captured-data-collections-found-in-database","errorCode":null,"errorMessage":"No captured data collections found in database","messagePattern":"No captured data collections found in database","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"seatunnel-connectors-v2/connector-cdc/connector-cdc-db2/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/db2/source/reader/fetch/transactionlog/Db2TransactionLogFetchTask.java","lineNumber":435,"sourceCode":"                throws SQLException, InterruptedException {\n            Set<Db2ChangeTable> cdcEnabledTables = dataConnection.listOfChangeTables();\n            if (cdcEnabledTables.isEmpty()) {\n                LOG.warn(\n                        \"No table has enabled CDC or security constraints prevent getting the list of change tables\");\n            }\n\n            Map<TableId, List<Db2ChangeTable>> includedAndCdcEnabledTables =\n                    cdcEnabledTables.stream()\n                            .filter(\n                                    changeTable ->\n                                            connectorConfig\n                                                    .getTableFilters()\n                                                    .dataCollectionFilter()\n                                                    .isIncluded(changeTable.getSourceTableId()))\n                            .collect(Collectors.groupingBy(Db2ChangeTable::getSourceTableId));\n\n            if (includedAndCdcEnabledTables.isEmpty()) {\n                LOG.warn(DatabaseSchema.NO_CAPTURED_DATA_COLLECTIONS_WARNING);\n            }\n\n            List<Db2ChangeTable> tables = new ArrayList<>();\n            for (List<Db2ChangeTable> captures : includedAndCdcEnabledTables.values()) {\n                Db2ChangeTable currentTable = captures.get(0);\n                if (captures.size() > 1) {\n                    Db2ChangeTable futureTable;\n                    if (captures.get(0).getStartLsn().compareTo(captures.get(1).getStartLsn())\n                            < 0) {\n                        futureTable = captures.get(1);\n                    } else {\n                        currentTable = captures.get(1);\n                        futureTable = captures.get(0);\n                    }\n                    currentTable.setStopLsn(futureTable.getStartLsn());\n                    tables.add(futureTable);\n                    LOG.info(\n                            \"Multiple capture instances present for the same table: {} and {}\",","sourceCodeStart":417,"sourceCodeEnd":453,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-cdc/connector-cdc-db2/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/db2/source/reader/fetch/transactionlog/Db2TransactionLogFetchTask.java#L417-L453","documentation":"After filtering the list of CDC change tables down to those matching the connector's dataCollectionFilter (database/table include lists), getCdcTablesToQuery finds zero included tables and logs the Debezium NO_CAPTURED_DATA_COLLECTIONS_WARNING. This means CDC may be enabled on tables, but none of the captured tables match the connector's configured include/exclude filters, so there is nothing to stream. It is a warning, not a throw; the task continues with an empty capture set.","triggerScenarios":"Db2TransactionLogFetchTask.getCdcTablesToQuery() (via tablesSlot/tables): listOfChangeTables() returned change tables, but dataCollectionFilter().isIncluded(changeTable.getSourceTableId()) rejected every one — e.g. table.include.list patterns don't match schema/table names, tables were renamed or dropped after config was written, or case/schema-qualified names differ from what the filter expects.","commonSituations":"Copy-pasted include lists with wrong schema prefix (dbo.MyTable vs DBO.mytable vs MYDB.dbo.MyTable); regex include patterns that never match; database renamed after connector config authored; multi-tenant setups where include list references a tenant database not actually CDC-enabled; connector upgraded and stricter TableId formatting changed matching.","solutions":["Align table.include.list / database.include.list with the actual fully-qualified TableId of the CDC-enabled tables (verify via listOfChangeTables / cdc.change_tables query)","Enable CDC on the tables you intend to capture if the include list is correct but the tables are not captured","Re-check schema/table name casing and qualification against the source database catalog","Log or inspect which TableIds exist and adjust the filter regex so at least one captured table matches"],"exampleFix":"// before\n\"table.include.list\" = \"dbo.UserTable\" // captured table is actually MYDB.dbo.UserTable\n// after\n\"table.include.list\" = \"MYDB.dbo.UserTable\" // matches changeTable.getSourceTableId()","handlingStrategy":"validation","validationCode":"// Verify that CDC-enabled tables intersect with the connector include lists\nSet<String> cdcTables = listCdcEnabledTableIds(); // from sys.cdc.change_tables\nList<String> includeList = config.getTableIncludeList(); // fully-qualified regexes\nboolean anyMatch = cdcTables.stream().anyMatch(t ->\n    includeList.stream().anyMatch(p -> t.matches(p)));\nif (!anyMatch) {\n    throw new IllegalStateException(\n        \"CDC-enabled tables \" + cdcTables + \" do not match include list \" + includeList);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep table.include.list/database.include.list in sync with the actual schema-qualified table names (query the catalog to confirm)","Treat table renames/drops as connector-config change events requiring an update to include lists","Prefer explicit fully-qualified names over broad or hand-written regexes, and test the regex against real TableIds","After connector upgrades, re-validate that TableId formatting still matches your include patterns"],"tags":["cdc","db2","config","table-filter","empty-result"],"backgroundTag":"empty-result-set","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}