apache/seatunnel · warning
No captured data collections found in database
Error message
No captured data collections found in database
What it means
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.
Source
Thrown at seatunnel-connectors-v2/connector-cdc/connector-cdc-db2/src/main/java/org/apache/seatunnel/connectors/seatunnel/cdc/db2/source/reader/fetch/transactionlog/Db2TransactionLogFetchTask.java:435
throws SQLException, InterruptedException {
Set<Db2ChangeTable> cdcEnabledTables = dataConnection.listOfChangeTables();
if (cdcEnabledTables.isEmpty()) {
LOG.warn(
"No table has enabled CDC or security constraints prevent getting the list of change tables");
}
Map<TableId, List<Db2ChangeTable>> includedAndCdcEnabledTables =
cdcEnabledTables.stream()
.filter(
changeTable ->
connectorConfig
.getTableFilters()
.dataCollectionFilter()
.isIncluded(changeTable.getSourceTableId()))
.collect(Collectors.groupingBy(Db2ChangeTable::getSourceTableId));
if (includedAndCdcEnabledTables.isEmpty()) {
LOG.warn(DatabaseSchema.NO_CAPTURED_DATA_COLLECTIONS_WARNING);
}
List<Db2ChangeTable> tables = new ArrayList<>();
for (List<Db2ChangeTable> captures : includedAndCdcEnabledTables.values()) {
Db2ChangeTable currentTable = captures.get(0);
if (captures.size() > 1) {
Db2ChangeTable futureTable;
if (captures.get(0).getStartLsn().compareTo(captures.get(1).getStartLsn())
< 0) {
futureTable = captures.get(1);
} else {
currentTable = captures.get(1);
futureTable = captures.get(0);
}
currentTable.setStopLsn(futureTable.getStartLsn());
tables.add(futureTable);
LOG.info(
"Multiple capture instances present for the same table: {} and {}",View on GitHub (pinned to cf67b549a7)
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
Example fix
// before "table.include.list" = "dbo.UserTable" // captured table is actually MYDB.dbo.UserTable // after "table.include.list" = "MYDB.dbo.UserTable" // matches changeTable.getSourceTableId()
Defensive patterns
Strategy: validation
Validate before calling
// Verify that CDC-enabled tables intersect with the connector include lists
Set<String> cdcTables = listCdcEnabledTableIds(); // from sys.cdc.change_tables
List<String> includeList = config.getTableIncludeList(); // fully-qualified regexes
boolean anyMatch = cdcTables.stream().anyMatch(t ->
includeList.stream().anyMatch(p -> t.matches(p)));
if (!anyMatch) {
throw new IllegalStateException(
"CDC-enabled tables " + cdcTables + " do not match include list " + includeList);
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: EmptyResultError / "no results found": when an API or scraper succeeds but returns zero rows — this error's family across 9 libraries.
Related errors
- Incremental snapshot for tables requires primary key, but ta
- The following configured DB2 tables are not enabled for capt
- DB2 CDC table-names must use database.schema.table format, b
- No table filters found for filtered publication %s
- No table has enabled CDC or security constraints prevent get
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/a89d1168a8ddf841.
Report an issue: GitHub.